mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
b=582469; use high precision depth buffer if available (esp with FBOs); r=bjacob
This commit is contained in:
parent
06909655bb
commit
269f9938b8
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user