21 FrameBuffer::FrameBuffer(int32_t width, int32_t height, int32_t buffers, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)
56 auto rendererCubeMapTextureIndex = -1;
122 auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
125 renderer->disableCulling(contextIdx);
129 renderer->clear(renderer->CLEAR_COLOR_BUFFER_BIT | renderer->CLEAR_DEPTH_BUFFER_BIT);
133 frameBufferRenderShader->useProgram();
136 renderer->setTextureUnit(contextIdx, 0);
140 renderer->setTextureUnit(contextIdx, 1);
144 renderer->bindVerticesBufferObject(contextIdx, frameBufferRenderShader->getVBOVertices());
145 renderer->bindTextureCoordinatesBufferObject(contextIdx, frameBufferRenderShader->getVBOTextureCoordinates());
148 renderer->drawTrianglesFromBufferObjects(contextIdx, 2, 0);
151 renderer->unbindBufferObjects(contextIdx);
154 renderer->setTextureUnit(contextIdx, 0);
155 renderer->bindTexture(contextIdx, renderer->ID_NONE);
158 renderer->setTextureUnit(contextIdx, 1);
159 renderer->bindTexture(contextIdx, renderer->ID_NONE);
162 renderer->setTextureUnit(contextIdx, 0);
165 frameBufferRenderShader->unUseProgram();
168 renderer->enableCulling(contextIdx);
173 if (target !=
nullptr) {
183 if (blendToSource !=
nullptr) {
186 renderer->enableAdditionBlending();
187 renderer->disableDepthBufferTest();
191 renderer->clear(renderer->CLEAR_COLOR_BUFFER_BIT | renderer->CLEAR_DEPTH_BUFFER_BIT);
195 auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
198 renderer->disableCulling(contextIdx);
210 postProcessingShader->setShader(contextIdx, shaderId);
211 postProcessingShader->setBufferPixelWidth(contextIdx, 1.0f /
static_cast<float>(source->
getWidth()));
212 postProcessingShader->setBufferPixelHeight(contextIdx, 1.0f /
static_cast<float>(source->
getHeight()));
213 postProcessingShader->setShaderParameters(contextIdx, engine);
216 renderer->setTextureUnit(contextIdx, 0);
220 renderer->setTextureUnit(contextIdx, 1);
224 if (temporary !=
nullptr) {
225 renderer->setTextureUnit(contextIdx, 2);
228 renderer->setTextureUnit(contextIdx, 3);
233 renderer->bindVerticesBufferObject(contextIdx, frameBufferRenderShader->getVBOVertices());
234 renderer->bindTextureCoordinatesBufferObject(contextIdx, frameBufferRenderShader->getVBOTextureCoordinates());
237 renderer->drawTrianglesFromBufferObjects(contextIdx, 2, 0);
240 renderer->unbindBufferObjects(contextIdx);
243 renderer->setTextureUnit(contextIdx, 0);
244 renderer->bindTexture(contextIdx, renderer->ID_NONE);
247 renderer->setTextureUnit(contextIdx, 1);
248 renderer->bindTexture(contextIdx, renderer->ID_NONE);
251 if (temporary !=
nullptr) {
252 renderer->setTextureUnit(contextIdx, 2);
253 renderer->bindTexture(contextIdx, renderer->ID_NONE);
255 renderer->setTextureUnit(contextIdx, 3);
256 renderer->bindTexture(contextIdx, renderer->ID_NONE);
260 renderer->setTextureUnit(contextIdx, 0);
263 postProcessingShader->unUseProgram();
266 renderer->enableCulling(contextIdx);
269 if (blendToSource !=
nullptr) {
270 renderer->disableBlending();
271 renderer->enableDepthBufferTest();
275 if (target !=
nullptr) {
static Engine * getInstance()
Returns engine instance.
static FrameBufferRenderShader * getFrameBufferRenderShader()
static Renderer * getRenderer()
static PostProcessingShader * getPostProcessingShader()
static STATIC_DLL_IMPEXT Engine * instance
int32_t getScaledHeight()
void bindColorBufferTexture(int contextIdx)
Bind color texture.
static constexpr int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Z
void reshape(int32_t width, int32_t height)
Resize the frame buffer.
void renderToScreen(Engine *engine, int32_t depthBufferTextureId, int32_t colorBufferTextureId)
Render given depth texture and color buffer texture to screen @parma engine engine.
void initialize()
Initialize the frame buffer.
virtual ~FrameBuffer()
Destructor.
static constexpr int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_X
int32_t colorBufferTextureId
static void disableFrameBuffer()
Switches back to non offscreen main frame buffer to be rendered.
void enableFrameBuffer()
Enables this frame buffer to be rendered.
static constexpr int32_t FRAMEBUFFER_COLORBUFFER
static constexpr int32_t CUBEMAPTEXTUREINDEX_NONE
static constexpr int32_t CUBEMAPTEXTUREINDEX_POSITIVE_X
static constexpr int32_t TEXTUREID_NONE
static void doPostProcessing(Engine *engine, FrameBuffer *target, FrameBuffer *source, const string &programId, const string &shaderId, FrameBuffer *temporary=nullptr, FrameBuffer *blendToSource=nullptr)
Do post processing into target frame buffer (which can be screen as well when passing nullptr)
static constexpr int32_t FRAMEBUFFER_DEPTHBUFFER
void dispose()
Disposes this frame buffer.
bool ownsColorBufferTexture
static constexpr int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Y
bool ownsDepthBufferTexture
static constexpr int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Y
static constexpr int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Z
int32_t cubeMapTextureIndex
int32_t depthBufferTextureId
void bindDepthBufferTexture(int contextIdx)
Bind depth texture.
Frame buffer render shader.
void useProgram()
Use program.
virtual void resizeDepthBufferTexture(int32_t textureId, int32_t width, int32_t height)=0
Resizes a depth texture.
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Z
virtual void setViewPort(int32_t width, int32_t height)=0
Set up viewport parameter.
virtual void resizeColorBufferTexture(int32_t textureId, int32_t width, int32_t height)=0
Resize color buffer texture.
virtual int32_t createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)=0
Creates a color buffer texture.
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_X
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Y
virtual void updateViewPort()=0
Update viewport.
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Y
virtual int32_t createFramebufferObject(int32_t depthBufferTextureId, int32_t colorBufferTextureId, int32_t cubeMapTextureId=0, int32_t cubeMapTextureIndex=0)=0
Creates a frame buffer object with depth texture attached.
virtual void bindTexture(int contextIdx, int32_t textureId)=0
Binds a texture with given id or unbinds when using ID_NONE.
virtual int32_t createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex)=0
Creates a depth buffer texture.
virtual void disposeTexture(int32_t textureId)=0
Dispose a texture.
virtual void bindFrameBuffer(int32_t frameBufferId)=0
Enables a framebuffer to be rendered.
virtual void disposeFrameBufferObject(int32_t frameBufferId)=0
Disposes a frame buffer object.
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Z
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_X