b=582469; use high precision depth buffer if available (esp with FBOs); r=bjacob

This commit is contained in:
Vladimir Vukicevic 2010-07-28 14:24:09 -07:00
parent 06909655bb
commit 269f9938b8
2 changed files with 43 additions and 25 deletions

View File

@ -471,12 +471,6 @@ GLContext::ResizeOffscreenFBO(const gfxIntSize& aSize)
int depth = mCreationFormat.depth;
int stencil = mCreationFormat.stencil;
#ifdef USE_GLES2
const bool isMobile = true;
#else
const bool isMobile = false;
#endif
bool firstTime = (mOffscreenFBO == 0);
GLuint curBoundTexture = 0;
@ -502,12 +496,16 @@ GLContext::ResizeOffscreenFBO(const gfxIntSize& aSize)
fGenFramebuffers(1, &mOffscreenFBO);
fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mOffscreenFBO);
if (depth) {
if (depth && stencil && !mIsGLES2) {
fGenRenderbuffers(1, &mOffscreenDepthRB);
}
} else {
if (depth) {
fGenRenderbuffers(1, &mOffscreenDepthRB);
}
if (stencil) {
fGenRenderbuffers(1, &mOffscreenStencilRB);
if (stencil) {
fGenRenderbuffers(1, &mOffscreenStencilRB);
}
}
} else {
fBindTexture(LOCAL_GL_TEXTURE_2D, mOffscreenTexture);
@ -531,24 +529,31 @@ GLContext::ResizeOffscreenFBO(const gfxIntSize& aSize)
aSize.width, aSize.height,
0,
LOCAL_GL_RGB,
isMobile ? LOCAL_GL_UNSIGNED_SHORT_5_6_5
mIsGLES2 ? LOCAL_GL_UNSIGNED_SHORT_5_6_5
: LOCAL_GL_UNSIGNED_BYTE,
NULL);
}
if (depth) {
if (depth && stencil && !mIsGLES2) {
fBindRenderbuffer(LOCAL_GL_RENDERBUFFER, mOffscreenDepthRB);
fRenderbufferStorage(LOCAL_GL_RENDERBUFFER,
LOCAL_GL_DEPTH_COMPONENT16,
LOCAL_GL_DEPTH24_STENCIL8,
aSize.width, aSize.height);
}
} else {
if (depth) {
fBindRenderbuffer(LOCAL_GL_RENDERBUFFER, mOffscreenDepthRB);
fRenderbufferStorage(LOCAL_GL_RENDERBUFFER,
mIsGLES2 ? LOCAL_GL_DEPTH_COMPONENT16
: LOCAL_GL_DEPTH_COMPONENT24,
aSize.width, aSize.height);
}
if (stencil) {
fBindRenderbuffer(LOCAL_GL_RENDERBUFFER, mOffscreenStencilRB);
fRenderbufferStorage(LOCAL_GL_RENDERBUFFER,
LOCAL_GL_STENCIL_INDEX8,
aSize.width, aSize.height);
if (stencil) {
fBindRenderbuffer(LOCAL_GL_RENDERBUFFER, mOffscreenStencilRB);
fRenderbufferStorage(LOCAL_GL_RENDERBUFFER,
LOCAL_GL_STENCIL_INDEX8,
aSize.width, aSize.height);
}
}
// Now assemble the FBO, if we're creating one
@ -559,18 +564,30 @@ GLContext::ResizeOffscreenFBO(const gfxIntSize& aSize)
LOCAL_GL_TEXTURE_2D,
mOffscreenTexture,
0);
if (depth) {
if (depth && stencil && !mIsGLES2) {
fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER,
LOCAL_GL_DEPTH_ATTACHMENT,
LOCAL_GL_RENDERBUFFER,
mOffscreenDepthRB);
}
if (stencil) {
fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER,
LOCAL_GL_STENCIL_ATTACHMENT,
LOCAL_GL_RENDERBUFFER,
mOffscreenStencilRB);
mOffscreenDepthRB);
} else {
if (depth) {
fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER,
LOCAL_GL_DEPTH_ATTACHMENT,
LOCAL_GL_RENDERBUFFER,
mOffscreenDepthRB);
}
if (stencil) {
fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER,
LOCAL_GL_STENCIL_ATTACHMENT,
LOCAL_GL_RENDERBUFFER,
mOffscreenStencilRB);
}
}
}

View File

@ -1877,6 +1877,7 @@ typedef ptrdiff_t GLintptr;
#define LOCAL_GL_DEPTH_STENCIL_EXT 0x84F9
#define LOCAL_GL_UNSIGNED_INT_24_8_EXT 0x84FA
#define LOCAL_GL_DEPTH24_STENCIL8_EXT 0x88F0
#define LOCAL_GL_DEPTH24_STENCIL8 0x88F0
#define LOCAL_GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
#define LOCAL_GL_EXT_packed_pixels 1
#define LOCAL_GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032