Implement GL_OES_packed_depth_stencil
TRAC #12336
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch
Author: Shannon Woods
git-svn-id: https://angleproject.googlecode.com/svn/trunk@358 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp
index 1a3b01e..e4d6798 100644
--- a/src/libGLESv2/Framebuffer.cpp
+++ b/src/libGLESv2/Framebuffer.cpp
@@ -119,7 +119,7 @@
unsigned int Framebuffer::getDepthbufferSerial()
{
gl::Context *context = gl::getContext();
- Depthbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
+ DepthStencilbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
if (depthbuffer)
{
@@ -129,19 +129,6 @@
return 0;
}
-IDirect3DSurface9 *Framebuffer::getDepthStencil()
-{
- gl::Context *context = gl::getContext();
- Depthbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
-
- if (depthbuffer)
- {
- return depthbuffer->getDepthStencil();
- }
-
- return NULL;
-}
-
Colorbuffer *Framebuffer::getColorbuffer()
{
gl::Context *context = gl::getContext();
@@ -169,27 +156,33 @@
return NULL;
}
-Depthbuffer *Framebuffer::getDepthbuffer()
+DepthStencilbuffer *Framebuffer::getDepthbuffer()
{
- gl::Context *context = gl::getContext();
- Depthbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
-
- if (depthbuffer && depthbuffer->isDepthbuffer())
+ if (mDepthbufferType != GL_NONE)
{
- return depthbuffer;
+ gl::Context *context = gl::getContext();
+ DepthStencilbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
+
+ if (depthbuffer && depthbuffer->isDepthbuffer())
+ {
+ return depthbuffer;
+ }
}
return NULL;
}
-Stencilbuffer *Framebuffer::getStencilbuffer()
+DepthStencilbuffer *Framebuffer::getStencilbuffer()
{
- gl::Context *context = gl::getContext();
- Stencilbuffer *stencilbuffer = context->getStencilbuffer(mStencilbufferHandle);
-
- if (stencilbuffer && stencilbuffer->isStencilbuffer())
+ if (mStencilbufferType != GL_NONE)
{
- return stencilbuffer;
+ gl::Context *context = gl::getContext();
+ DepthStencilbuffer *stencilbuffer = context->getStencilbuffer(mStencilbufferHandle);
+
+ if (stencilbuffer && stencilbuffer->isStencilbuffer())
+ {
+ return stencilbuffer;
+ }
}
return NULL;
@@ -250,9 +243,12 @@
height = colorbuffer->getHeight();
}
+ DepthStencilbuffer *depthbuffer = NULL;
+ DepthStencilbuffer *stencilbuffer = NULL;
+
if (mDepthbufferType != GL_NONE)
{
- Depthbuffer *depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
+ depthbuffer = context->getDepthbuffer(mDepthbufferHandle);
if (!depthbuffer)
{
@@ -277,7 +273,7 @@
if (mStencilbufferType != GL_NONE)
{
- Stencilbuffer *stencilbuffer = context->getStencilbuffer(mStencilbufferHandle);
+ stencilbuffer = context->getStencilbuffer(mStencilbufferHandle);
if (!stencilbuffer)
{
@@ -300,6 +296,16 @@
}
}
+ if (mDepthbufferType == GL_RENDERBUFFER && mStencilbufferType == GL_RENDERBUFFER)
+ {
+ if (depthbuffer->getFormat() != GL_DEPTH24_STENCIL8_OES ||
+ stencilbuffer->getFormat() != GL_DEPTH24_STENCIL8_OES ||
+ depthbuffer->getSerial() != stencilbuffer->getSerial())
+ {
+ return GL_FRAMEBUFFER_UNSUPPORTED;
+ }
+ }
+
return GL_FRAMEBUFFER_COMPLETE;
}
}