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();
|
||||
|
||||
glcache.Enable(GL_BLEND);
|
||||
glcache.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glcache.Disable(GL_BLEND);
|
||||
|
||||
glcache.UseProgram(gl.modvol_shader.program);
|
||||
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;
|
||||
}
|
||||
}
|
||||
#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;
|
||||
|
|
|
@ -123,6 +123,8 @@ struct gl_ctx
|
|||
GLuint fog_image_format;
|
||||
GLenum index_type;
|
||||
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); }
|
||||
};
|
||||
|
|
|
@ -523,21 +523,25 @@ void BindRTT(u32 addy, u32 fbw, u32 fbh, u32 channels, u32 fmt)
|
|||
*/
|
||||
|
||||
#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
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, fbw2, fbh2);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, fbw2, fbh2);
|
||||
#endif
|
||||
|
||||
glGenRenderbuffers(1, &rv.stencilb);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, rv.stencilb);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, fbw2, fbh2);
|
||||
|
||||
// Create a texture for rendering to
|
||||
rv.tex = glcache.GenTexture();
|
||||
glcache.BindTexture(GL_TEXTURE_2D, rv.tex);
|
||||
|
||||
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
|
||||
glGenFramebuffers(1, &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.
|
||||
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
|
||||
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
|
||||
| ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoBackground);
|
||||
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::Render();
|
||||
|
|
Loading…
Reference in New Issue