#pragma once #include #include #include #include /** * A Frame Buffer Object is used by OpenGL to render into a texture. Specifically this implementation assumes that the * rendered model will provide diffuse, position and normal at the same time in a MRT fashion */ class FBORenderTexture { public: // Ctors/Dtors FBORenderTexture(int width, int height); ~FBORenderTexture(); // Methods void start(); void stop(); void showTexture(unsigned int i, float fWindowsWidth, float fWindowsHeight, float fSizeX = 400, float fSizeY = 400, float x = 0, float y = 0) const; GLuint getDiffuseTexture() const { return m_diffuseTexture; } GLuint getPositionTexture() const { return m_positionTexture; } GLuint getNormalsTexture() const { return m_normalsTexture; } private: // Variables GLuint m_fbo; // The FBO ID GLuint m_diffuseRT; // The diffuse render target unsigned int m_diffuseTexture; // The OpenGL texture for the diffuse render target GLuint m_positionRT; // The position render target unsigned int m_positionTexture; // The OpenGL texture for the position render target GLuint m_normalsRT; // The normals render target unsigned int m_normalsTexture; // The OpenGL texture for the normals render target GLuint m_depthBuffer; // Depth buffer handle unsigned int m_width; // FBO width unsigned int m_height; // FBO height };