Merge pull request #31259 from clayjohn/gles2-depth-allocation
Check for unsigned_short support for gles2 depth buffer allocation
This commit is contained in:
commit
82a86e8074
1 changed files with 37 additions and 9 deletions
|
@ -5691,21 +5691,49 @@ void RasterizerStorageGLES2::initialize() {
|
||||||
|
|
||||||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||||
|
|
||||||
if (status == GL_FRAMEBUFFER_COMPLETE) {
|
|
||||||
config.depth_internalformat = GL_DEPTH_COMPONENT;
|
|
||||||
config.depth_type = GL_UNSIGNED_INT;
|
|
||||||
} else {
|
|
||||||
config.depth_internalformat = GL_DEPTH_COMPONENT16;
|
|
||||||
config.depth_type = GL_UNSIGNED_SHORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, system_fbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, system_fbo);
|
||||||
glDeleteFramebuffers(1, &fbo);
|
glDeleteFramebuffers(1, &fbo);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glDeleteTextures(1, &depth);
|
glDeleteTextures(1, &depth);
|
||||||
|
|
||||||
|
if (status == GL_FRAMEBUFFER_COMPLETE) {
|
||||||
|
config.depth_internalformat = GL_DEPTH_COMPONENT;
|
||||||
|
config.depth_type = GL_UNSIGNED_INT;
|
||||||
|
} else {
|
||||||
|
// If it fails, test to see if it supports a framebuffer texture using UNSIGNED_SHORT
|
||||||
|
// This is needed because many OSX devices don't support either UNSIGNED_INT or UNSIGNED_SHORT
|
||||||
|
|
||||||
|
config.depth_internalformat = GL_DEPTH_COMPONENT16;
|
||||||
|
config.depth_type = GL_UNSIGNED_SHORT;
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &fbo);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||||
|
|
||||||
|
glGenTextures(1, &depth);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, depth);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, 32, 32, 0, GL_DEPTH_COMPONENT16, GL_UNSIGNED_SHORT, NULL);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth, 0);
|
||||||
|
|
||||||
|
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||||
|
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
|
//if it fails again depth textures aren't supported, use rgba shadows and renderbuffer for depth
|
||||||
|
config.support_depth_texture = false;
|
||||||
|
config.use_rgba_3d_shadows = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, system_fbo);
|
||||||
|
glDeleteFramebuffers(1, &fbo);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
glDeleteTextures(1, &depth);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Will use renderbuffer for depth
|
// Will use renderbuffer for depth, on mobile check for 24 bit depth support
|
||||||
if (config.extensions.has("GL_OES_depth24")) {
|
if (config.extensions.has("GL_OES_depth24")) {
|
||||||
config.depth_internalformat = _DEPTH_COMPONENT24_OES;
|
config.depth_internalformat = _DEPTH_COMPONENT24_OES;
|
||||||
config.depth_type = GL_UNSIGNED_INT;
|
config.depth_type = GL_UNSIGNED_INT;
|
||||||
|
|
Loading…
Reference in a new issue