#ifndef FBO_H #define FBO_H #include #include "VBO.h" #include "GLSLShader.h" #include "Model.h" namespace New3D { class R3DFrameBuffers { public: R3DFrameBuffers(); ~R3DFrameBuffers(); void Draw(); // draw and composite the transparent layers bool CreateFBO(int width, int height); void DestroyFBO(); void BindTexture(Layer layer); void SetFBO(Layer layer); void StoreDepth(); void RestoreDepth(); private: bool CreateFBODepthCopy(int width, int height); GLuint CreateTexture(int width, int height); void AllocShaderTrans(); void AllocShaderBase(); void DrawBaseLayer(); void DrawAlphaLayer(); GLuint m_frameBufferID; GLuint m_renderBufferID; GLuint m_texIDs[3]; GLuint m_frameBufferIDCopy; GLuint m_renderBufferIDCopy; Layer m_lastLayer; int m_width; int m_height; // shaders GLSLShader m_shaderBase; GLSLShader m_shaderTrans; // vao GLuint m_vao; // this really needed if we don't actually use vertex attribs? }; } #endif