update Renderbuffer with GraphicsContextResource changes
This commit is contained in:
parent
decbe56cd0
commit
c8b2f73d9a
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Reference in a new issue