From c4db7ab1e19404b77e8a84a756b7fad923f37847 Mon Sep 17 00:00:00 2001 From: Janis Born <janis.born@rwth-aachen.de> Date: Wed, 7 Mar 2012 16:28:00 +0100 Subject: [PATCH] * RenderObject no longer performs automatic mapping updates * most members of RenderObject are now const (compatibility with resources loaded from FileManagers) --- .../OpenGL/Controller/RenderObjectControl.hh | 27 ++++++------ .../Controller/ShaderProgramObjectControl.hh | 6 +-- .../OpenGL/HiLevelObjects/RenderObject.hh | 42 +++++++++---------- .../HiLevelObjects/ShaderProgramObject.hh | 6 +-- .../OpenGL/Controller/RenderObjectControl.cc | 13 ++++++ .../OpenGL/HiLevelObjects/RenderObject.cc | 18 ++++---- 6 files changed, 62 insertions(+), 50 deletions(-) diff --git a/include/ACGL/OpenGL/Controller/RenderObjectControl.hh b/include/ACGL/OpenGL/Controller/RenderObjectControl.hh index a07bd52f..45488eb1 100644 --- a/include/ACGL/OpenGL/Controller/RenderObjectControl.hh +++ b/include/ACGL/OpenGL/Controller/RenderObjectControl.hh @@ -23,45 +23,42 @@ class RenderObjectControl : public Resource::BasicCreateController<RenderObject> // ========================================================================================================= \/ public: RenderObjectControl( - const ConstSharedShaderProgramObject& _shaderProgramObject) - : - mpShaderProgramObject(_shaderProgramObject), - mpFrameBufferObject() - {} - - RenderObjectControl( + const ConstSharedVertexArrayObject& _vertexArrayObject, const ConstSharedShaderProgramObject& _shaderProgramObject, - const ConstSharedFrameBufferObject& _frameBufferObject) + const ConstSharedFrameBufferObject& _frameBufferObject = ConstSharedFrameBufferObject(), + const ConstSharedViewport& _viewport = ConstSharedViewport()) : + mpVertexArrayObject(_vertexArrayObject), mpShaderProgramObject(_shaderProgramObject), - mpFrameBufferObject(_frameBufferObject) + mpFrameBufferObject(_frameBufferObject), + mpViewport(_viewport) {} + virtual ~RenderObjectControl(void) {} // ==================================================================================================== \/ // ============================================================================================ GETTERS \/ // ==================================================================================================== \/ public: + inline RenderObjectControl& vertexArrayObject (const ConstSharedVertexArrayObject& _vertexArrayObject) { mpVertexArrayObject = _vertexArrayObject; return *this; } inline RenderObjectControl& shaderProgramObject (const ConstSharedShaderProgramObject& _shaderProgramObject) { mpShaderProgramObject = _shaderProgramObject; return *this; } inline RenderObjectControl& frameBufferObject (const ConstSharedFrameBufferObject& _frameBufferObject) { mpFrameBufferObject = _frameBufferObject; return *this; } + inline RenderObjectControl& viewport (const ConstSharedViewport& _viewport) { mpViewport = _viewport; return *this; } // ===================================================================================================== \/ // ============================================================================================ OVERRIDE \/ // ===================================================================================================== \/ public: - virtual SharedRenderObject create(void) - { - // TODO: reimplement - - return SharedRenderObject(); - } + virtual SharedRenderObject create(); // =================================================================================================== \/ // ============================================================================================ FIELDS \/ // =================================================================================================== \/ protected: + ConstSharedVertexArrayObject mpVertexArrayObject; ConstSharedShaderProgramObject mpShaderProgramObject; ConstSharedFrameBufferObject mpFrameBufferObject; + ConstSharedViewport mpViewport; }; } // OpenGL diff --git a/include/ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh b/include/ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh index 123a359a..c832ddee 100644 --- a/include/ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh +++ b/include/ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh @@ -46,7 +46,7 @@ public: // ============================================================================================ CONSTRUCTORS \/ // ========================================================================================================= \/ public: - ShaderProgramObjectControl(const SharedShaderProgram& _shaderProgram) + ShaderProgramObjectControl(const ConstSharedShaderProgram& _shaderProgram) : Resource::BasicCreateController<ShaderProgramObject>(), mShaderProgram(_shaderProgram), mUniformAttachmentDefines(), @@ -58,7 +58,7 @@ public: // ============================================================================================ METHODS \/ // ==================================================================================================== \/ public: - inline ShaderProgramObjectControl& shaderProgram (const SharedShaderProgram& _shaderProgram) { mShaderProgram = _shaderProgram; return *this; } + inline ShaderProgramObjectControl& shaderProgram (const ConstSharedShaderProgram& _shaderProgram) { mShaderProgram = _shaderProgram; return *this; } inline ShaderProgramObjectControl& uniform (const std::string& _name, const ConstSharedUniform& _uniform) { @@ -84,7 +84,7 @@ public: // ============================================================================================ FIELDS \/ // =================================================================================================== \/ protected: - SharedShaderProgram mShaderProgram; + ConstSharedShaderProgram mShaderProgram; UniformAttachmentDefineVec mUniformAttachmentDefines; UniformTextureAttachmentDefineVec mUniformTextureAttachmentDefines; }; diff --git a/include/ACGL/OpenGL/HiLevelObjects/RenderObject.hh b/include/ACGL/OpenGL/HiLevelObjects/RenderObject.hh index 3f83e3a7..4a7fcd8d 100644 --- a/include/ACGL/OpenGL/HiLevelObjects/RenderObject.hh +++ b/include/ACGL/OpenGL/HiLevelObjects/RenderObject.hh @@ -41,8 +41,8 @@ class RenderObject // ============================================================================================ CONSTRUCTORS \/ // ========================================================================================================= \/ public: - RenderObject( SharedVertexArrayObject _vertexArrayObject, - SharedShaderProgramObject _shaderProgramObject, + RenderObject(ConstSharedVertexArrayObject _vertexArrayObject, + ConstSharedShaderProgramObject _shaderProgramObject, ConstSharedFrameBufferObject _frameBufferObject = ConstSharedFrameBufferObject(), ConstSharedViewport _viewport = ConstSharedViewport()) : mpVertexArrayObject(_vertexArrayObject), @@ -57,9 +57,9 @@ public: // ============================================================================================ GETTERS \/ // ==================================================================================================== \/ public: - inline SharedVertexArrayObject getVertexArrayObject() const { return mpVertexArrayObject; } + inline ConstSharedVertexArrayObject getVertexArrayObject() const { return mpVertexArrayObject; } inline ConstSharedFrameBufferObject getFrameBufferObject() const { return mpFrameBufferObject; } - inline SharedShaderProgramObject getShaderProgramObject() const { return mpShaderProgramObject; } + inline ConstSharedShaderProgramObject getShaderProgramObject() const { return mpShaderProgramObject; } inline ConstSharedViewport getViewport() const { return mpViewport; } // ==================================================================================================== \/ @@ -70,7 +70,7 @@ public: void updateMappings(); //! setup everything for drawing and store old states - inline void enable() + inline void enable() const { enableFrameBufferObject(); enableShaderProgramObject(); @@ -79,7 +79,7 @@ public: } //! restore old states - inline void disable() + inline void disable() const { disableViewport(); disableVertexArrayObject(); @@ -94,7 +94,7 @@ public: } //! draws the VAO, everything needed for drawing is performed by this call - inline void render() + inline void render() const { enable(); draw(); @@ -150,32 +150,32 @@ public: // ============================================================================================ METHODS \/ // ==================================================================================================== \/ private: - void enableFrameBufferObject(); - void disableFrameBufferObject(); + void enableFrameBufferObject() const; + void disableFrameBufferObject() const; - void enableShaderProgramObject(); - void disableShaderProgramObject(); + void enableShaderProgramObject() const; + void disableShaderProgramObject() const; - void enableViewport(); - void disableViewport(); + void enableViewport() const; + void disableViewport() const; - void enableVertexArrayObject(); - void disableVertexArrayObject(); + void enableVertexArrayObject() const; + void disableVertexArrayObject() const; // =================================================================================================== \/ // ============================================================================================ FIELDS \/ // =================================================================================================== \/ protected: - SharedVertexArrayObject mpVertexArrayObject; // mandatory - SharedShaderProgramObject mpShaderProgramObject; // mandatory + ConstSharedVertexArrayObject mpVertexArrayObject; // mandatory + ConstSharedShaderProgramObject mpShaderProgramObject; // mandatory ConstSharedFrameBufferObject mpFrameBufferObject; // optional ConstSharedViewport mpViewport; // optional //! old states so render() can be side-effect free - Viewport mLastViewport; - GLint mLastShaderProgram; - GLint mLastFBO; - GLint mLastVAO; + mutable Viewport mLastViewport; + mutable GLint mLastShaderProgram; + mutable GLint mLastFBO; + mutable GLint mLastVAO; }; ACGL_SMARTPOINTER_TYPEDEFS(RenderObject) diff --git a/include/ACGL/OpenGL/HiLevelObjects/ShaderProgramObject.hh b/include/ACGL/OpenGL/HiLevelObjects/ShaderProgramObject.hh index 127b1f2f..e5987232 100644 --- a/include/ACGL/OpenGL/HiLevelObjects/ShaderProgramObject.hh +++ b/include/ACGL/OpenGL/HiLevelObjects/ShaderProgramObject.hh @@ -62,7 +62,7 @@ public: // ============================================================================================ CONSTRUCTORS \/ // ========================================================================================================= \/ public: - ShaderProgramObject(const SharedShaderProgram& _shaderProgram) + ShaderProgramObject(const ConstSharedShaderProgram& _shaderProgram) : mpShaderProgram(_shaderProgram) {} @@ -72,7 +72,7 @@ public: // ============================================================================================ GETTERS \/ // ==================================================================================================== \/ public: - inline SharedShaderProgram getShaderProgram (void) const { return mpShaderProgram; } + inline ConstSharedShaderProgram getShaderProgram (void) const { return mpShaderProgram; } inline UniformAttachmentVec getUniformAttachments (void) const { return mUniformAttachments; } inline UniformTextureAttachmentVec getUniformTextureAttachments (void) const { return mUniformTextureAttachments; } @@ -103,7 +103,7 @@ public: // ============================================================================================ FIELDS \/ // =================================================================================================== \/ protected: - SharedShaderProgram mpShaderProgram; + ConstSharedShaderProgram mpShaderProgram; UniformAttachmentVec mUniformAttachments; UniformTextureAttachmentVec mUniformTextureAttachments; }; diff --git a/src/ACGL/OpenGL/Controller/RenderObjectControl.cc b/src/ACGL/OpenGL/Controller/RenderObjectControl.cc index e69de29b..6c00fe26 100644 --- a/src/ACGL/OpenGL/Controller/RenderObjectControl.cc +++ b/src/ACGL/OpenGL/Controller/RenderObjectControl.cc @@ -0,0 +1,13 @@ +#include <ACGL/OpenGL/Controller/RenderObjectControl.hh> + +using namespace ACGL::OpenGL; + +SharedRenderObject RenderObjectControl::create() +{ + return SharedRenderObject(new RenderObject( + mpVertexArrayObject, + mpShaderProgramObject, + mpFrameBufferObject, + mpViewport + )); +} diff --git a/src/ACGL/OpenGL/HiLevelObjects/RenderObject.cc b/src/ACGL/OpenGL/HiLevelObjects/RenderObject.cc index 7f49a81b..17c70f77 100644 --- a/src/ACGL/OpenGL/HiLevelObjects/RenderObject.cc +++ b/src/ACGL/OpenGL/HiLevelObjects/RenderObject.cc @@ -19,6 +19,7 @@ using namespace ACGL::OpenGL; void RenderObject::updateMappings() { + /* if (mpFrameBufferObject) { // set ShaderProgram out-mappings by the definition of the FBO mpShaderProgramObject->getShaderProgram()->setFragmentDataLocations( mpFrameBufferObject->getAttachmentLocations() ); @@ -26,9 +27,10 @@ void RenderObject::updateMappings() mpVertexArrayObject->setAttributeLocations( mpShaderProgramObject->getShaderProgram()->getAttributeLocations() ); openGLRareError(); + */ } -void RenderObject::enableFrameBufferObject() +void RenderObject::enableFrameBufferObject() const { glGetIntegerv( GL_FRAMEBUFFER_BINDING, &mLastFBO ); @@ -43,27 +45,27 @@ void RenderObject::enableFrameBufferObject() openGLRareError(); } -void RenderObject::disableFrameBufferObject() +void RenderObject::disableFrameBufferObject() const { glBindFramebuffer( GL_FRAMEBUFFER, mLastFBO ); openGLRareError(); } -void RenderObject::enableShaderProgramObject() +void RenderObject::enableShaderProgramObject() const { glGetIntegerv( GL_CURRENT_PROGRAM, &mLastShaderProgram ); mpShaderProgramObject->use(); openGLRareError(); } -void RenderObject::disableShaderProgramObject() +void RenderObject::disableShaderProgramObject() const { glUseProgram( mLastShaderProgram ); openGLRareError(); } -void RenderObject::enableVertexArrayObject() +void RenderObject::enableVertexArrayObject() const { // remember old VAO glGetIntegerv( GL_VERTEX_ARRAY_BINDING, &mLastVAO ); @@ -72,13 +74,13 @@ void RenderObject::enableVertexArrayObject() openGLRareError(); } -void RenderObject::disableVertexArrayObject() +void RenderObject::disableVertexArrayObject() const { glBindVertexArray( mLastVAO ); openGLRareError(); } -void RenderObject::enableViewport() +void RenderObject::enableViewport() const { mLastViewport.setFromGLContext(); @@ -92,7 +94,7 @@ void RenderObject::enableViewport() } } -void RenderObject::disableViewport() +void RenderObject::disableViewport() const { mLastViewport.use(); } -- GitLab