From db78366131ee4cd14f51d9d1c348f7134f601631 Mon Sep 17 00:00:00 2001 From: NPO <77460082+NPO-197@users.noreply.github.com> Date: Wed, 23 Oct 2024 12:44:21 -0400 Subject: [PATCH] Code Clean Up Round one of clean up --- src/frontend/qt_sdl/EmuInstance.h | 1 - src/frontend/qt_sdl/EmuInstanceInput.cpp | 7 ++- src/frontend/qt_sdl/EmuThread.cpp | 3 +- src/frontend/qt_sdl/LuaMain.h | 10 ++-- src/frontend/qt_sdl/OSD_shaders.h | 62 ++++++++++++------------ src/frontend/qt_sdl/Screen.cpp | 42 ++++++++-------- src/frontend/qt_sdl/Screen.h | 1 - src/frontend/qt_sdl/Window.cpp | 3 +- 8 files changed, 61 insertions(+), 68 deletions(-) diff --git a/src/frontend/qt_sdl/EmuInstance.h b/src/frontend/qt_sdl/EmuInstance.h index 426457e8..cbee67b7 100644 --- a/src/frontend/qt_sdl/EmuInstance.h +++ b/src/frontend/qt_sdl/EmuInstance.h @@ -206,7 +206,6 @@ private: static void audioCallback(void* data, Uint8* stream, int len); static void micCallback(void* data, Uint8* stream, int len); - void onKeyPress(QKeyEvent* event); void onKeyRelease(QKeyEvent* event); void keyReleaseAll(); diff --git a/src/frontend/qt_sdl/EmuInstanceInput.cpp b/src/frontend/qt_sdl/EmuInstanceInput.cpp index f5357499..4222387f 100644 --- a/src/frontend/qt_sdl/EmuInstanceInput.cpp +++ b/src/frontend/qt_sdl/EmuInstanceInput.cpp @@ -71,9 +71,8 @@ void EmuInstance::inputInit() hotkeyMask = 0; lastHotkeyMask = 0; - for (int i=0;i<256;i++){ + for (int i=0;i<256;i++) KeyboardMask[i]=false; - } joystick = nullptr; controller = nullptr; @@ -224,7 +223,7 @@ void EmuInstance::onKeyPress(QKeyEvent* event) { if (event->key()<256) KeyboardMask[event->key()]=true; - if ((event->key()&0x01000000)>0 && (event->key()&0xff)<0x41) //special keys (there is probably a less messy way to write this...) + if ((event->key()&(1<<24))!=0 && (event->key()&0xff)<'A') //Special Keys KeyboardMask[0xff - (event->key()&0xff)]=true; int keyHK = getEventKeyVal(event); @@ -246,7 +245,7 @@ void EmuInstance::onKeyRelease(QKeyEvent* event) { if (event->key()<256) KeyboardMask[event->key()]=false; - if ((event->key()&0x01000000)>0 && (event->key()&0xff)<0x41)//special keys + if ((event->key()&(1<<24))!=0 && (event->key()&0xff)<'A')//Special keys KeyboardMask[0xff - (event->key()&0xff)]=false; int keyHK = getEventKeyVal(event); diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index bd29f5ab..821d0b43 100644 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -442,10 +442,9 @@ void EmuThread::run() handleMessages(); - LuaConsoleDialog* dialog = emuInstance->getMainWindow()->getLuaDialog(); //Lua Script Stuff (-for now happens at the end of each frame regardless of emuStatus) - if(dialog!=nullptr) + if (dialog!=nullptr) { LuaBundle* lua = dialog->getLuaBundle(); lua->createLuaState();//Create LuaState if needed diff --git a/src/frontend/qt_sdl/LuaMain.h b/src/frontend/qt_sdl/LuaMain.h index 3e7e66ea..f34a417e 100644 --- a/src/frontend/qt_sdl/LuaMain.h +++ b/src/frontend/qt_sdl/LuaMain.h @@ -46,9 +46,9 @@ public slots: //Based on ScreenLayout::GetScreenTransforms enum LuaCanvasTarget { - TopScreen = 0, - BottomScreen = 1, - OSD = 2 //Used for drawing to OSD / non-screen target + canvasTarget_TopScreen = 0, + canvasTarget_BottomScreen = 1, + canvasTarget_OSD = 2 //Used for drawing to OSD / non-screen target }; struct OverlayCanvas @@ -58,11 +58,11 @@ struct OverlayCanvas QImage* buffer1; QImage* buffer2; QRect rectangle; - LuaCanvasTarget target = OSD; + LuaCanvasTarget target = canvasTarget_OSD; bool isActive = true; // only active overlays are drawn unsigned int GLTexture; // used by GL rendering bool GLTextureLoaded; - OverlayCanvas(int x, int y,int w, int h, LuaCanvasTarget target = LuaCanvasTarget::OSD); + OverlayCanvas(int x, int y,int w, int h, LuaCanvasTarget target = LuaCanvasTarget::canvasTarget_OSD); void flip();//used to swap buffers / update canvas bool flipped; //used to signal update to graphics. }; diff --git a/src/frontend/qt_sdl/OSD_shaders.h b/src/frontend/qt_sdl/OSD_shaders.h index 9a92f28a..a165452e 100644 --- a/src/frontend/qt_sdl/OSD_shaders.h +++ b/src/frontend/qt_sdl/OSD_shaders.h @@ -66,42 +66,44 @@ void main() //Fragment Shader for overlay copied from melonPrimeDS project. const char* kScreenFS_overlay = R"(#version 140 - uniform sampler2D OverlayTex; +uniform sampler2D OverlayTex; - smooth in vec2 fTexcoord; +smooth in vec2 fTexcoord; - uniform vec2 uOverlayPos; - uniform vec2 uOverlaySize; - uniform int uOverlayScreenType; +uniform vec2 uOverlayPos; +uniform vec2 uOverlaySize; +uniform int uOverlayScreenType; - out vec4 oColor; +out vec4 oColor; - void main() +void main() +{ + const vec2 dsSize = vec2(256.0, 193.0); // +1 on y for pixel gap + + vec2 uv = fTexcoord * vec2(1.0, 2.0); + + if (uOverlayScreenType < 1) { - const vec2 dsSize = vec2(256.0, 193.0); // +1 on y for pixel gap - - vec2 uv = fTexcoord * vec2(1.0, 2.0); - - if (uOverlayScreenType < 1) { - // top screen - uv -= uOverlayPos / dsSize; - uv *= dsSize / uOverlaySize; - } else { - // bottom screen - uv -= vec2(0.0, 1.0); - uv -= (uOverlayPos + vec2(0.0, 1.0)) / dsSize; - uv *= dsSize / uOverlaySize; - } - - vec4 pixel = texture(OverlayTex, uv); - pixel.rgb *= pixel.a; - - if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { - oColor = vec4(0.0, 0.0, 0.0, 0.0); - } else { - oColor = pixel.bgra; - } + // top screen + uv -= uOverlayPos / dsSize; + uv *= dsSize / uOverlaySize; + } else { + // bottom screen + uv -= vec2(0.0, 1.0); + uv -= (uOverlayPos + vec2(0.0, 1.0)) / dsSize; + uv *= dsSize / uOverlaySize; } + + vec4 pixel = texture(OverlayTex, uv); + pixel.rgb *= pixel.a; + + if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) + { + oColor = vec4(0.0, 0.0, 0.0, 0.0); + } else { + oColor = pixel.bgra; + } +} )"; diff --git a/src/frontend/qt_sdl/Screen.cpp b/src/frontend/qt_sdl/Screen.cpp index 5a03b3e7..46b7abfb 100644 --- a/src/frontend/qt_sdl/Screen.cpp +++ b/src/frontend/qt_sdl/Screen.cpp @@ -48,7 +48,6 @@ #include "font.h" #include "LuaMain.h" - using namespace melonDS; @@ -679,6 +678,7 @@ void ScreenPanelNative::drawOverlays(QPainter* painter,int type) if (!dialog) return; LuaBundle* lua = dialog->getLuaBundle(); + for (auto lo = lua->overlays->begin(); lo != lua->overlays->end();) { OverlayCanvas& overlay = *lo; @@ -736,7 +736,7 @@ void ScreenPanelNative::paintEvent(QPaintEvent* event) painter.resetTransform(); - drawOverlays(&painter,LuaCanvasTarget::OSD); + drawOverlays(&painter,canvasTarget_OSD); for (auto it = osdItems.begin(); it != osdItems.end(); ) { @@ -904,7 +904,7 @@ void ScreenPanelGL::initOpenGL() glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)(0)); transferLayout(); - //TODO: Lookinto seeing if we can just re-use screen shader for this... + OpenGL::CompileVertexFragmentProgram(overlayShader, kScreenVS,kScreenFS_overlay, "OverlayShader", @@ -915,7 +915,6 @@ void ScreenPanelGL::initOpenGL() overlayScreenSizeULoc = glGetUniformLocation(overlayShader, "uScreenSize"); overlayTransformULoc = glGetUniformLocation(overlayShader, "uTransform"); - overlayPosULoc = glGetUniformLocation(overlayShader, "uOverlayPos"); overlaySizeULoc = glGetUniformLocation(overlayShader, "uOverlaySize"); overlayScreenTypeULoc = glGetUniformLocation(overlayShader, "uOverlayScreenType"); @@ -946,20 +945,19 @@ void ScreenPanelGL::deinitOpenGL() glDeleteProgram(overlayShader); - //Double Check that this actually works lol... - std::vector* overlays=nullptr; if (mainWindow->getLuaDialog()) - overlays = mainWindow->getLuaDialog()->getLuaBundle()->overlays; - for (auto lo = overlays->begin(); lo != overlays->end();) { - OverlayCanvas& overlay = *lo; - lo++; - if (!overlay.GLTextureLoaded) - continue; - glDeleteTextures(1,&overlay.GLTexture); - overlay.GLTextureLoaded=false; + std::vector* overlays = mainWindow->getLuaDialog()->getLuaBundle()->overlays; + for (auto lo = overlays->begin(); lo != overlays->end();) + { + OverlayCanvas& overlay = *lo; + lo++; + if (!overlay.GLTextureLoaded) + continue; + glDeleteTextures(1,&overlay.GLTexture); + overlay.GLTextureLoaded=false; + } } - glContext->DoneCurrent(); lastScreenWidth = lastScreenHeight = -1; @@ -1002,12 +1000,11 @@ void ScreenPanelGL::osdDeleteItem(OSDItem* item) void ScreenPanelGL::drawOverlays(int type,int screen) { - LuaConsoleDialog* dialog = mainWindow->getLuaDialog(); - if (!dialog) + if (!mainWindow->getLuaDialog()) return; - LuaBundle* lua = dialog->getLuaBundle(); - - for (auto lo = lua->overlays->begin(); lo != lua->overlays->end();) + + std::vector* overlays = mainWindow->getLuaDialog()->getLuaBundle()->overlays; + for (auto lo = overlays->begin(); lo != overlays->end();) { OverlayCanvas& overlay = *lo; lo++; @@ -1030,7 +1027,7 @@ void ScreenPanelGL::drawOverlays(int type,int screen) glTexSubImage2D(GL_TEXTURE_2D,0,0,0,overlay.rectangle.width(),overlay.rectangle.height(),GL_RGBA,GL_UNSIGNED_BYTE,overlay.displayBuffer->bits()); overlay.flipped = false; } - if(type == LuaCanvasTarget::OSD) // OSD gets drawn differently then top or bottom screen target + if(type == canvasTarget_OSD) // OSD gets drawn differently then top or bottom screen target { glBindTexture(GL_TEXTURE_2D, overlay.GLTexture); glUniform2i(osdPosULoc,overlay.rectangle.left(),overlay.rectangle.top()); @@ -1049,7 +1046,6 @@ void ScreenPanelGL::drawOverlays(int type,int screen) } } - void ScreenPanelGL::drawScreenGL() { if (!glContext) return; @@ -1162,7 +1158,7 @@ void ScreenPanelGL::drawScreenGL() glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - drawOverlays(LuaCanvasTarget::OSD,0); + drawOverlays(canvasTarget_OSD,0); for (auto it = osdItems.begin(); it != osdItems.end(); ) { diff --git a/src/frontend/qt_sdl/Screen.h b/src/frontend/qt_sdl/Screen.h index 5ead8a70..3a94453c 100644 --- a/src/frontend/qt_sdl/Screen.h +++ b/src/frontend/qt_sdl/Screen.h @@ -224,7 +224,6 @@ private: GLuint overlayShader; GLuint overlayScreenSizeULoc, overlayTransformULoc; GLuint overlayPosULoc, overlaySizeULoc, overlayScreenTypeULoc; - }; #endif // SCREEN_H diff --git a/src/frontend/qt_sdl/Window.cpp b/src/frontend/qt_sdl/Window.cpp index f54496eb..3256a038 100644 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -410,7 +410,6 @@ MainWindow::MainWindow(int id, EmuInstance* inst, QWidget* parent) : actLuaScript = menu->addAction("Lua Script"); connect(actLuaScript,&QAction::triggered,this,&MainWindow::onOpenLuaScript); - menu->addSeparator(); actEnableCheats = menu->addAction("Enable cheats"); @@ -1681,7 +1680,7 @@ void MainWindow::onOpenPowerManagement() void MainWindow::onOpenLuaScript() { - if (this->luaDialog) // only one at a time. + if (this->luaDialog) return; this->luaDialog = new LuaConsoleDialog(this); this->luaDialog->show();