TDME2  1.9.200
FrameBufferRenderShader.cpp
Go to the documentation of this file.
2 
3 #include <tdme/tdme.h>
8 #include <tdme/engine/Engine.h>
9 
12 
21 
22 FrameBufferRenderShader::FrameBufferRenderShader(Renderer* renderer)
23 {
24  this->renderer = renderer;
25  initialized = false;
26  isRunning = false;
27 }
28 
30 {
31 }
32 
34 {
35  return initialized;
36 }
37 
39 {
40  auto shaderVersion = renderer->getShaderVersion();
43  "shader/" + shaderVersion + "/framebuffer",
44  "render_vertexshader.vert"
45  );
46  if (vertexShaderId == 0) return;
47 
50  "shader/" + shaderVersion + "/framebuffer",
51  "render_fragmentshader.frag"
52  );
53  if (fragmentShaderId == 0) return;
54 
61  }
62  if (renderer->linkProgram(programId) == false) return;
63 
64  // uniforms
66  if (uniformColorBufferTextureUnit == -1) return;
67 
69 
70  //
71  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
72 
73  // create vbos
74  auto created = false;
75  auto vboManaged = Engine::getInstance()->getVBOManager()->addVBO("framebuffer_render_shader.vbos", 2, true, false, created);
76  vboVertices = (*vboManaged->getVBOIds())[0];
77  vboTextureCoordinates = (*vboManaged->getVBOIds())[1];
78 
79  // vertices
80  {
81  auto fbVertices = ObjectBuffer::getByteBuffer(contextIdx, 6 * 3 * sizeof(float))->asFloatBuffer();
82 
83  fbVertices.put(-1.0f); fbVertices.put(+1.0f); fbVertices.put(0.0f);
84  fbVertices.put(+1.0f); fbVertices.put(+1.0f); fbVertices.put(0.0f);
85  fbVertices.put(+1.0f); fbVertices.put(-1.0f); fbVertices.put(0.0f);
86 
87  fbVertices.put(+1.0f); fbVertices.put(-1.0f); fbVertices.put(0.0f);
88  fbVertices.put(-1.0f); fbVertices.put(-1.0f); fbVertices.put(0.0f);
89  fbVertices.put(-1.0f); fbVertices.put(+1.0f); fbVertices.put(0.0f);
90 
91  renderer->uploadBufferObject(contextIdx, vboVertices, fbVertices.getPosition() * sizeof(float), &fbVertices);
92  }
93 
94  // texture coordinates
95  {
96  auto fbTextureCoordinates = ObjectBuffer::getByteBuffer(contextIdx, 6 * 2 * sizeof(float))->asFloatBuffer();
97 
98  if (renderer->getRendererType() == Renderer::RENDERERTYPE_VULKAN) {
99  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(0.0f);
100  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(0.0f);
101  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(1.0f);
102 
103  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(1.0f);
104  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(1.0f);
105  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(0.0f);
106  } else {
107  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(+1.0f);
108  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(+1.0f);
109  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(0.0f);
110 
111  fbTextureCoordinates.put(+1.0f); fbTextureCoordinates.put(0.0f);
112  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(0.0f);
113  fbTextureCoordinates.put(+0.0f); fbTextureCoordinates.put(+1.0f);
114  }
115 
116  renderer->uploadBufferObject(contextIdx, vboTextureCoordinates, fbTextureCoordinates.getPosition() * sizeof(float), &fbTextureCoordinates);
117  }
118 
119  //
120  initialized = true;
121 }
122 
124 {
125  Engine::getInstance()->getVBOManager()->removeVBO("framebuffer_render_shader.vbos");
126 }
127 
129 {
130  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
131  renderer->useProgram(contextIdx, programId);
135  isRunning = true;
136 }
137 
139 {
140  isRunning = false;
141 }
Engine main class.
Definition: Engine.h:131
static Engine * getInstance()
Returns engine instance.
Definition: Engine.h:612
static VBOManager * getVBOManager()
Definition: Engine.h:635
VBOManager_VBOManaged * addVBO(const string &vboId, int32_t ids, bool useGPUMemory, bool shared, bool &created)
Adds a VBO to manager or retrieve VBO if existing.
Definition: VBOManager.cpp:31
void removeVBO(const string &vboId)
Removes a VBO from manager.
Definition: VBOManager.cpp:73
virtual int32_t loadShader(int32_t type, const string &pathName, const string &fileName, const string &definitions=string(), const string &functions=string())=0
Loads a shader.
virtual int32_t createProgram(int type)=0
Creates a shader program.
virtual void setProgramAttributeLocation(int32_t programId, int32_t location, const string &name)=0
Bind attribute to a input location.
virtual void setProgramUniformInteger(int contextIdx, int32_t uniformId, int32_t value)=0
Set up a integer uniform value.
virtual bool linkProgram(int32_t programId)=0
Links attached shaders to a program.
void setLighting(int contextIdx, int32_t lighting)
Set current lighting model.
Definition: Renderer.h:504
virtual void attachShaderToProgram(int32_t programId, int32_t shaderId)=0
Attaches a shader to a program.
virtual int32_t getProgramUniformLocation(int32_t programId, const string &name)=0
Returns location of given uniform variable.
virtual void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data)=0
Uploads buffer data to buffer object.
virtual void useProgram(int contextIdx, int32_t programId)=0
Use shader program.
Buffers used to transfer data between main memory to graphics board memory.
Definition: ObjectBuffer.h:24
Byte buffer class.
Definition: ByteBuffer.h:27
Float buffer class.
Definition: FloatBuffer.h:18