GLES: detect gl extensions and use packed depth/stencil buffer for RTT
This commit is contained in:
parent
737dd83855
commit
e2c839dde3
|
@ -978,8 +978,7 @@ void DrawModVols(int first, int count)
|
||||||
|
|
||||||
SetupModvolVBO();
|
SetupModvolVBO();
|
||||||
|
|
||||||
glcache.Enable(GL_BLEND);
|
glcache.Disable(GL_BLEND);
|
||||||
glcache.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
|
|
||||||
glcache.UseProgram(gl.modvol_shader.program);
|
glcache.UseProgram(gl.modvol_shader.program);
|
||||||
glUniform1f(gl.modvol_shader.sp_ShaderColor, 1 - FPU_SHAD_SCALE.scale_factor / 256.f);
|
glUniform1f(gl.modvol_shader.sp_ShaderColor, 1 - FPU_SHAD_SCALE.scale_factor / 256.f);
|
||||||
|
|
|
@ -820,6 +820,15 @@ void findGLVersion()
|
||||||
gl.fog_image_format = GL_ALPHA;
|
gl.fog_image_format = GL_ALPHA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef GLES
|
||||||
|
const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
|
||||||
|
if (strstr(extensions, "GL_OES_packed_depth_stencil") != NULL)
|
||||||
|
gl.GL_OES_packed_depth_stencil_supported = true;
|
||||||
|
if (strstr(extensions, "GL_OES_depth24") != NULL)
|
||||||
|
gl.GL_OES_depth24_supported = true;
|
||||||
|
if (!gl.GL_OES_packed_depth_stencil_supported)
|
||||||
|
printf("Packed depth/stencil not supported: no modifier volumes when rendering to a texture\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ShaderUniforms_t ShaderUniforms;
|
struct ShaderUniforms_t ShaderUniforms;
|
||||||
|
|
|
@ -123,6 +123,8 @@ struct gl_ctx
|
||||||
GLuint fog_image_format;
|
GLuint fog_image_format;
|
||||||
GLenum index_type;
|
GLenum index_type;
|
||||||
bool swap_buffer_not_preserved;
|
bool swap_buffer_not_preserved;
|
||||||
|
bool GL_OES_packed_depth_stencil_supported;
|
||||||
|
bool GL_OES_depth24_supported;
|
||||||
|
|
||||||
size_t get_index_size() { return index_type == GL_UNSIGNED_INT ? sizeof(u32) : sizeof(u16); }
|
size_t get_index_size() { return index_type == GL_UNSIGNED_INT ? sizeof(u32) : sizeof(u16); }
|
||||||
};
|
};
|
||||||
|
|
|
@ -523,21 +523,25 @@ void BindRTT(u32 addy, u32 fbw, u32 fbh, u32 channels, u32 fmt)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef GLES
|
#ifdef GLES
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, fbw2, fbh2);
|
if (gl.GL_OES_packed_depth_stencil_supported)
|
||||||
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, fbw2, fbh2);
|
||||||
|
else if (gl.GL_OES_depth24_supported)
|
||||||
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, fbw2, fbh2);
|
||||||
|
else
|
||||||
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, fbw2, fbh2);
|
||||||
#else
|
#else
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, fbw2, fbh2);
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, fbw2, fbh2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glGenRenderbuffers(1, &rv.stencilb);
|
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, rv.stencilb);
|
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, fbw2, fbh2);
|
|
||||||
|
|
||||||
// Create a texture for rendering to
|
// Create a texture for rendering to
|
||||||
rv.tex = glcache.GenTexture();
|
rv.tex = glcache.GenTexture();
|
||||||
glcache.BindTexture(GL_TEXTURE_2D, rv.tex);
|
glcache.BindTexture(GL_TEXTURE_2D, rv.tex);
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, channels, fbw2, fbh2, 0, channels, fmt, 0);
|
glTexImage2D(GL_TEXTURE_2D, 0, channels, fbw2, fbh2, 0, channels, fmt, 0);
|
||||||
|
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
// Create the object that will allow us to render to the aforementioned texture
|
// Create the object that will allow us to render to the aforementioned texture
|
||||||
glGenFramebuffers(1, &rv.fbo);
|
glGenFramebuffers(1, &rv.fbo);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, rv.fbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, rv.fbo);
|
||||||
|
@ -548,6 +552,11 @@ void BindRTT(u32 addy, u32 fbw, u32 fbh, u32 channels, u32 fmt)
|
||||||
// Attach the depth buffer we created earlier to our FBO.
|
// Attach the depth buffer we created earlier to our FBO.
|
||||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rv.depthb);
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rv.depthb);
|
||||||
|
|
||||||
|
#ifdef GLES
|
||||||
|
if (gl.GL_OES_packed_depth_stencil_supported)
|
||||||
|
#endif
|
||||||
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rv.depthb);
|
||||||
|
|
||||||
// Check that our FBO creation was successful
|
// Check that our FBO creation was successful
|
||||||
GLuint uStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
GLuint uStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||||
|
|
||||||
|
|
|
@ -931,7 +931,7 @@ void gui_display_fps(const char *string)
|
||||||
ImGui::Begin("##fps", NULL, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoNav
|
ImGui::Begin("##fps", NULL, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoNav
|
||||||
| ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoBackground);
|
| ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoBackground);
|
||||||
ImGui::SetWindowFontScale(2);
|
ImGui::SetWindowFontScale(2);
|
||||||
ImGui::TextColored(ImVec4(1, 1, 0, 0.7), string);
|
ImGui::TextColored(ImVec4(1, 1, 0, 0.7), "%s", string);
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
|
|
Loading…
Reference in New Issue