From cd21abe50fbd26d85d8f49367a52e907f071148b Mon Sep 17 00:00:00 2001 From: BreadFish64 Date: Wed, 30 Jan 2019 14:11:39 -0600 Subject: [PATCH] sdl: add GLES support --- src/citra/config.cpp | 1 + src/citra/default_ini.h | 4 ++++ src/citra/emu_window/emu_window_sdl2.cpp | 13 ++++++++++--- src/core/settings.cpp | 1 + src/core/settings.h | 1 + 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/citra/config.cpp b/src/citra/config.cpp index b3794f2cc..e6eea37cc 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -105,6 +105,7 @@ void Config::ReadValues() { Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); // Renderer + Settings::values.use_gles = sdl2_config->GetBoolean("Renderer", "use_gles", false); Settings::values.use_hw_renderer = sdl2_config->GetBoolean("Renderer", "use_hw_renderer", true); #ifdef __APPLE__ // Hardware shader is broken on macos thanks to poor drivers. diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 35edcbaaa..37c12a374 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -92,6 +92,10 @@ udp_pad_index= use_cpu_jit = [Renderer] +# Whether to render using GLES or OpenGL +# 0 (default): OpenGL, 1: GLES +use_gles = + # Whether to use software or hardware rendering. # 0: Software, 1 (default): Hardware use_hw_renderer = diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index 2da55bd29..14f440f34 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp @@ -122,8 +122,13 @@ EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { SDL_SetMainReady(); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + if (Settings::values.use_gles) { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + } else { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + } SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); @@ -155,7 +160,9 @@ EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { exit(1); } - if (!gladLoadGLLoader(static_cast(SDL_GL_GetProcAddress))) { + auto gl_load_func = Settings::values.use_gles ? gladLoadGLES2Loader : gladLoadGLLoader; + + if (!gl_load_func(static_cast(SDL_GL_GetProcAddress))) { LOG_CRITICAL(Frontend, "Failed to initialize GL functions: {}", SDL_GetError()); exit(1); } diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 88c88dc8c..4b80e3436 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -67,6 +67,7 @@ void LogSetting(const std::string& name, const T& value) { void LogSettings() { LOG_INFO(Config, "Citra Configuration:"); LogSetting("Core_UseCpuJit", Settings::values.use_cpu_jit); + LogSetting("Renderer_UseGLES", Settings::values.use_gles); LogSetting("Renderer_UseHwRenderer", Settings::values.use_hw_renderer); LogSetting("Renderer_UseHwShader", Settings::values.use_hw_shader); LogSetting("Renderer_ShadersAccurateGs", Settings::values.shaders_accurate_gs); diff --git a/src/core/settings.h b/src/core/settings.h index d1de56349..cea502693 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -130,6 +130,7 @@ struct Values { u64 init_time; // Renderer + bool use_gles; bool use_hw_renderer; bool use_hw_shader; bool shaders_accurate_gs;