From fb8fe5def423a3edfd1e02570f241c2ca0e325fb Mon Sep 17 00:00:00 2001
From: VoxelTek <53562267+VoxelTek@users.noreply.github.com>
Date: Wed, 2 Jul 2025 17:10:44 +1000
Subject: [PATCH 1/4] Update tab order (#474)
---
CONFIG/res/maindialog.ui | 2 ++
1 file changed, 2 insertions(+)
diff --git a/CONFIG/res/maindialog.ui b/CONFIG/res/maindialog.ui
index c2760e7c..c2d429ae 100644
--- a/CONFIG/res/maindialog.ui
+++ b/CONFIG/res/maindialog.ui
@@ -562,8 +562,10 @@
sound3DCheckBox
musicCheckBox
joystickCheckBox
+ fullscreenCheckBox
devicesList
okButton
+ launchButton
cancelButton
From cca65ba17827d86f966faeb91327301c6feb10bf Mon Sep 17 00:00:00 2001
From: Anders Jenbo
Date: Wed, 2 Jul 2025 12:07:04 +0200
Subject: [PATCH 2/4] Remove unused function from OpenGL renderer (#475)
---
miniwin/src/d3drm/backends/opengl1/actual.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/miniwin/src/d3drm/backends/opengl1/actual.cpp b/miniwin/src/d3drm/backends/opengl1/actual.cpp
index e809f7e5..9a2e314d 100644
--- a/miniwin/src/d3drm/backends/opengl1/actual.cpp
+++ b/miniwin/src/d3drm/backends/opengl1/actual.cpp
@@ -321,9 +321,6 @@ void GL11_Draw2DImage(
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- GLint boundTexture = 0;
- glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundTexture);
-
float u1 = srcRect.x / cache.width;
float v1 = srcRect.y / cache.height;
float u2 = (srcRect.x + srcRect.w) / cache.width;
From 55c13cd1409537a5ada30876579e0d78b6239830 Mon Sep 17 00:00:00 2001
From: Anders Jenbo
Date: Wed, 2 Jul 2025 12:07:20 +0200
Subject: [PATCH 3/4] Implement dithering where relevant (#473)
---
miniwin/src/d3drm/backends/citro3d/renderer.cpp | 4 ++++
miniwin/src/d3drm/backends/directx9/renderer.cpp | 4 ++++
miniwin/src/d3drm/backends/opengl1/actual.cpp | 10 ++++++++++
miniwin/src/d3drm/backends/opengl1/actual.h | 1 +
miniwin/src/d3drm/backends/opengl1/renderer.cpp | 5 +++++
miniwin/src/d3drm/backends/opengles2/renderer.cpp | 10 ++++++++++
miniwin/src/d3drm/backends/sdl3gpu/renderer.cpp | 4 ++++
miniwin/src/d3drm/backends/software/renderer.cpp | 4 ++++
miniwin/src/d3drm/d3drmdevice.cpp | 4 +---
miniwin/src/internal/d3drmrenderer.h | 1 +
miniwin/src/internal/d3drmrenderer_citro3d.h | 1 +
miniwin/src/internal/d3drmrenderer_directx9.h | 1 +
miniwin/src/internal/d3drmrenderer_opengl1.h | 1 +
miniwin/src/internal/d3drmrenderer_opengles2.h | 1 +
miniwin/src/internal/d3drmrenderer_sdl3gpu.h | 1 +
miniwin/src/internal/d3drmrenderer_software.h | 1 +
16 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/miniwin/src/d3drm/backends/citro3d/renderer.cpp b/miniwin/src/d3drm/backends/citro3d/renderer.cpp
index f9167401..72d729bc 100644
--- a/miniwin/src/d3drm/backends/citro3d/renderer.cpp
+++ b/miniwin/src/d3drm/backends/citro3d/renderer.cpp
@@ -600,6 +600,10 @@ void Citro3DRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, con
C3D_ImmDrawEnd();
}
+void Citro3DRenderer::SetDither(bool dither)
+{
+}
+
void Citro3DRenderer::Download(SDL_Surface* target)
{
MINIWIN_NOT_IMPLEMENTED();
diff --git a/miniwin/src/d3drm/backends/directx9/renderer.cpp b/miniwin/src/d3drm/backends/directx9/renderer.cpp
index 5917cd07..2701528b 100644
--- a/miniwin/src/d3drm/backends/directx9/renderer.cpp
+++ b/miniwin/src/d3drm/backends/directx9/renderer.cpp
@@ -278,6 +278,10 @@ void DirectX9Renderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, co
Actual_Draw2DImage(m_textures[textureId].dxTexture, srcRect, dstRect);
}
+void DirectX9Renderer::SetDither(bool dither)
+{
+}
+
void DirectX9Renderer::Download(SDL_Surface* target)
{
Actual_Download(target);
diff --git a/miniwin/src/d3drm/backends/opengl1/actual.cpp b/miniwin/src/d3drm/backends/opengl1/actual.cpp
index 9a2e314d..b9234c8e 100644
--- a/miniwin/src/d3drm/backends/opengl1/actual.cpp
+++ b/miniwin/src/d3drm/backends/opengl1/actual.cpp
@@ -354,3 +354,13 @@ void GL11_Download(SDL_Surface* target)
glFinish();
glReadPixels(0, 0, target->w, target->h, GL_RGBA, GL_UNSIGNED_BYTE, target->pixels);
}
+
+void GL11_SetDither(bool dither)
+{
+ if (dither) {
+ glEnable(GL_DITHER);
+ }
+ else {
+ glDisable(GL_DITHER);
+ }
+}
diff --git a/miniwin/src/d3drm/backends/opengl1/actual.h b/miniwin/src/d3drm/backends/opengl1/actual.h
index 1d5e407d..7a6a4432 100644
--- a/miniwin/src/d3drm/backends/opengl1/actual.h
+++ b/miniwin/src/d3drm/backends/opengl1/actual.h
@@ -87,4 +87,5 @@ void GL11_Draw2DImage(
float bottom,
float top
);
+void GL11_SetDither(bool dither);
void GL11_Download(SDL_Surface* target);
diff --git a/miniwin/src/d3drm/backends/opengl1/renderer.cpp b/miniwin/src/d3drm/backends/opengl1/renderer.cpp
index 2e18b38a..4c6aacf9 100644
--- a/miniwin/src/d3drm/backends/opengl1/renderer.cpp
+++ b/miniwin/src/d3drm/backends/opengl1/renderer.cpp
@@ -384,6 +384,11 @@ void OpenGL1Renderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, con
GL11_Draw2DImage(m_textures[textureId], srcRect, dstRect, left, right, bottom, top);
}
+void OpenGL1Renderer::SetDither(bool dither)
+{
+ GL11_SetDither(dither);
+}
+
void OpenGL1Renderer::Download(SDL_Surface* target)
{
GL11_Download(m_renderedImage);
diff --git a/miniwin/src/d3drm/backends/opengles2/renderer.cpp b/miniwin/src/d3drm/backends/opengles2/renderer.cpp
index 9cb8455c..28466bea 100644
--- a/miniwin/src/d3drm/backends/opengles2/renderer.cpp
+++ b/miniwin/src/d3drm/backends/opengles2/renderer.cpp
@@ -706,3 +706,13 @@ void OpenGLES2Renderer::Download(SDL_Surface* target)
SDL_DestroySurface(bufferClone);
}
+
+void OpenGLES2Renderer::SetDither(bool dither)
+{
+ if (dither) {
+ glEnable(GL_DITHER);
+ }
+ else {
+ glDisable(GL_DITHER);
+ }
+}
diff --git a/miniwin/src/d3drm/backends/sdl3gpu/renderer.cpp b/miniwin/src/d3drm/backends/sdl3gpu/renderer.cpp
index 98704c66..69b326b6 100644
--- a/miniwin/src/d3drm/backends/sdl3gpu/renderer.cpp
+++ b/miniwin/src/d3drm/backends/sdl3gpu/renderer.cpp
@@ -942,6 +942,10 @@ void Direct3DRMSDL3GPURenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& sr
SDL_SetGPUScissor(m_renderPass, &fullViewport);
}
+void Direct3DRMSDL3GPURenderer::SetDither(bool dither)
+{
+}
+
void Direct3DRMSDL3GPURenderer::Download(SDL_Surface* target)
{
if (!m_cmdbuf) {
diff --git a/miniwin/src/d3drm/backends/software/renderer.cpp b/miniwin/src/d3drm/backends/software/renderer.cpp
index 02c5bfc0..b4fab671 100644
--- a/miniwin/src/d3drm/backends/software/renderer.cpp
+++ b/miniwin/src/d3drm/backends/software/renderer.cpp
@@ -788,6 +788,10 @@ void Direct3DRMSoftwareRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& s
SDL_LockSurface(surface);
}
+void Direct3DRMSoftwareRenderer::SetDither(bool dither)
+{
+}
+
void Direct3DRMSoftwareRenderer::Download(SDL_Surface* target)
{
SDL_Rect srcRect = {
diff --git a/miniwin/src/d3drm/d3drmdevice.cpp b/miniwin/src/d3drm/d3drmdevice.cpp
index b738c809..822f412e 100644
--- a/miniwin/src/d3drm/d3drmdevice.cpp
+++ b/miniwin/src/d3drm/d3drmdevice.cpp
@@ -84,9 +84,7 @@ D3DRMRENDERQUALITY Direct3DRMDevice2Impl::GetQuality()
HRESULT Direct3DRMDevice2Impl::SetDither(BOOL dither)
{
- if (dither) {
- MINIWIN_NOT_IMPLEMENTED();
- }
+ m_renderer->SetDither(dither);
return DD_OK;
}
diff --git a/miniwin/src/internal/d3drmrenderer.h b/miniwin/src/internal/d3drmrenderer.h
index 259b20eb..a871bb26 100644
--- a/miniwin/src/internal/d3drmrenderer.h
+++ b/miniwin/src/internal/d3drmrenderer.h
@@ -53,6 +53,7 @@ class Direct3DRMRenderer : public IDirect3DDevice2 {
virtual void Flip() = 0;
virtual void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) = 0;
virtual void Download(SDL_Surface* target) = 0;
+ virtual void SetDither(bool dither) = 0;
protected:
int m_width, m_height;
diff --git a/miniwin/src/internal/d3drmrenderer_citro3d.h b/miniwin/src/internal/d3drmrenderer_citro3d.h
index 426f75c8..af91b3dc 100644
--- a/miniwin/src/internal/d3drmrenderer_citro3d.h
+++ b/miniwin/src/internal/d3drmrenderer_citro3d.h
@@ -50,6 +50,7 @@ class Citro3DRenderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
diff --git a/miniwin/src/internal/d3drmrenderer_directx9.h b/miniwin/src/internal/d3drmrenderer_directx9.h
index 900bbe03..18ac126f 100644
--- a/miniwin/src/internal/d3drmrenderer_directx9.h
+++ b/miniwin/src/internal/d3drmrenderer_directx9.h
@@ -36,6 +36,7 @@ class DirectX9Renderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
diff --git a/miniwin/src/internal/d3drmrenderer_opengl1.h b/miniwin/src/internal/d3drmrenderer_opengl1.h
index dce25e6b..656a964b 100644
--- a/miniwin/src/internal/d3drmrenderer_opengl1.h
+++ b/miniwin/src/internal/d3drmrenderer_opengl1.h
@@ -36,6 +36,7 @@ class OpenGL1Renderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
diff --git a/miniwin/src/internal/d3drmrenderer_opengles2.h b/miniwin/src/internal/d3drmrenderer_opengles2.h
index f5d62579..0aaec63d 100644
--- a/miniwin/src/internal/d3drmrenderer_opengles2.h
+++ b/miniwin/src/internal/d3drmrenderer_opengles2.h
@@ -57,6 +57,7 @@ class OpenGLES2Renderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
diff --git a/miniwin/src/internal/d3drmrenderer_sdl3gpu.h b/miniwin/src/internal/d3drmrenderer_sdl3gpu.h
index 02ec05d0..cf68a8c4 100644
--- a/miniwin/src/internal/d3drmrenderer_sdl3gpu.h
+++ b/miniwin/src/internal/d3drmrenderer_sdl3gpu.h
@@ -67,6 +67,7 @@ class Direct3DRMSDL3GPURenderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
Direct3DRMSDL3GPURenderer(
diff --git a/miniwin/src/internal/d3drmrenderer_software.h b/miniwin/src/internal/d3drmrenderer_software.h
index 87715999..91abac32 100644
--- a/miniwin/src/internal/d3drmrenderer_software.h
+++ b/miniwin/src/internal/d3drmrenderer_software.h
@@ -49,6 +49,7 @@ class Direct3DRMSoftwareRenderer : public Direct3DRMRenderer {
void Flip() override;
void Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) override;
void Download(SDL_Surface* target) override;
+ void SetDither(bool dither) override;
private:
void ClearZBuffer();
From 4c0035fa74966fc20fd2122d1222b45a6b8e71c0 Mon Sep 17 00:00:00 2001
From: Anders Jenbo
Date: Wed, 2 Jul 2025 14:50:45 +0200
Subject: [PATCH 4/4] Stip out more unnecessary OpenGL calls (#476)
---
miniwin/src/d3drm/backends/opengl1/actual.cpp | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/miniwin/src/d3drm/backends/opengl1/actual.cpp b/miniwin/src/d3drm/backends/opengl1/actual.cpp
index b9234c8e..d75eb04e 100644
--- a/miniwin/src/d3drm/backends/opengl1/actual.cpp
+++ b/miniwin/src/d3drm/backends/opengl1/actual.cpp
@@ -130,8 +130,7 @@ void GL11_BeginFrame(const Matrix4x4* projection)
for (int i = 0; i < 8; ++i) {
glDisable(GL_LIGHT0 + i);
}
- const GLfloat zeroAmbient[4] = {0.f, 0.f, 0.f, 1.f};
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, zeroAmbient);
+
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
// Projection and view
@@ -145,7 +144,6 @@ void GL11_UploadLight(int lightIdx, GL11_BridgeSceneLight* l)
{
// Setup light
glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
glLoadIdentity();
GLenum lightId = GL_LIGHT0 + lightIdx++;
const FColor& c = l->color;
@@ -188,8 +186,6 @@ void GL11_UploadLight(int lightIdx, GL11_BridgeSceneLight* l)
glLightfv(lightId, GL_POSITION, pos);
}
glEnable(lightId);
-
- glPopMatrix();
}
void GL11_EnableTransparency()
@@ -273,8 +269,6 @@ void GL11_SubmitDraw(
glDrawElements(GL_TRIANGLES, static_cast(mesh.indices.size()), GL_UNSIGNED_SHORT, mesh.indices.data());
}
-
- glPopMatrix();
}
void GL11_Resize(int width, int height)
@@ -304,13 +298,11 @@ void GL11_Draw2DImage(
glDepthMask(GL_FALSE);
glMatrixMode(GL_PROJECTION);
- glPushMatrix();
glLoadIdentity();
glOrtho(left, right, bottom, top, -1, 1);
glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
glLoadIdentity();
glDisable(GL_LIGHTING);
@@ -344,9 +336,7 @@ void GL11_Draw2DImage(
// Restore state
glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
glMatrixMode(GL_PROJECTION);
- glPopMatrix();
}
void GL11_Download(SDL_Surface* target)