From 7fe2ab720f46e669bfed8bbadfc3776b9222681e Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 27 Sep 2021 20:29:23 +0200 Subject: [PATCH] refactor screen_width/height --- core/emulator.cpp | 33 +------------------ core/emulator.h | 1 - core/hw/pvr/Renderer_if.cpp | 28 ++++++++++++++++ core/hw/pvr/Renderer_if.h | 1 + core/rend/dx9/d3d_renderer.cpp | 16 ++++----- core/rend/dx9/dxcontext.cpp | 13 ++++---- core/rend/gles/gldraw.cpp | 13 +++----- core/rend/gles/gles.cpp | 14 ++++---- core/rend/gui.cpp | 14 ++++---- core/rend/gui_util.h | 2 -- core/rend/mainui.cpp | 2 +- core/rend/transform_matrix.h | 4 +-- core/rend/vulkan/vulkan_context.cpp | 8 ++--- core/rend/vulkan/vulkan_context.h | 4 +-- core/rend/vulkan/vulkan_renderer.h | 12 +++---- core/sdl/sdl.cpp | 4 +-- core/types.h | 5 +++ core/windows/rawinput.cpp | 5 ++- core/windows/winmain.cpp | 19 +++++------ core/wsi/egl.cpp | 4 +-- core/wsi/gl_context.h | 2 -- core/wsi/sdl.cpp | 6 ++-- core/wsi/wgl.cpp | 4 +-- core/wsi/xgl.cpp | 4 +-- .../flycast/src/main/jni/src/Android.cpp | 8 ++--- .../emulator/FlycastViewController.mm | 9 +++-- .../emulator-osx/emulator-osx/osx-main.mm | 9 +++-- shell/libretro/libretro.cpp | 10 +++--- 28 files changed, 118 insertions(+), 136 deletions(-) diff --git a/core/emulator.cpp b/core/emulator.cpp index d0b5ed5af..f0f3e5b87 100644 --- a/core/emulator.cpp +++ b/core/emulator.cpp @@ -39,8 +39,6 @@ #include "hw/mem/mem_watch.h" #include "network/net_handshake.h" -extern int screen_width, screen_height; - std::atomic loading_canceled; settings_t settings; @@ -672,40 +670,11 @@ void loadGameSpecificSettings() config::Settings::instance().load(true); } -void dc_resize_renderer() -{ - if (renderer == nullptr) - return; - float hres; - int vres = config::RenderResolution; - if (config::Widescreen && !config::Rotate90) - { - if (config::SuperWidescreen) - hres = (float)config::RenderResolution * screen_width / screen_height ; - else - hres = config::RenderResolution * 16.f / 9.f; - - } - else if (config::Rotate90) - { - vres = vres * config::ScreenStretching / 100; - hres = config::RenderResolution * 4.f / 3.f; - } - else - { - hres = config::RenderResolution * 4.f * config::ScreenStretching / 3.f / 100.f; - } - if (!config::Rotate90) - hres = std::roundf(hres / 2.f) * 2.f; - DEBUG_LOG(RENDERER, "dc_resize_renderer: %d x %d", (int)hres, vres); - renderer->Resize((int)hres, vres); -} - void dc_resume() { SetMemoryHandlers(); settings.aica.NoBatch = config::ForceWindowsCE || config::DSPEnabled || config::GGPOEnable; - dc_resize_renderer(); + rend_resize_renderer(); EventManager::event(Event::Resume); if (!emuThread.thread.joinable()) diff --git a/core/emulator.h b/core/emulator.h index 56acf8e5b..e32283944 100644 --- a/core/emulator.h +++ b/core/emulator.h @@ -50,7 +50,6 @@ bool dc_is_load_done(); void dc_cancel_load(); void dc_get_load_status(); bool dc_is_running(); -void dc_resize_renderer(); std::string dc_get_last_error(); void dc_set_network_state(bool online); diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index a50f9a549..f6cc628ad 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -506,3 +506,31 @@ void rend_deserialize(void **data, unsigned int *total_size, serialize_version_e REICAST_US(fb_watch_addr_end); } } + +void rend_resize_renderer() +{ + if (renderer == nullptr) + return; + float hres; + int vres = config::RenderResolution; + if (config::Widescreen && !config::Rotate90) + { + if (config::SuperWidescreen) + hres = (float)config::RenderResolution * settings.display.width / settings.display.height; + else + hres = config::RenderResolution * 16.f / 9.f; + } + else if (config::Rotate90) + { + vres = vres * config::ScreenStretching / 100; + hres = config::RenderResolution * 4.f / 3.f; + } + else + { + hres = config::RenderResolution * 4.f * config::ScreenStretching / 3.f / 100.f; + } + if (!config::Rotate90) + hres = std::roundf(hres / 2.f) * 2.f; + DEBUG_LOG(RENDERER, "rend_resize_renderer: %d x %d", (int)hres, vres); + renderer->Resize((int)hres, vres); +} diff --git a/core/hw/pvr/Renderer_if.h b/core/hw/pvr/Renderer_if.h index 4e19b9863..a8ffcd964 100644 --- a/core/hw/pvr/Renderer_if.h +++ b/core/hw/pvr/Renderer_if.h @@ -20,6 +20,7 @@ void rend_start_rollback(); void rend_allow_rollback(); void rend_serialize(void **data, unsigned int *total_size); void rend_deserialize(void **data, unsigned int *total_size, serialize_version_enum version); +void rend_resize_renderer(); /////// extern TA_context* _pvrrc; diff --git a/core/rend/dx9/d3d_renderer.cpp b/core/rend/dx9/d3d_renderer.cpp index ffed2facc..8010f502a 100644 --- a/core/rend/dx9/d3d_renderer.cpp +++ b/core/rend/dx9/d3d_renderer.cpp @@ -1151,7 +1151,7 @@ void D3DRenderer::renderFramebuffer() device->ColorFill(backbuffer, 0, D3DCOLOR_ARGB(255, VO_BORDER_COL.Red, VO_BORDER_COL.Green, VO_BORDER_COL.Blue)); int fx = 0; int sx = 0; - float screenAR = (float)screen_width / screen_height; + float screenAR = (float)settings.display.width / settings.display.height; int fbwidth = width; int fbheight = height; if (config::Rotate90) @@ -1160,16 +1160,16 @@ void D3DRenderer::renderFramebuffer() if (renderAR > screenAR) fx = (int)roundf((fbwidth - screenAR * fbheight) / 2.f); else - sx = (int)roundf((screen_width - renderAR * screen_height) / 2.f); + sx = (int)roundf((settings.display.width - renderAR * settings.display.height) / 2.f); if (!config::Rotate90) { RECT rs { 0, 0, (long)width, (long)height }; - RECT rd { 0, 0, screen_width, screen_height }; + RECT rd { 0, 0, settings.display.width, settings.display.height }; if (sx != 0) { rd.left = sx; - rd.right = screen_width - sx; + rd.right = settings.display.width - sx; } else { @@ -1190,7 +1190,7 @@ void D3DRenderer::renderFramebuffer() device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); glm::mat4 identity = glm::identity(); - glm::mat4 projection = glm::translate(glm::vec3(-1.f / screen_width, 1.f / screen_height, 0)) + glm::mat4 projection = glm::translate(glm::vec3(-1.f / settings.display.width, 1.f / settings.display.height, 0)) * glm::rotate((float)M_PI_2, glm::vec3(0, 0, 1)); device->SetTransform(D3DTS_WORLD, (const D3DMATRIX *)&identity[0][0]); @@ -1200,9 +1200,9 @@ void D3DRenderer::renderFramebuffer() device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1); D3DVIEWPORT9 viewport; viewport.X = sx; - viewport.Y = fx * screen_width / height; - viewport.Width = screen_width - sx * 2; - viewport.Height = screen_height - 2 * fx * screen_width / height; + viewport.Y = fx * settings.display.width / height; + viewport.Width = settings.display.width - sx * 2; + viewport.Height = settings.display.height - 2 * fx * settings.display.width / height; viewport.MinZ = 0; viewport.MaxZ = 1; verifyWin(device->SetViewport(&viewport)); diff --git a/core/rend/dx9/dxcontext.cpp b/core/rend/dx9/dxcontext.cpp index 3c1b5771f..18a23f990 100644 --- a/core/rend/dx9/dxcontext.cpp +++ b/core/rend/dx9/dxcontext.cpp @@ -27,7 +27,6 @@ #include "emulator.h" DXContext theDXContext; -extern int screen_width, screen_height; // FIXME bool DXContext::Init(bool keepCurrentWindow) { @@ -98,7 +97,7 @@ void DXContext::Present() { renderer = new D3DRenderer(); renderer->Init(); - dc_resize_renderer(); + rend_resize_renderer(); } } #endif @@ -122,11 +121,11 @@ void DXContext::EndImGuiFrame() if (overlayOnly) { if (crosshairsNeeded() || config::FloatVMUs) - overlay.draw(screen_width, screen_height, config::FloatVMUs, true); + overlay.draw(settings.display.width, settings.display.height, config::FloatVMUs, true); } else { - overlay.draw(screen_width, screen_height, true, false); + overlay.draw(settings.display.width, settings.display.height, true, false); } ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()); pDevice->EndScene(); @@ -139,9 +138,9 @@ void DXContext::resize() return; RECT rect; GetClientRect(hWnd, &rect); - d3dpp.BackBufferWidth = screen_width = rect.right; - d3dpp.BackBufferHeight = screen_height = rect.bottom; - if (screen_width == 0 || screen_height == 0) + d3dpp.BackBufferWidth = settings.display.width = rect.right; + d3dpp.BackBufferHeight = settings.display.height = rect.bottom; + if (settings.display.width == 0 || settings.display.height == 0) // window minimized return; resetDevice(); diff --git a/core/rend/gles/gldraw.cpp b/core/rend/gles/gldraw.cpp index 2417ba791..5cc012a3b 100644 --- a/core/rend/gles/gldraw.cpp +++ b/core/rend/gles/gldraw.cpp @@ -66,9 +66,6 @@ const u32 SrcBlendGL[] = GL_ONE_MINUS_DST_ALPHA }; -extern int screen_width; -extern int screen_height; - PipelineShader* CurrentShader; u32 gcflip; @@ -686,7 +683,7 @@ bool render_output_framebuffer() glcache.Disable(GL_SCISSOR_TEST); int fx = 0; int sx = 0; - float screenAR = (float)screen_width / screen_height; + float screenAR = (float)settings.display.width / settings.display.height; int fbwidth = gl.ofbo.width; int fbheight = gl.ofbo.height; if (config::Rotate90) @@ -695,16 +692,16 @@ bool render_output_framebuffer() if (renderAR > screenAR) fx = (int)roundf((fbwidth - screenAR * fbheight) / 2.f); else - sx = (int)roundf((screen_width - renderAR * screen_height) / 2.f); + sx = (int)roundf((settings.display.width - renderAR * settings.display.height) / 2.f); if (gl.gl_major < 3 || config::Rotate90) { if (gl.ofbo.tex == 0) return false; if (sx != 0) - glViewport(sx, 0, screen_width - sx * 2, screen_height); + glViewport(sx, 0, settings.display.width - sx * 2, settings.display.height); else - glViewport(-fx, 0, screen_width + fx * 2, screen_height); + glViewport(-fx, 0, settings.display.width + fx * 2, settings.display.height); glBindFramebuffer(GL_FRAMEBUFFER, gl.ofbo.origFbo); glcache.ClearColor(VO_BORDER_COL.Red / 255.f, VO_BORDER_COL.Green / 255.f, VO_BORDER_COL.Blue / 255.f, 1.f); glClear(GL_COLOR_BUFFER_BIT); @@ -720,7 +717,7 @@ bool render_output_framebuffer() glcache.ClearColor(VO_BORDER_COL.Red / 255.f, VO_BORDER_COL.Green / 255.f, VO_BORDER_COL.Blue / 255.f, 1.f); glClear(GL_COLOR_BUFFER_BIT); glBlitFramebuffer(fx, 0, gl.ofbo.width - fx, gl.ofbo.height, - sx, 0, screen_width - sx, screen_height, + sx, 0, settings.display.width - sx, settings.display.height, GL_COLOR_BUFFER_BIT, GL_LINEAR); glBindFramebuffer(GL_FRAMEBUFFER, gl.ofbo.origFbo); #endif diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index 2dda46232..e4fc3b50e 100644 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -324,8 +324,6 @@ void main() GLCache glcache; gl_ctx gl; -int screen_width; -int screen_height; GLuint fogTextureId; GLuint paletteTextureId; @@ -1014,14 +1012,14 @@ void OSD_DRAW(bool clear_screen) if (gl.OSD_SHADER.osd_tex != 0) { glcache.Disable(GL_SCISSOR_TEST); - glViewport(0, 0, screen_width, screen_height); + glViewport(0, 0, settings.display.width, settings.display.height); if (clear_screen) { glcache.ClearColor(0.7f, 0.7f, 0.7f, 1.f); glClear(GL_COLOR_BUFFER_BIT); render_output_framebuffer(); - glViewport(0, 0, screen_width, screen_height); + glViewport(0, 0, settings.display.width, settings.display.height); } #ifndef GLES2 @@ -1036,12 +1034,12 @@ void OSD_DRAW(bool clear_screen) verify(glIsProgram(gl.OSD_SHADER.program)); glcache.UseProgram(gl.OSD_SHADER.program); - float scale_h = screen_height / 480.f; - float offs_x = (screen_width - scale_h * 640.f) / 2.f; + float scale_h = settings.display.height / 480.f; + float offs_x = (settings.display.width - scale_h * 640.f) / 2.f; float scale[4]; - scale[0] = 2.f / (screen_width / scale_h); + scale[0] = 2.f / (settings.display.width / scale_h); scale[1]= -2.f / 480.f; - scale[2]= 1.f - 2.f * offs_x / screen_width; + scale[2]= 1.f - 2.f * offs_x / settings.display.width; scale[3]= -1.f; glUniform4fv(gl.OSD_SHADER.scale, 1, scale); diff --git a/core/rend/gui.cpp b/core/rend/gui.cpp index 88c4fad6a..1221b1cbb 100644 --- a/core/rend/gui.cpp +++ b/core/rend/gui.cpp @@ -256,7 +256,7 @@ void gui_init() // TODO Linux, iOS, ... #endif - INFO_LOG(RENDERER, "Screen DPI is %d, size %d x %d. Scaling by %.2f", screen_dpi, screen_width, screen_height, scaling); + INFO_LOG(RENDERER, "Screen DPI is %d, size %d x %d. Scaling by %.2f", screen_dpi, settings.display.width, settings.display.height, scaling); EventManager::listen(Event::Resume, emuEventCallback); EventManager::listen(Event::Start, emuEventCallback); @@ -304,8 +304,8 @@ static void ImGui_Impl_NewFrame() else if (config::RendererType.isDirectX()) ImGui_ImplDX9_NewFrame(); #endif - ImGui::GetIO().DisplaySize.x = screen_width; - ImGui::GetIO().DisplaySize.y = screen_height; + ImGui::GetIO().DisplaySize.x = settings.display.width; + ImGui::GetIO().DisplaySize.y = settings.display.height; ImGuiIO& io = ImGui::GetIO(); @@ -324,7 +324,7 @@ static void ImGui_Impl_NewFrame() if (kb_key[port][i] != 0) io.KeysDown[kb_key[port][i]] = true; } - if (mouseX < 0 || mouseX >= screen_width || mouseY < 0 || mouseY >= screen_height) + if (mouseX < 0 || mouseX >= settings.display.width || mouseY < 0 || mouseY >= settings.display.height) io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); else io.MousePos = ImVec2(mouseX, mouseY); @@ -2407,7 +2407,7 @@ void gui_display_osd() displayCrosshairs(); if (config::FloatVMUs) display_vmus(); -// gui_plot_render_time(screen_width, screen_height); +// gui_plot_render_time(settings.display.width, settings.display.height); if (ggpo::active() && config::NetworkStats) ggpo::displayStats(); @@ -2534,10 +2534,10 @@ std::pair getCrosshairPosition(int playerNum) fx = t; std::swap(width, height); } - float scale = height / screen_height; + float scale = height / settings.display.height; fy /= scale; scale /= config::ScreenStretching / 100.f; - fx = fx / scale + (screen_width - width / scale) / 2.f; + fx = fx / scale + (settings.display.width - width / scale) / 2.f; return std::make_pair(fx, fy); } diff --git a/core/rend/gui_util.h b/core/rend/gui_util.h index cfd44e8fa..afe5e1078 100644 --- a/core/rend/gui_util.h +++ b/core/rend/gui_util.h @@ -28,8 +28,6 @@ #include "dx9/dxcontext.h" #include "gui.h" -extern int screen_width, screen_height; - typedef void (*StringCallback)(bool cancelled, std::string selection); void select_file_popup(const char *prompt, StringCallback callback, diff --git a/core/rend/mainui.cpp b/core/rend/mainui.cpp index 9ecbb6e8e..623ea796f 100644 --- a/core/rend/mainui.cpp +++ b/core/rend/mainui.cpp @@ -70,7 +70,7 @@ bool mainui_rend_frame() void mainui_init() { rend_init_renderer(); - dc_resize_renderer(); + rend_resize_renderer(); } void mainui_term() diff --git a/core/rend/transform_matrix.h b/core/rend/transform_matrix.h index 9115d833f..5dac245cd 100644 --- a/core/rend/transform_matrix.h +++ b/core/rend/transform_matrix.h @@ -26,8 +26,6 @@ #include #include -extern int screen_width, screen_height; - // Dreamcast: // +Y is down // Open GL: @@ -82,7 +80,7 @@ public: constexpr int rttFlipY = System == COORD_DIRECTX ? -1 : 1; constexpr int framebufferFlipY = System == COORD_DIRECTX ? -1 : 1; - renderViewport = { width == 0 ? screen_width : width, height == 0 ? screen_height : height }; + renderViewport = { width == 0 ? settings.display.width : width, height == 0 ? settings.display.height : height }; this->renderingContext = renderingContext; GetFramebufferScaling(false, scale_x, scale_y); diff --git a/core/rend/vulkan/vulkan_context.cpp b/core/rend/vulkan/vulkan_context.cpp index d722dcf8b..b9458dab4 100644 --- a/core/rend/vulkan/vulkan_context.cpp +++ b/core/rend/vulkan/vulkan_context.cpp @@ -1029,7 +1029,7 @@ void VulkanContext::DoSwapAutomation() u8* img = (u8*)device->mapMemory(*deviceMemory, 0, VK_WHOLE_SIZE); img += subresourceLayout.offset; - u8 *end = img + screen_width * screen_height * 4; + u8 *end = img + settings.display.width * settings.display.height * 4; if (!supportsBlit && colorFormat == vk::Format::eB8G8R8A8Unorm) { for (u8 *p = img; p < end; p += 4) @@ -1045,7 +1045,7 @@ void VulkanContext::DoSwapAutomation() for (u8 *p = img; p < end; p += 4) p[3] = 0xff; } - dump_screenshot(img, screen_width, screen_height, true, subresourceLayout.rowPitch, false); + dump_screenshot(img, settings.display.width, settings.display.height, true, subresourceLayout.rowPitch, false); device->unmapMemory(*deviceMemory); } @@ -1089,10 +1089,10 @@ void VulkanContext::SetWindowSize(u32 width, u32 height) // In this case, the context becomes invalid but we keep the previous // dimensions to not confuse the renderer and imgui if (width != 0) - screen_width = width; + settings.display.width = width; if (height != 0) - screen_height = height; + settings.display.height = height; SetResized(); } diff --git a/core/rend/vulkan/vulkan_context.h b/core/rend/vulkan/vulkan_context.h index 7b3abc8dc..3926b3248 100644 --- a/core/rend/vulkan/vulkan_context.h +++ b/core/rend/vulkan/vulkan_context.h @@ -47,8 +47,6 @@ public: #include "rend/TexCache.h" #include "overlay.h" -extern int screen_width, screen_height; - struct ImDrawData; void ImGui_ImplVulkan_RenderDrawData(ImDrawData *draw_data); static vk::Format findDepthFormat(vk::PhysicalDevice physicalDevice); @@ -80,7 +78,7 @@ public: vk::RenderPass GetRenderPass() const { return *renderPass; } vk::CommandBuffer GetCurrentCommandBuffer() const { return *commandBuffers[GetCurrentImageIndex()]; } vk::DescriptorPool GetDescriptorPool() const { return *descriptorPool; } - vk::Extent2D GetViewPort() const { return { (u32)screen_width, (u32)screen_height }; } + vk::Extent2D GetViewPort() const { return { (u32)settings.display.width, (u32)settings.display.height }; } size_t GetSwapChainSize() const { return imageViews.size(); } int GetCurrentImageIndex() const { return currentImage; } void WaitIdle() const; diff --git a/core/rend/vulkan/vulkan_renderer.h b/core/rend/vulkan/vulkan_renderer.h index 54e52d25f..948863c23 100644 --- a/core/rend/vulkan/vulkan_renderer.h +++ b/core/rend/vulkan/vulkan_renderer.h @@ -190,13 +190,13 @@ public: GetContext()->BeginRenderPass(); GetContext()->PresentLastFrame(); } - const float dc2s_scale_h = screen_height / 480.0f; - const float sidebarWidth = (screen_width - dc2s_scale_h * 640.0f) / 2; + const float dc2s_scale_h = settings.display.height / 480.0f; + const float sidebarWidth = (settings.display.width - dc2s_scale_h * 640.0f) / 2; std::vector osdVertices = GetOSDVertices(); - const float x1 = 2.0f / (screen_width / dc2s_scale_h); + const float x1 = 2.0f / (settings.display.width / dc2s_scale_h); const float y1 = 2.0f / 480; - const float x2 = 1 - 2 * sidebarWidth / screen_width; + const float x2 = 1 - 2 * sidebarWidth / settings.display.width; const float y2 = 1; for (OSDVertex& vtx : osdVertices) { @@ -208,9 +208,9 @@ public: cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, osdPipeline.GetPipeline()); osdPipeline.BindDescriptorSets(cmdBuffer); - const vk::Viewport viewport(0, 0, (float)screen_width, (float)screen_height, 0, 1.f); + const vk::Viewport viewport(0, 0, (float)settings.display.width, (float)settings.display.height, 0, 1.f); cmdBuffer.setViewport(0, 1, &viewport); - const vk::Rect2D scissor({ 0, 0 }, { (u32)screen_width, (u32)screen_height }); + const vk::Rect2D scissor({ 0, 0 }, { (u32)settings.display.width, (u32)settings.display.height }); cmdBuffer.setScissor(0, 1, &scissor); osdBuffer->upload(osdVertices.size() * sizeof(OSDVertex), osdVertices.data()); const vk::DeviceSize zero = 0; diff --git a/core/sdl/sdl.cpp b/core/sdl/sdl.cpp index 7c2327a36..9493d5219 100644 --- a/core/sdl/sdl.cpp +++ b/core/sdl/sdl.cpp @@ -511,8 +511,8 @@ bool sdl_recreate_window(u32 flags) ERROR_LOG(COMMON, "Window creation failed: %s", SDL_GetError()); return false; } - screen_width = window_width * hdpiScaling; - screen_height = window_height * hdpiScaling; + settings.display.width = window_width * hdpiScaling; + settings.display.height = window_height * hdpiScaling; #if !defined(GLES) && !defined(_WIN32) && !defined(__SWITCH__) // Set the window icon diff --git a/core/types.h b/core/types.h index e98c1b5fc..e6f333ec8 100644 --- a/core/types.h +++ b/core/types.h @@ -331,6 +331,11 @@ struct settings_t u32 flash_size; } platform; + struct { + int width = 640; + int height = 480; + } display; + struct { bool disable_nvmem; diff --git a/core/windows/rawinput.cpp b/core/windows/rawinput.cpp index 27a7653fb..4d89be84c 100644 --- a/core/windows/rawinput.cpp +++ b/core/windows/rawinput.cpp @@ -25,7 +25,6 @@ #define CALLBACK #endif -extern int screen_width, screen_height; HWND getNativeHwnd(); namespace rawinput { @@ -206,7 +205,7 @@ RawMouse::RawMouse(int maple_port, const std::string& name, const std::string& u std::replace(this->_unique_id.begin(), this->_unique_id.end(), ']', '_'); loadMapping(); - setAbsPos(screen_width / 2, screen_height / 2, screen_width, screen_height); + setAbsPos(settings.display.width / 2, settings.display.height / 2, settings.display.width, settings.display.height); } void RawMouse::buttonInput(Button button, u16 flags, u16 downFlag, u16 upFlag) @@ -225,7 +224,7 @@ void RawMouse::updateState(RAWMOUSE* state) POINT pt { long(state->lLastX / 65535.0f * width), long(state->lLastY / 65535.0f * height) }; ScreenToClient(getNativeHwnd(), &pt); - setAbsPos(pt.x, pt.y, screen_width, screen_height); + setAbsPos(pt.x, pt.y, settings.display.width, settings.display.height); } else if (state->lLastX != 0 || state->lLastY != 0) setRelPos(state->lLastX, state->lLastY); diff --git a/core/windows/winmain.cpp b/core/windows/winmain.cpp index 53f288b29..ebcdf1348 100644 --- a/core/windows/winmain.cpp +++ b/core/windows/winmain.cpp @@ -252,7 +252,6 @@ static int window_x, window_y; // Width and height of the window #define DEFAULT_WINDOW_WIDTH 1280 #define DEFAULT_WINDOW_HEIGHT 720 -extern int screen_width, screen_height; static bool window_maximized = false; static void centerMouse() @@ -314,8 +313,8 @@ static LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM return 1; case WM_SIZE: - screen_width = LOWORD(lParam); - screen_height = HIWORD(lParam); + settings.display.width = LOWORD(lParam); + settings.display.height = HIWORD(lParam); window_maximized = (wParam & SIZE_MAXIMIZED) != 0; #ifdef USE_VULKAN theVulkanContext.SetResized(); @@ -366,7 +365,7 @@ static LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM { int xPos = GET_X_LPARAM(lParam); int yPos = GET_Y_LPARAM(lParam); - mouse->setAbsPos(xPos, yPos, screen_width, screen_height); + mouse->setAbsPos(xPos, yPos, settings.display.width, settings.display.height); if (wParam & MK_LBUTTON) mouse->setButton(Button::LEFT_BUTTON, true); @@ -460,14 +459,14 @@ void CreateMainWindow() MessageBox(0, "Failed to register the window class", "Error", MB_OK | MB_ICONEXCLAMATION); else windowClassRegistered = true; - screen_width = cfgLoadInt("window", "width", DEFAULT_WINDOW_WIDTH); - screen_height = cfgLoadInt("window", "height", DEFAULT_WINDOW_HEIGHT); + settings.display.width = cfgLoadInt("window", "width", DEFAULT_WINDOW_WIDTH); + settings.display.height = cfgLoadInt("window", "height", DEFAULT_WINDOW_HEIGHT); window_maximized = cfgLoadBool("window", "maximized", false); } // Create the eglWindow RECT sRect; - SetRect(&sRect, 0, 0, screen_width, screen_height); + SetRect(&sRect, 0, 0, settings.display.width, settings.display.height); AdjustWindowRectEx(&sRect, WS_OVERLAPPEDWINDOW, false, 0); hWnd = CreateWindow(WINDOW_CLASS, VER_EMUNAME, WS_VISIBLE | WS_OVERLAPPEDWINDOW | (window_maximized ? WS_MAXIMIZE : 0), @@ -769,10 +768,10 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi TermRenderApi(); destroyMainWindow(); cfgSaveBool("window", "maximized", window_maximized); - if (!window_maximized && screen_width != 0 && screen_height != 0) + if (!window_maximized && settings.display.width != 0 && settings.display.height != 0) { - cfgSaveInt("window", "width", screen_width); - cfgSaveInt("window", "height", screen_height); + cfgSaveInt("window", "width", settings.display.width); + cfgSaveInt("window", "height", settings.display.height); } #endif diff --git a/core/wsi/egl.cpp b/core/wsi/egl.cpp index 16e070a8c..a14e58b35 100644 --- a/core/wsi/egl.cpp +++ b/core/wsi/egl.cpp @@ -169,8 +169,8 @@ bool EGLGraphicsContext::Init() eglQuerySurface(display, surface, EGL_HEIGHT, &h); NOTICE_LOG(RENDERER, "eglQuerySurface: %d - %d", w, h); - screen_width = w; - screen_height = h; + settings.display.width = w; + settings.display.height = h; #ifdef TARGET_PANDORA fbdev = open("/dev/fb0", O_RDONLY); diff --git a/core/wsi/gl_context.h b/core/wsi/gl_context.h index 6988adc12..663ea6b04 100644 --- a/core/wsi/gl_context.h +++ b/core/wsi/gl_context.h @@ -22,8 +22,6 @@ #include "types.h" void do_swap_automation(); -// FIXME -extern int screen_width, screen_height; class GLGraphicsContext { diff --git a/core/wsi/sdl.cpp b/core/wsi/sdl.cpp index 9fa3abfea..5c2e82b55 100644 --- a/core/wsi/sdl.cpp +++ b/core/wsi/sdl.cpp @@ -69,7 +69,7 @@ bool SDLGLGraphicsContext::Init() } SDL_GL_MakeCurrent(window, NULL); - SDL_GL_GetDrawableSize(window, &screen_width, &screen_height); + SDL_GL_GetDrawableSize(window, &settings.display.width, &settings.display.height); float ddpi, hdpi, vdpi; if (!SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(window), &ddpi, &hdpi, &vdpi)) @@ -129,9 +129,9 @@ void SDLGLGraphicsContext::Swap() SDL_GL_SwapWindow(window); // Check if drawable has been resized - SDL_GL_GetDrawableSize(window, &screen_width, &screen_height); + SDL_GL_GetDrawableSize(window, &settings.display.width, &settings.display.height); #ifdef __SWITCH__ - float newScaling = screen_height == 720 ? 1.5f : 1.0f; + float newScaling = settings.display.height == 720 ? 1.5f : 1.0f; if (newScaling != scaling) { // Restart the UI to take the new scaling factor into account diff --git a/core/wsi/wgl.cpp b/core/wsi/wgl.cpp index c651ce2b3..cebc71403 100644 --- a/core/wsi/wgl.cpp +++ b/core/wsi/wgl.cpp @@ -111,8 +111,8 @@ bool WGLGraphicsContext::Init() RECT r; GetClientRect(ourWindow, &r); - screen_width = r.right - r.left; - screen_height = r.bottom - r.top; + settings.display.width = r.right - r.left; + settings.display.height = r.bottom - r.top; if (rv) PostInit(); diff --git a/core/wsi/xgl.cpp b/core/wsi/xgl.cpp index 0a8a9ad83..cbf12217a 100644 --- a/core/wsi/xgl.cpp +++ b/core/wsi/xgl.cpp @@ -81,7 +81,7 @@ bool XGLGraphicsContext::Init() Window win; int temp; unsigned int tempu; - XGetGeometry(display, window, &win, &temp, &temp, (u32 *)&screen_width, (u32 *)&screen_height, &tempu, &tempu); + XGetGeometry(display, window, &win, &temp, &temp, (u32 *)&settings.display.width, (u32 *)&settings.display.height, &tempu, &tempu); #ifndef TEST_AUTOMATION swapOnVSync = config::VSync; @@ -173,7 +173,7 @@ void XGLGraphicsContext::Swap() Window win; int temp; unsigned int tempu; - XGetGeometry(display, window, &win, &temp, &temp, (u32 *)&screen_width, (u32 *)&screen_height, &tempu, &tempu); + XGetGeometry(display, window, &win, &temp, &temp, (u32 *)&settings.display.width, (u32 *)&settings.display.height, &tempu, &tempu); } void XGLGraphicsContext::Term() diff --git a/shell/android-studio/flycast/src/main/jni/src/Android.cpp b/shell/android-studio/flycast/src/main/jni/src/Android.cpp index fd501a147..431b1ea82 100644 --- a/shell/android-studio/flycast/src/main/jni/src/Android.cpp +++ b/shell/android-studio/flycast/src/main/jni/src/Android.cpp @@ -85,8 +85,6 @@ extern "C" JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_screenDpi( screen_dpi = screenDpi; } -extern int screen_width,screen_height; - std::shared_ptr mouse; float vjoy_pos[15][8]; @@ -348,8 +346,8 @@ extern "C" JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendinitNa } else { - screen_width = width; - screen_height = height; + settings.display.width = width; + settings.display.height = height; mainui_reinit(); } } @@ -579,7 +577,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_reicast_emulator_periph_InputDevi extern "C" JNIEXPORT void JNICALL Java_com_reicast_emulator_periph_InputDeviceManager_mouseEvent(JNIEnv *env, jobject obj, jint xpos, jint ypos, jint buttons) { - mouse->setAbsPos(xpos, ypos, screen_width, screen_height); + mouse->setAbsPos(xpos, ypos, settings.display.width, settings.display.height); mouse->setButton(Mouse::LEFT_BUTTON, (buttons & 1) != 0); mouse->setButton(Mouse::RIGHT_BUTTON, (buttons & 2) != 0); mouse->setButton(Mouse::MIDDLE_BUTTON, (buttons & 4) != 0); diff --git a/shell/apple/emulator-ios/emulator/FlycastViewController.mm b/shell/apple/emulator-ios/emulator/FlycastViewController.mm index efffc0b64..a28271500 100644 --- a/shell/apple/emulator-ios/emulator/FlycastViewController.mm +++ b/shell/apple/emulator-ios/emulator/FlycastViewController.mm @@ -66,7 +66,6 @@ void common_linux_setup(); @end -extern int screen_width,screen_height; extern int screen_dpi; @implementation FlycastViewController @@ -180,10 +179,10 @@ extern int screen_dpi; self.iCadeReader.active = YES; // TODO iCade handlers - screen_width = roundf([[UIScreen mainScreen] nativeBounds].size.width); - screen_height = roundf([[UIScreen mainScreen] nativeBounds].size.height); - if (screen_width < screen_height) - std::swap(screen_width, screen_height); + settings.display.width = roundf([[UIScreen mainScreen] nativeBounds].size.width); + settings.display.height = roundf([[UIScreen mainScreen] nativeBounds].size.height); + if (settings.display.width < settings.display.height) + std::swap(settings.display.width, settings.display.height); float scale = 1; if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { scale = [[UIScreen mainScreen] scale]; diff --git a/shell/apple/emulator-osx/emulator-osx/osx-main.mm b/shell/apple/emulator-osx/emulator-osx/osx-main.mm index 06cc775d1..22fecaaca 100644 --- a/shell/apple/emulator-osx/emulator-osx/osx-main.mm +++ b/shell/apple/emulator-osx/emulator-osx/osx-main.mm @@ -113,7 +113,6 @@ void emu_dc_resume() dc_resume(); } -extern int screen_width,screen_height; extern bool rend_framePending(); bool emu_frame_pending() @@ -138,8 +137,8 @@ bool emu_vsync_enabled() bool emu_single_frame(int w, int h) { - screen_width = w; - screen_height = h; + settings.display.width = w; + settings.display.height = h; //For DelayFrameSwapping: use while loop to call multple mainui_rend_frame() until rend_swap_frame(u32 fb_r_sof1) int counter = 0; @@ -236,8 +235,8 @@ void emu_gles_init(int width, int height) displayResolution.height = CGDisplayPixelsHigh(displayID); scaling = displayNativeSize.width / displayResolution.width; - screen_width = width; - screen_height = height; + settings.display.width = width; + settings.display.height = height; InitRenderApi(); mainui_init(); diff --git a/shell/libretro/libretro.cpp b/shell/libretro/libretro.cpp index 7f0d27171..1e668ad9b 100644 --- a/shell/libretro/libretro.cpp +++ b/shell/libretro/libretro.cpp @@ -549,7 +549,7 @@ static void update_variables(bool first_startup) if (!first_startup && previous_renderer != config::RendererType) { rend_term_renderer(); rend_init_renderer(); - dc_resize_renderer(); + rend_resize_renderer(); } if (first_startup) @@ -803,14 +803,14 @@ static void update_variables(bool first_startup) retro_system_av_info avinfo; setAVInfo(avinfo); environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &avinfo); - dc_resize_renderer(); + rend_resize_renderer(); } else if (prevFramebufferWidth != framebufferWidth || prevFramebufferHeight != framebufferHeight || geometryChanged) { retro_game_geometry geometry; setGameGeometry(geometry); environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &geometry); - dc_resize_renderer(); + rend_resize_renderer(); } } } @@ -928,7 +928,7 @@ static void context_reset() rend_term_renderer(); theGLContext.Init(); rend_init_renderer(); - dc_resize_renderer(); + rend_resize_renderer(); } static void context_destroy() @@ -1383,7 +1383,7 @@ static void retro_vk_context_reset() theVulkanContext.Init((retro_hw_render_interface_vulkan *)vulkan); rend_term_renderer(); rend_init_renderer(); - dc_resize_renderer(); + rend_resize_renderer(); } static void retro_vk_context_destroy()