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);
|
GetDimensionsForAttachment(width, height);
|
||||||
|
|
||||||
Renderbuffer *attach = new Renderbuffer();
|
Renderbuffer *attach = new Renderbuffer();
|
||||||
BOOL renderbufferSuccess = attach->Create(GetGraphicsDevice(), width, height, type);
|
BOOL renderbufferSuccess = attach->Initialize(GetGraphicsDevice(), width, height, type);
|
||||||
ASSERT(renderbufferSuccess == TRUE);
|
ASSERT(renderbufferSuccess == TRUE);
|
||||||
if (!renderbufferSuccess)
|
if (!renderbufferSuccess)
|
||||||
{
|
{
|
||||||
|
@ -325,7 +325,7 @@ BOOL Framebuffer::ReCreateAndAttach(FramebufferRenderbufferMap::iterator &itor,
|
||||||
if (releaseFirst)
|
if (releaseFirst)
|
||||||
existing->Release();
|
existing->Release();
|
||||||
|
|
||||||
BOOL renderbufferSuccess = existing->Create(GetGraphicsDevice(), width, height, existingType);
|
BOOL renderbufferSuccess = existing->Initialize(GetGraphicsDevice(), width, height, existingType);
|
||||||
ASSERT(renderbufferSuccess == TRUE);
|
ASSERT(renderbufferSuccess == TRUE);
|
||||||
if (!renderbufferSuccess)
|
if (!renderbufferSuccess)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -16,24 +16,55 @@ Renderbuffer::Renderbuffer()
|
||||||
m_type = FRAMEBUFFER_DATA_NONE;
|
m_type = FRAMEBUFFER_DATA_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Renderbuffer::~Renderbuffer()
|
BOOL Renderbuffer::Initialize(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type)
|
||||||
{
|
|
||||||
STACK_TRACE;
|
|
||||||
Release();
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16_t height, FRAMEBUFFER_DATA_TYPE type)
|
|
||||||
{
|
{
|
||||||
STACK_TRACE;
|
STACK_TRACE;
|
||||||
ASSERT(m_renderbufferName == 0);
|
ASSERT(m_renderbufferName == 0);
|
||||||
if (m_renderbufferName != 0)
|
if (m_renderbufferName != 0)
|
||||||
return FALSE;
|
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;
|
uint32_t format = 0;
|
||||||
#ifdef MOBILE
|
#ifdef MOBILE
|
||||||
switch (type)
|
switch (m_type)
|
||||||
{
|
{
|
||||||
case FRAMEBUFFER_DATA_COLOR_RGB:
|
case FRAMEBUFFER_DATA_COLOR_RGB:
|
||||||
format = GL_RGB565;
|
format = GL_RGB565;
|
||||||
|
@ -49,7 +80,7 @@ BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16
|
||||||
default: break;
|
default: break;
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
switch (type)
|
switch (m_type)
|
||||||
{
|
{
|
||||||
case FRAMEBUFFER_DATA_COLOR_RGB:
|
case FRAMEBUFFER_DATA_COLOR_RGB:
|
||||||
format = GL_RGB;
|
format = GL_RGB;
|
||||||
|
@ -72,43 +103,24 @@ BOOL Renderbuffer::Create(GraphicsDevice *graphicsDevice, uint16_t width, uint16
|
||||||
|
|
||||||
GL_CALL(glGenRenderbuffers(1, &m_renderbufferName));
|
GL_CALL(glGenRenderbuffers(1, &m_renderbufferName));
|
||||||
|
|
||||||
m_width = width;
|
GetGraphicsDevice()->BindRenderbuffer(this);
|
||||||
m_height = height;
|
|
||||||
m_type = type;
|
|
||||||
|
|
||||||
m_graphicsDevice->BindRenderbuffer(this);
|
|
||||||
|
|
||||||
// have OpenGL allocate the renderbuffer's storage
|
// 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
|
// don't leave this buffer bound, we'll let an associated Framebuffer
|
||||||
// object that this will get attached to manage that for itself...
|
// object that this will get attached to manage that for itself...
|
||||||
m_graphicsDevice->UnbindRenderbuffer();
|
GetGraphicsDevice()->UnbindRenderbuffer();
|
||||||
|
|
||||||
return TRUE;
|
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()
|
void Renderbuffer::OnNewContext()
|
||||||
{
|
{
|
||||||
STACK_TRACE;
|
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);
|
ASSERT(success == TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,48 +15,48 @@ class Renderbuffer : public GraphicsContextResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Renderbuffer();
|
Renderbuffer();
|
||||||
virtual ~Renderbuffer();
|
virtual ~Renderbuffer() { Release(); }
|
||||||
|
|
||||||
/**
|
|
||||||
* 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);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases the resources associated with this renderbuffer.
|
* Releases the resources associated with this renderbuffer.
|
||||||
*/
|
*/
|
||||||
void Release();
|
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
|
* @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
|
* @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
|
* @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
|
* @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
|
* @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.
|
* New OpenGL graphics context creation callback.
|
||||||
|
@ -69,7 +69,8 @@ public:
|
||||||
void OnLostContext();
|
void OnLostContext();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GraphicsDevice *m_graphicsDevice;
|
BOOL CreateRenderbuffer();
|
||||||
|
|
||||||
uint32_t m_renderbufferName;
|
uint32_t m_renderbufferName;
|
||||||
uint16_t m_width;
|
uint16_t m_width;
|
||||||
uint16_t m_height;
|
uint16_t m_height;
|
||||||
|
|
Reference in a new issue