//////////////////////////////////////////////////////////////////////////////// // Copyright (c) 2011, Computer Graphics Group RWTH Aachen University // // All rights reserved. // //////////////////////////////////////////////////////////////////////////////// #ifndef ACGL_OPENGL_OBJECTS_RENDEROBJECT_HH #define ACGL_OPENGL_OBJECTS_RENDEROBJECT_HH #include #include #include #include #include #include #include #include #include #include #include namespace ACGL{ namespace OpenGL{ class RenderObject { ACGL_NOT_COPYABLE(RenderObject) // ==================================================================================================== \/ // ============================================================================================ STRUCTS \/ // ==================================================================================================== \/ private: struct AttributeMapping { //! The attributeID stores the attribute index within the vbo. int_t attributeID; //! The attributeLocation comes from the shader int_t attributeLocation; }; // ===================================================================================================== \/ // ============================================================================================ TYPEDEFS \/ // ===================================================================================================== \/ private: typedef std::vector< AttributeMapping > AttributeMappingVec; // ========================================================================================================= \/ // ============================================================================================ CONSTRUCTORS \/ // ========================================================================================================= \/ public: RenderObject(ConstSharedVertexBufferObject _vertexBufferObject, ConstSharedShaderProgramObject _shaderProgram, ConstSharedFrameBufferObject _frameBufferObject) : mpVertexBufferObject(_vertexBufferObject), mpShaderProgramObject(_shaderProgram), mpFrameBufferObject(_frameBufferObject), mAttributeMappings(), mpDrawBuffers(NULL) { updateMappings(); } RenderObject(ConstSharedVertexBufferObject _vertexBufferObject, ConstSharedShaderProgramObject _shaderProgram) : mpVertexBufferObject(_vertexBufferObject), mpShaderProgramObject(_shaderProgram), mpFrameBufferObject(), mAttributeMappings(), mpDrawBuffers(NULL) { updateMappings(); } virtual ~RenderObject(void) { if(mpDrawBuffers != NULL) delete[](mpDrawBuffers); } // ==================================================================================================== \/ // ============================================================================================ GETTERS \/ // ==================================================================================================== \/ public: inline ConstSharedVertexBufferObject getVertexBufferObject (void) const { return mpVertexBufferObject; } inline ConstSharedFrameBufferObject getFrameBufferObject (void) const { return mpFrameBufferObject; } inline ConstSharedShaderProgramObject getShaderProgramObject (void) const { return mpShaderProgramObject; } // ==================================================================================================== \/ // ============================================================================================ METHODS \/ // ==================================================================================================== \/ public: void updateMappings (void); void bindFrameBufferObject (void) const; void useShaderProgramObject (void) const; void enableVertexBufferObject (void) const; void disableVertexBufferObject (void) const; inline void enable(void) const { bindFrameBufferObject(); useShaderProgramObject(); enableVertexBufferObject(); } inline void disable(void) const { disableVertexBufferObject(); } inline void draw(void) const { mpVertexBufferObject->draw(); } inline void render(void) const { enable(); draw(); disable(); } inline void validate (void) const { mpFrameBufferObject->validate(); mpVertexBufferObject->validate(); } // =================================================================================================== \/ // ============================================================================================ FIELDS \/ // =================================================================================================== \/ protected: ConstSharedVertexBufferObject mpVertexBufferObject; ConstSharedShaderProgramObject mpShaderProgramObject; ConstSharedFrameBufferObject mpFrameBufferObject; AttributeMappingVec mAttributeMappings; GLuint* mpDrawBuffers; }; ACGL_SHARED_TYPEDEF(RenderObject) } // OpenGL } // ACGL #endif // ACGL_OPENGL_OBJECTS_RENDEROBJECT_HH