diff --git a/src/framework/graphics/graphicsdevice.cpp b/src/framework/graphics/graphicsdevice.cpp index 2783814..a34801c 100644 --- a/src/framework/graphics/graphicsdevice.cpp +++ b/src/framework/graphics/graphicsdevice.cpp @@ -84,37 +84,19 @@ GraphicsDevice::GraphicsDevice(GameWindow *window) m_solidColorTextures = new SolidColorTextureCache(this); - m_simpleColorShader = new SimpleColorShader(); - m_simpleColorTextureShader = new SimpleColorTextureShader(); - m_simpleTextureShader = new SimpleTextureShader(); - m_simpleTextureVertexLerpShader = new SimpleTextureVertexLerpShader(); - m_simpleTextureVertexSkinningShader = new SimpleTextureVertexSkinningShader(); - m_sprite2dShader = new Sprite2DShader(); - m_sprite3dShader = new Sprite3DShader(); - m_debugShader = new DebugShader(); - - RegisterManagedResource(m_simpleColorShader); - RegisterManagedResource(m_simpleColorTextureShader); - RegisterManagedResource(m_simpleTextureShader); - RegisterManagedResource(m_simpleTextureVertexLerpShader); - RegisterManagedResource(m_simpleTextureVertexSkinningShader); - RegisterManagedResource(m_sprite2dShader); - RegisterManagedResource(m_sprite3dShader); - RegisterManagedResource(m_debugShader); + m_simpleColorShader = NULL; + m_simpleColorTextureShader = NULL; + m_simpleTextureShader = NULL; + m_simpleTextureVertexLerpShader = NULL; + m_simpleTextureVertexSkinningShader = NULL; + m_sprite2dShader = NULL; + m_sprite3dShader = NULL; + m_debugShader = NULL; } GraphicsDevice::~GraphicsDevice() { STACK_TRACE; - UnregisterManagedResource(m_simpleColorShader); - UnregisterManagedResource(m_simpleColorTextureShader); - UnregisterManagedResource(m_simpleTextureShader); - UnregisterManagedResource(m_simpleTextureVertexLerpShader); - UnregisterManagedResource(m_simpleTextureVertexSkinningShader); - UnregisterManagedResource(m_sprite2dShader); - UnregisterManagedResource(m_sprite3dShader); - UnregisterManagedResource(m_debugShader); - SAFE_DELETE(m_defaultViewContext); SAFE_DELETE(m_debugRenderer); SAFE_DELETE(m_solidColorTextures); @@ -129,6 +111,102 @@ GraphicsDevice::~GraphicsDevice() SAFE_DELETE_ARRAY(m_boundTextures); } +SimpleColorShader* GraphicsDevice::GetSimpleColorShader() +{ + STACK_TRACE; + if (m_simpleColorShader == NULL) + { + m_simpleColorShader = new SimpleColorShader(); + m_simpleColorShader->Initialize(this); + } + + return m_simpleColorShader; +} + +SimpleColorTextureShader* GraphicsDevice::GetSimpleColorTextureShader() +{ + STACK_TRACE; + if (m_simpleColorTextureShader == NULL) + { + m_simpleColorTextureShader = new SimpleColorTextureShader(); + m_simpleColorTextureShader->Initialize(this); + } + + return m_simpleColorTextureShader; +} + +SimpleTextureShader* GraphicsDevice::GetSimpleTextureShader() +{ + STACK_TRACE; + if (m_simpleTextureShader == NULL) + { + m_simpleTextureShader = new SimpleTextureShader(); + m_simpleTextureShader->Initialize(this); + } + + return m_simpleTextureShader; +} + +Sprite2DShader* GraphicsDevice::GetSprite2DShader() +{ + STACK_TRACE; + if (m_sprite2dShader == NULL) + { + m_sprite2dShader = new Sprite2DShader(); + m_sprite2dShader->Initialize(this); + } + + return m_sprite2dShader; +} + +Sprite3DShader* GraphicsDevice::GetSprite3DShader() +{ + STACK_TRACE; + if (m_sprite3dShader == NULL) + { + m_sprite3dShader = new Sprite3DShader(); + m_sprite3dShader->Initialize(this); + } + + return m_sprite3dShader; +} + +SimpleTextureVertexLerpShader* GraphicsDevice::GetSimpleTextureVertexLerpShader() +{ + STACK_TRACE; + if (m_simpleTextureVertexLerpShader == NULL) + { + m_simpleTextureVertexLerpShader = new SimpleTextureVertexLerpShader(); + m_simpleTextureVertexLerpShader->Initialize(this); + } + + return m_simpleTextureVertexLerpShader; +} + +SimpleTextureVertexSkinningShader* GraphicsDevice::GetSimpleTextureVertexSkinningShader() +{ + STACK_TRACE; + if (m_simpleTextureVertexSkinningShader == NULL) + { + m_simpleTextureVertexSkinningShader = new SimpleTextureVertexSkinningShader(); + m_simpleTextureVertexSkinningShader->Initialize(this); + } + + return m_simpleTextureVertexSkinningShader; +} + +DebugShader* GraphicsDevice::GetDebugShader() +{ + STACK_TRACE; + if (m_debugShader == NULL) + { + m_debugShader = new DebugShader(); + m_debugShader->Initialize(this); + } + + return m_debugShader; +} + void GraphicsDevice::OnNewContext() { STACK_TRACE; diff --git a/src/framework/graphics/graphicsdevice.h b/src/framework/graphics/graphicsdevice.h index 6661614..f56430c 100644 --- a/src/framework/graphics/graphicsdevice.h +++ b/src/framework/graphics/graphicsdevice.h @@ -132,7 +132,7 @@ public: /** * @return the currently applied texture parameters */ - const TextureParameters* GetTextureParameters() const { return &m_currentTextureParams; } + const TextureParameters* GetTextureParameters() const { return &m_currentTextureParams; } /** * Binds a renderbuffer. @@ -173,7 +173,7 @@ public: /** * @return the current ViewContext object */ - ViewContext* GetViewContext() const { return m_activeViewContext; } + ViewContext* GetViewContext() const { return m_activeViewContext; } /** * Sets a new active ViewContext which will be applied immediately. @@ -295,56 +295,63 @@ public: /** * @return a debug geometry renderer */ - GeometryDebugRenderer* GetDebugRenderer() const { return m_debugRenderer; } + GeometryDebugRenderer* GetDebugRenderer() const { return m_debugRenderer; } /** * @return built-in shader */ - SimpleColorShader* GetSimpleColorShader() const { return m_simpleColorShader; } + SimpleColorShader* GetSimpleColorShader(); /** * @return built-in shader */ - SimpleColorTextureShader* GetSimpleColorTextureShader() const { return m_simpleColorTextureShader; } + SimpleColorTextureShader* GetSimpleColorTextureShader(); /** * @return built-in shader */ - SimpleTextureShader* GetSimpleTextureShader() const { return m_simpleTextureShader; } + SimpleTextureShader* GetSimpleTextureShader(); /** * @return built-in shader */ - Sprite2DShader* GetSprite2DShader() const { return m_sprite2dShader; } + Sprite2DShader* GetSprite2DShader(); /** * @return built-in shader */ - Sprite3DShader* GetSprite3DShader() const { return m_sprite3dShader; } - - SimpleTextureVertexLerpShader* GetSimpleTextureVertexLerpShader() const { return m_simpleTextureVertexLerpShader; } - SimpleTextureVertexSkinningShader* GetSimpleTextureVertexSkinningShader() const { return m_simpleTextureVertexSkinningShader; } + Sprite3DShader* GetSprite3DShader(); /** * @return built-in shader */ - DebugShader* GetDebugShader() const { return m_debugShader; } + SimpleTextureVertexLerpShader* GetSimpleTextureVertexLerpShader(); + + /** + * @return built-in shader + */ + SimpleTextureVertexSkinningShader* GetSimpleTextureVertexSkinningShader(); + + /** + * @return built-in shader + */ + DebugShader* GetDebugShader(); /** * @return TRUE if depth textures are supported */ - BOOL IsDepthTextureSupported() const { return m_isDepthTextureSupported; } + BOOL IsDepthTextureSupported() const { return m_isDepthTextureSupported; } /** * @return TRUE if textures with dimensions that are not a power of two * are supported */ - BOOL IsNonPowerOfTwoTextureSupported() const { return m_isNonPowerOfTwoTextureSupported; } + BOOL IsNonPowerOfTwoTextureSupported() const { return m_isNonPowerOfTwoTextureSupported; } /** * @return the parent window object that this graphics device is for */ - GameWindow* GetWindow() const { return m_window; } + GameWindow* GetWindow() const { return m_window; } private: void BindVBO(VertexBuffer *buffer);