From 973bf5abdfe821b33963b712d00c92f3742cdf23 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 20 Oct 2016 06:20:45 +0300 Subject: [PATCH] gl: Disable overlay if required extension is not supported (#2212) --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 4 +++- rpcs3/Emu/RSX/GL/GLProcTable.h | 1 + rpcs3/Emu/RSX/GL/GLTextOut.h | 25 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index e3f181e8a4..d3c2d2b82b 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -559,7 +559,9 @@ void GLGSRender::on_init_thread() m_vao.element_array_buffer = *m_index_ring_buffer; m_gl_texture_cache.initialize_rtt_cache(); - m_text_printer.init(); + + if (g_cfg_rsx_overlay) + m_text_printer.init(); } void GLGSRender::on_exit() diff --git a/rpcs3/Emu/RSX/GL/GLProcTable.h b/rpcs3/Emu/RSX/GL/GLProcTable.h index 0e3ce9a83f..403ed392d8 100644 --- a/rpcs3/Emu/RSX/GL/GLProcTable.h +++ b/rpcs3/Emu/RSX/GL/GLProcTable.h @@ -160,6 +160,7 @@ OPENGL_PROC(PFNGLDISABLEIPROC, Disablei); OPENGL_PROC(PFNGLPRIMITIVERESTARTINDEXPROC, PrimitiveRestartIndex); OPENGL_PROC(PFNGLGETINTEGER64VPROC, GetInteger64v); +OPENGL_PROC(PFNGLGETSTRINGIPROC, GetStringi); OPENGL_PROC(PFNGLCHECKFRAMEBUFFERSTATUSPROC, CheckFramebufferStatus); diff --git a/rpcs3/Emu/RSX/GL/GLTextOut.h b/rpcs3/Emu/RSX/GL/GLTextOut.h index 237a44e6aa..ebdc1ec241 100644 --- a/rpcs3/Emu/RSX/GL/GLTextOut.h +++ b/rpcs3/Emu/RSX/GL/GLTextOut.h @@ -20,6 +20,7 @@ namespace gl std::unordered_map> m_offsets; bool initialized = false; + bool enabled = false; void init_program() { @@ -84,6 +85,28 @@ namespace gl void init() { + //Check for ARB_shader_draw_parameters + //While it is possible to draw text without full multidraw support, issuing separate draw calls per character is not effecient + + int ext_count; + glGetIntegerv(GL_NUM_EXTENSIONS, &ext_count); + + for (int i = 0; i < ext_count; i++) + { + const char *ext = (const char*)glGetStringi(GL_EXTENSIONS, i); + if (std::string(ext) == "GL_ARB_shader_draw_parameters") + { + enabled = true; + break; + } + } + + if (!enabled) + { + LOG_ERROR(RSX, "Debug overlay could not start because ARB_shader_draw_parameters is not supported by your GPU"); + return; + } + m_text_buffer.create(); m_scale_offsets_buffer.create(); @@ -117,6 +140,8 @@ namespace gl void print_text(int x, int y, int target_w, int target_h, const std::string &text, color4f color = { 0.3f, 1.f, 0.3f, 1.f }) { + if (!enabled) return; + verify(HERE), initialized; std::vector offsets;