From 9c4a7cd6d4ed48f8b7ca014fa594a900425ada2d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 3 Jun 2023 17:08:20 -0500 Subject: [PATCH] renderGL: fix OpenGL ES stuff --- src/gui/gui.h | 8 ++++++++ src/gui/render.cpp | 8 +------- src/gui/render/renderGL.cpp | 16 +++++++++++++++- src/gui/settings.cpp | 30 +++++++++++++++++++++++------- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/gui/gui.h b/src/gui/gui.h index 1fd1e71e2..6fed038a3 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -74,6 +74,14 @@ enum FurnaceGUIRenderBackend { GUI_BACKEND_GL }; +#ifdef HAVE_RENDER_SDL +#define GUI_BACKEND_DEFAULT GUI_BACKEND_SDL +#define GUI_BACKEND_DEFAULT_NAME "SDL" +#else +#define GUI_BACKEND_DEFAULT GUI_BACKEND_GL +#define GUI_BACKEND_DEFAULT_NAME "OpenGL" +#endif + // TODO: // - add colors for FM envelope and waveform // - maybe add "alternate" color for FM modulators/carriers (a bit difficult) diff --git a/src/gui/render.cpp b/src/gui/render.cpp index cc7cdba2f..908fd57df 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -26,12 +26,6 @@ #include "render/renderGL.h" #endif -#ifdef HAVE_RENDER_SDL -#define GUI_BACKEND_DEFAULT GUI_BACKEND_SDL -#else -#define GUI_BACKEND_DEFAULT GUI_BACKEND_GL -#endif - bool FurnaceGUI::initRender() { if (rend!=NULL) return false; @@ -71,4 +65,4 @@ bool FurnaceGUI::quitRender() { delete rend; rend=NULL; return ret; -} \ No newline at end of file +} diff --git a/src/gui/render/renderGL.cpp b/src/gui/render/renderGL.cpp index 951208abb..90adf5a1d 100644 --- a/src/gui/render/renderGL.cpp +++ b/src/gui/render/renderGL.cpp @@ -21,7 +21,7 @@ #include "../../ta-log.h" #ifdef USE_GLES #include "SDL_opengles2.h" -#define PIXEL_FORMAT GL_RGBA +#define PIXEL_FORMAT GL_UNSIGNED_BYTE #else #include "SDL_opengl.h" #define PIXEL_FORMAT GL_UNSIGNED_INT_8_8_8_8_REV @@ -62,6 +62,19 @@ struct FurnaceGLTexture { lockedData(NULL) {} }; +#ifdef USE_GLES +const char* sh_wipe_srcV= + "attribute vec4 fur_position;\n" + "void main() {\n" + " gl_Position=fur_position;\n" + "}\n"; + +const char* sh_wipe_srcF= + "uniform float uAlpha;\n" + "void main() {\n" + " gl_FragColor=vec4(0.0,0.0,0.0,uAlpha);\n" + "}\n"; +#else const char* sh_wipe_srcV= "#version 130\n" "in vec4 fur_position;\n" @@ -76,6 +89,7 @@ const char* sh_wipe_srcF= "void main() {\n" " fur_FragColor=vec4(0.0,0.0,0.0,uAlpha);\n" "}\n"; +#endif bool FurnaceGUIRenderGL::createShader(const char* vertexS, const char* fragmentS, int& vertex, int& fragment, int& program) { int status; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 943646d5e..e66926b19 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1278,17 +1278,33 @@ void FurnaceGUI::drawSettings() { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) { - if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) { - settings.renderDriver=""; + String curRenderBackend=settings.renderBackend.empty()?GUI_BACKEND_DEFAULT_NAME:settings.renderBackend; + if (ImGui::BeginCombo("Render backend",curRenderBackend.c_str())) { +#ifdef HAVE_RENDER_SDL + if (ImGui::Selectable("SDL Renderer",curRenderBackend=="SDL")) { + settings.renderBackend="SDL"; } - for (String& i: availRenderDrivers) { - if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) { - settings.renderDriver=i; - } +#endif +#ifdef HAVE_RENDER_GL + if (ImGui::Selectable("OpenGL",curRenderBackend=="OpenGL")) { + settings.renderBackend="OpenGL"; } +#endif ImGui::EndCombo(); } + if (curRenderBackend=="SDL") { + if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) { + if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) { + settings.renderDriver=""; + } + for (String& i: availRenderDrivers) { + if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) { + settings.renderDriver=i; + } + } + ImGui::EndCombo(); + } + } bool dpiScaleAuto=(settings.dpiScale<0.5f); if (ImGui::Checkbox("Automatic UI scaling factor",&dpiScaleAuto)) {