update GraphicsDevice's built-in shader properties. now initializes them only on first-access (lazy-load)

This commit is contained in:
Gered 2013-04-01 19:32:46 -04:00
parent 543e6bf409
commit 07abad71c2
2 changed files with 126 additions and 41 deletions

View file

@ -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;

View file

@ -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);