update Renderbuffer with GraphicsContextResource changes

This commit is contained in:
Gered 2013-04-01 18:00:49 -04:00
parent decbe56cd0
commit c8b2f73d9a
3 changed files with 68 additions and 55 deletions

View file

@ -280,7 +280,7 @@ BOOL Framebuffer::AttachRenderbuffer(FRAMEBUFFER_DATA_TYPE type)
GetDimensionsForAttachment(width, height);
Renderbuffer *attach = new Renderbuffer();
BOOL renderbufferSuccess = attach->Create(GetGraphicsDevice(), width, height, type);
BOOL renderbufferSuccess = attach->Initialize(GetGraphicsDevice(), width, height, type);
ASSERT(renderbufferSuccess == TRUE);
if (!renderbufferSuccess)
{
@ -325,7 +325,7 @@ BOOL Framebuffer::ReCreateAndAttach(FramebufferRenderbufferMap::iterator &itor,
if (releaseFirst)
existing->Release();
BOOL renderbufferSuccess = existing->Create(GetGraphicsDevice(), width, height, existingType);
BOOL renderbufferSuccess = existing->Initialize(GetGraphicsDevice(), width, height, existingType);
ASSERT(renderbufferSuccess == TRUE);
if (!renderbufferSuccess)
return FALSE;

View file

@ -16,24 +16,55 @@ Renderbuffer::Renderbuffer()
m_type = FRAMEBUFFER_DATA_NONE;
}
Renderbuffer::~Renderbuffer()
{
STACK_TRACE;
Release();
}
BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type)
BOOL Renderbuffer::Initialize(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type)
{
STACK_TRACE;
ASSERT(m_renderbufferName == 0);
if (m_renderbufferName != 0)
return FALSE;
ASSERT(graphicsDevice != NULL);
if (!GraphicsContextResource::Initialize(graphicsDevice))
return FALSE;
m_width = width;
m_height = height;
m_type = type;
BOOL success = CreateRenderbuffer();
if (!success)
{
m_width = 0;
m_height = 0;
m_type = FRAMEBUFFER_DATA_NONE;
}
return success;
}
void Renderbuffer::Release()
{
STACK_TRACE;
if (m_renderbufferName != 0)
{
GetGraphicsDevice()->UnbindRenderBuffer(this);
GL_CALL(glDeleteRenderbuffers(1, &m_renderbufferName));
}
m_renderbufferName = 0;
m_width = 0;
m_height = 0;
GraphicsContextResource::Release();
}
BOOL Renderbuffer::CreateRenderbuffer()
{
STACK_TRACE;
ASSERT(m_renderbufferName == 0);
uint32_t format = 0;
#ifdef MOBILE
switch (type)
switch (m_type)
{
case FRAMEBUFFER_DATA_COLOR_RGB:
format = GL_RGB565;
@ -49,7 +80,7 @@ BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16
default: break;
};
#else
switch (type)
switch (m_type)
{
case FRAMEBUFFER_DATA_COLOR_RGB:
format = GL_RGB;
@ -72,43 +103,24 @@ BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16
GL_CALL(glGenRenderbuffers(1, &m_renderbufferName));
m_width = width;
m_height = height;
m_type = type;
m_graphicsDevice->BindRenderbuffer(this);
GetGraphicsDevice()->BindRenderbuffer(this);
// have OpenGL allocate the renderbuffer's storage
GL_CALL(glRenderbufferStorage(GL_RENDERBUFFER, format, width, height));
GL_CALL(glRenderbufferStorage(GL_RENDERBUFFER, format, m_width, m_height));
// don't leave this buffer bound, we'll let an associated Framebuffer
// object that this will get attached to manage that for itself...
m_graphicsDevice->UnbindRenderbuffer();
GetGraphicsDevice()->UnbindRenderbuffer();
return TRUE;
}
void Renderbuffer::Release()
{
STACK_TRACE;
if (m_renderbufferName != 0)
{
m_graphicsDevice->UnbindRenderBuffer(this);
GL_CALL(glDeleteRenderbuffers(1, &m_renderbufferName));
}
m_graphicsDevice = NULL;
m_renderbufferName = 0;
m_width = 0;
m_height = 0;
}
void Renderbuffer::OnNewContext()
{
STACK_TRACE;
if (m_renderbufferName == 0 && m_graphicsDevice != NULL)
if (m_renderbufferName == 0 && GetGraphicsDevice() != NULL)
{
BOOL success = Create(m_graphicsDevice, m_width, m_height, m_type);
BOOL success = CreateRenderbuffer();
ASSERT(success == TRUE);
}
}

View file

@ -15,48 +15,48 @@ class Renderbuffer : public GraphicsContextResource
{
public:
Renderbuffer();
virtual ~Renderbuffer();
/**
* Creates a new renderbuffer with the specified properties.
* @param graphicsDevice this graphics device this renderbuffer is
* associated with
* @param width the width of the renderbuffer in pixels
* @param height the height of the renderbuffer in pixels
* @param format the type of data this renderbuffer contains
* @return TRUE if the renderbuffer was created successfully
*/
BOOL Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type);
virtual ~Renderbuffer() { Release(); }
/**
* Releases the resources associated with this renderbuffer.
*/
void Release();
/**
* Initializes the renderbuffer with the specified properties.
* @param graphicsDevice this graphics device this renderbuffer is
* associated with
* @param width the width of the renderbuffer in pixels
* @param height the height of the renderbuffer in pixels
* @param format the type of data this renderbuffer contains
* @return TRUE if the renderbuffer was created successfully
*/
BOOL Initialize(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type);
/**
* @return the name or ID assigned to this renderbuffer by OpenGL
*/
uint32_t GetRenderbufferName() const { return m_renderbufferName; }
uint32_t GetRenderbufferName() const { return m_renderbufferName; }
/**
* @return the width of the renderbuffer in pixels
*/
uint16_t GetWidth() const { return m_width; }
uint16_t GetWidth() const { return m_width; }
/**
* @return the height of the renderbuffer in pixels
*/
uint16_t GetHeight() const { return m_height; }
uint16_t GetHeight() const { return m_height; }
/**
* @return the type of data this renderbuffer contains
*/
FRAMEBUFFER_DATA_TYPE GetType() const { return m_type; }
FRAMEBUFFER_DATA_TYPE GetType() const { return m_type; }
/**
* @return TRUE if the renderbuffer has been marked as invalid and needs to be recreated
*/
BOOL IsInvalidated() const { return m_renderbufferName == 0; }
BOOL IsInvalidated() const { return m_renderbufferName == 0; }
/**
* New OpenGL graphics context creation callback.
@ -69,7 +69,8 @@ public:
void OnLostContext();
private:
GraphicsDevice *m_graphicsDevice;
BOOL CreateRenderbuffer();
uint32_t m_renderbufferName;
uint16_t m_width;
uint16_t m_height;