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_solidColorTextures = new SolidColorTextureCache(this);
m_simpleColorShader = new SimpleColorShader(); m_simpleColorShader = NULL;
m_simpleColorTextureShader = new SimpleColorTextureShader(); m_simpleColorTextureShader = NULL;
m_simpleTextureShader = new SimpleTextureShader(); m_simpleTextureShader = NULL;
m_simpleTextureVertexLerpShader = new SimpleTextureVertexLerpShader(); m_simpleTextureVertexLerpShader = NULL;
m_simpleTextureVertexSkinningShader = new SimpleTextureVertexSkinningShader(); m_simpleTextureVertexSkinningShader = NULL;
m_sprite2dShader = new Sprite2DShader(); m_sprite2dShader = NULL;
m_sprite3dShader = new Sprite3DShader(); m_sprite3dShader = NULL;
m_debugShader = new DebugShader(); m_debugShader = NULL;
RegisterManagedResource(m_simpleColorShader);
RegisterManagedResource(m_simpleColorTextureShader);
RegisterManagedResource(m_simpleTextureShader);
RegisterManagedResource(m_simpleTextureVertexLerpShader);
RegisterManagedResource(m_simpleTextureVertexSkinningShader);
RegisterManagedResource(m_sprite2dShader);
RegisterManagedResource(m_sprite3dShader);
RegisterManagedResource(m_debugShader);
} }
GraphicsDevice::~GraphicsDevice() GraphicsDevice::~GraphicsDevice()
{ {
STACK_TRACE; 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_defaultViewContext);
SAFE_DELETE(m_debugRenderer); SAFE_DELETE(m_debugRenderer);
SAFE_DELETE(m_solidColorTextures); SAFE_DELETE(m_solidColorTextures);
@ -129,6 +111,102 @@ GraphicsDevice::~GraphicsDevice()
SAFE_DELETE_ARRAY(m_boundTextures); 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() void GraphicsDevice::OnNewContext()
{ {
STACK_TRACE; STACK_TRACE;

View file

@ -300,35 +300,42 @@ public:
/** /**
* @return built-in shader * @return built-in shader
*/ */
SimpleColorShader* GetSimpleColorShader() const { return m_simpleColorShader; } SimpleColorShader* GetSimpleColorShader();
/** /**
* @return built-in shader * @return built-in shader
*/ */
SimpleColorTextureShader* GetSimpleColorTextureShader() const { return m_simpleColorTextureShader; } SimpleColorTextureShader* GetSimpleColorTextureShader();
/** /**
* @return built-in shader * @return built-in shader
*/ */
SimpleTextureShader* GetSimpleTextureShader() const { return m_simpleTextureShader; } SimpleTextureShader* GetSimpleTextureShader();
/** /**
* @return built-in shader * @return built-in shader
*/ */
Sprite2DShader* GetSprite2DShader() const { return m_sprite2dShader; } Sprite2DShader* GetSprite2DShader();
/** /**
* @return built-in shader * @return built-in shader
*/ */
Sprite3DShader* GetSprite3DShader() const { return m_sprite3dShader; } Sprite3DShader* GetSprite3DShader();
SimpleTextureVertexLerpShader* GetSimpleTextureVertexLerpShader() const { return m_simpleTextureVertexLerpShader; }
SimpleTextureVertexSkinningShader* GetSimpleTextureVertexSkinningShader() const { return m_simpleTextureVertexSkinningShader; }
/** /**
* @return built-in shader * @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 * @return TRUE if depth textures are supported