Framebuffer::~Framebuffer()
{
- mColorbufferPointer.set(NULL);
- mDepthbufferPointer.set(NULL);
- mStencilbufferPointer.set(NULL);
+ mColorbufferPointer = NULL;
+ mDepthbufferPointer = NULL;
+ mStencilbufferPointer = NULL;
}
Renderbuffer *Framebuffer::lookupRenderbuffer(GLenum type, GLuint handle) const
void Framebuffer::setColorbuffer(GLenum type, GLuint colorbuffer)
{
mColorbufferType = (colorbuffer != 0) ? type : GL_NONE;
- mColorbufferPointer.set(lookupRenderbuffer(type, colorbuffer));
+ mColorbufferPointer = lookupRenderbuffer(type, colorbuffer);
}
void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer)
{
mDepthbufferType = (depthbuffer != 0) ? type : GL_NONE;
- mDepthbufferPointer.set(lookupRenderbuffer(type, depthbuffer));
+ mDepthbufferPointer = lookupRenderbuffer(type, depthbuffer);
}
void Framebuffer::setStencilbuffer(GLenum type, GLuint stencilbuffer)
{
mStencilbufferType = (stencilbuffer != 0) ? type : GL_NONE;
- mStencilbufferPointer.set(lookupRenderbuffer(type, stencilbuffer));
+ mStencilbufferPointer = lookupRenderbuffer(type, stencilbuffer);
}
void Framebuffer::detachTexture(GLuint texture)
{
- if(mColorbufferPointer.id() == texture && IsTextureTarget(mColorbufferType))
+ if(mColorbufferPointer.name() == texture && IsTextureTarget(mColorbufferType))
{
mColorbufferType = GL_NONE;
- mColorbufferPointer.set(NULL);
+ mColorbufferPointer = NULL;
}
- if(mDepthbufferPointer.id() == texture && IsTextureTarget(mDepthbufferType))
+ if(mDepthbufferPointer.name() == texture && IsTextureTarget(mDepthbufferType))
{
mDepthbufferType = GL_NONE;
- mDepthbufferPointer.set(NULL);
+ mDepthbufferPointer = NULL;
}
- if(mStencilbufferPointer.id() == texture && IsTextureTarget(mStencilbufferType))
+ if(mStencilbufferPointer.name() == texture && IsTextureTarget(mStencilbufferType))
{
mStencilbufferType = GL_NONE;
- mStencilbufferPointer.set(NULL);
+ mStencilbufferPointer = NULL;
}
}
void Framebuffer::detachRenderbuffer(GLuint renderbuffer)
{
- if(mColorbufferPointer.id() == renderbuffer && mColorbufferType == GL_RENDERBUFFER)
+ if(mColorbufferPointer.name() == renderbuffer && mColorbufferType == GL_RENDERBUFFER)
{
mColorbufferType = GL_NONE;
- mColorbufferPointer.set(NULL);
+ mColorbufferPointer = NULL;
}
- if(mDepthbufferPointer.id() == renderbuffer && mDepthbufferType == GL_RENDERBUFFER)
+ if(mDepthbufferPointer.name() == renderbuffer && mDepthbufferType == GL_RENDERBUFFER)
{
mDepthbufferType = GL_NONE;
- mDepthbufferPointer.set(NULL);
+ mDepthbufferPointer = NULL;
}
- if(mStencilbufferPointer.id() == renderbuffer && mStencilbufferType == GL_RENDERBUFFER)
+ if(mStencilbufferPointer.name() == renderbuffer && mStencilbufferType == GL_RENDERBUFFER)
{
mStencilbufferType = GL_NONE;
- mStencilbufferPointer.set(NULL);
+ mStencilbufferPointer = NULL;
}
}
// caller must Release() the returned surface
egl::Image *Framebuffer::getRenderTarget()
{
- Renderbuffer *colorbuffer = mColorbufferPointer.get();
+ Renderbuffer *colorbuffer = mColorbufferPointer;
if(colorbuffer)
{
// caller must Release() the returned surface
egl::Image *Framebuffer::getDepthStencil()
{
- Renderbuffer *depthstencilbuffer = mDepthbufferPointer.get();
+ Renderbuffer *depthstencilbuffer = mDepthbufferPointer;
if(!depthstencilbuffer)
{
- depthstencilbuffer = mStencilbufferPointer.get();
+ depthstencilbuffer = mStencilbufferPointer;
}
if(depthstencilbuffer)
Renderbuffer *Framebuffer::getColorbuffer()
{
- return mColorbufferPointer.get();
+ return mColorbufferPointer;
}
Renderbuffer *Framebuffer::getDepthbuffer()
{
- return mDepthbufferPointer.get();
+ return mDepthbufferPointer;
}
Renderbuffer *Framebuffer::getStencilbuffer()
{
- return mStencilbufferPointer.get();
+ return mStencilbufferPointer;
}
GLenum Framebuffer::getColorbufferType()
return mStencilbufferType;
}
-GLuint Framebuffer::getColorbufferHandle()
+GLuint Framebuffer::getColorbufferName()
{
- return mColorbufferPointer.id();
+ return mColorbufferPointer.name();
}
-GLuint Framebuffer::getDepthbufferHandle()
+GLuint Framebuffer::getDepthbufferName()
{
- return mDepthbufferPointer.id();
+ return mDepthbufferPointer.name();
}
-GLuint Framebuffer::getStencilbufferHandle()
+GLuint Framebuffer::getStencilbufferName()
{
- return mStencilbufferPointer.id();
+ return mStencilbufferPointer.name();
}
bool Framebuffer::hasStencil()
GLenum Framebuffer::getImplementationColorReadFormat()
{
- Renderbuffer *colorbuffer = mColorbufferPointer.get();
+ Renderbuffer *colorbuffer = mColorbufferPointer;
if(colorbuffer)
{
+ // Don't return GL_RGBA since that's always supported. Provide a second option here.
switch(colorbuffer->getInternalFormat())
{
- case sw::FORMAT_A16B16G16R16F: return GL_RGBA;
- case sw::FORMAT_A32B32G32R32F: return GL_RGBA;
+ case sw::FORMAT_A16B16G16R16F: return GL_BGRA_EXT;
+ case sw::FORMAT_A32B32G32R32F: return GL_BGRA_EXT;
case sw::FORMAT_A8R8G8B8: return GL_BGRA_EXT;
- case sw::FORMAT_X8R8G8B8: return GL_BGRA_EXT;
+ case sw::FORMAT_A8B8G8R8: return GL_BGRA_EXT;
+ case sw::FORMAT_X8R8G8B8: return 0x80E0; // GL_BGR_EXT
+ case sw::FORMAT_X8B8G8R8: return 0x80E0; // GL_BGR_EXT
case sw::FORMAT_A1R5G5B5: return GL_BGRA_EXT;
case sw::FORMAT_R5G6B5: return 0x80E0; // GL_BGR_EXT
default:
GLenum Framebuffer::getImplementationColorReadType()
{
- Renderbuffer *colorbuffer = mColorbufferPointer.get();
+ Renderbuffer *colorbuffer = mColorbufferPointer;
if(colorbuffer)
{
case sw::FORMAT_A16B16G16R16F: return GL_HALF_FLOAT_OES;
case sw::FORMAT_A32B32G32R32F: return GL_FLOAT;
case sw::FORMAT_A8R8G8B8: return GL_UNSIGNED_BYTE;
+ case sw::FORMAT_A8B8G8R8: return GL_UNSIGNED_BYTE;
case sw::FORMAT_X8R8G8B8: return GL_UNSIGNED_BYTE;
+ case sw::FORMAT_X8B8G8R8: return GL_UNSIGNED_BYTE;
case sw::FORMAT_A1R5G5B5: return GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT;
case sw::FORMAT_R5G6B5: return GL_UNSIGNED_SHORT_5_6_5;
default:
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{
- mColorbufferPointer.set(new Renderbuffer(0, colorbuffer));
+ mColorbufferPointer = new Renderbuffer(0, colorbuffer);
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil);
- mDepthbufferPointer.set(depthStencilRenderbuffer);
- mStencilbufferPointer.set(depthStencilRenderbuffer);
+ mDepthbufferPointer = depthStencilRenderbuffer;
+ mStencilbufferPointer = depthStencilRenderbuffer;
mColorbufferType = GL_RENDERBUFFER;
mDepthbufferType = (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE;