#ifndef FrameBuffer_h__ #define FrameBuffer_h__ #include "../OpenGL.h" #include "Util/GLError.h" class BufferResource { public: BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment); GLuint* m_ResourceHandle; GLenum m_ResourceType; GLenum m_Attachment; private: }; template class ResourceType : public BufferResource { public: ResourceType(GLuint* resourceHandle, GLenum attachment) : BufferResource(resourceHandle, RESOURCETYPE, attachment) { } }; class Texture2D : public ResourceType { public: Texture2D(GLuint* resourceHandle, GLenum attachment) : ResourceType(resourceHandle, attachment) { }; ~Texture2D(); }; class RenderBuffer : public ResourceType { public: RenderBuffer(GLuint* resourceHandle, GLenum attachment) : ResourceType(resourceHandle, attachment) { }; ~RenderBuffer(); }; class FrameBuffer { public: FrameBuffer() : m_BufferHandle(0) { } ~FrameBuffer(); void AddResource(std::shared_ptr resource); void Generate(); void Bind(); void Unbind(); GLuint GetHandle(); private: GLuint m_BufferHandle; std::vector> m_Resources; }; #endif