put ifdefs around every d3drm backend so that any can be disabled (#569)

* put ifdefs around every d3drm backend so that any can be disabled

* make clang-format happy

* move backend selection and enum to its own functions
This commit is contained in:
olebeck 2025-07-10 18:19:21 +02:00 committed by GitHub
parent 28b026f605
commit b26a707db2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 133 additions and 124 deletions

View File

@ -19,42 +19,44 @@ add_library(miniwin STATIC EXCLUDE_FROM_ALL
src/d3drm/d3drmmesh.cpp src/d3drm/d3drmmesh.cpp
src/d3drm/d3drmtexture.cpp src/d3drm/d3drmtexture.cpp
src/d3drm/d3drmviewport.cpp src/d3drm/d3drmviewport.cpp
src/d3drm/d3drmrenderer.cpp
src/internal/meshutils.cpp src/internal/meshutils.cpp
# D3DRM backends
src/d3drm/backends/sdl3gpu/renderer.cpp
src/d3drm/backends/sdl3gpu/shaders/generated/ShaderIndex.cpp
src/d3drm/backends/software/renderer.cpp
) )
target_compile_definitions(miniwin PRIVATE target_compile_definitions(miniwin PRIVATE
$<$<CONFIG:Debug>:DEBUG> $<$<CONFIG:Debug>:DEBUG>
) )
find_package(OpenGL) list(APPEND GRAPHICS_BACKENDS USE_SOFTWARE_RENDER)
if(OpenGL_FOUND AND NOT WINDOWS_STORE) list(APPEND GRAPHICS_BACKENDS USE_SDL_GPU)
message(STATUS "Found OpenGL: enabling OpenGL 1.x renderer")
target_sources(miniwin PRIVATE if(NOT WINDOWS_STORE)
src/d3drm/backends/opengl1/actual.cpp find_package(OpenGL)
src/d3drm/backends/opengl1/renderer.cpp if(OpenGL_FOUND)
) message(STATUS "Found OpenGL: enabling OpenGL 1.x renderer")
target_compile_definitions(miniwin PRIVATE USE_OPENGL1) target_sources(miniwin PRIVATE
target_link_libraries(miniwin PRIVATE OpenGL::GL) src/d3drm/backends/opengl1/actual.cpp
else() src/d3drm/backends/opengl1/renderer.cpp
message(STATUS "🧩 OpenGL 1.x support not enabled — needs OpenGL") )
list(APPEND GRAPHICS_BACKENDS USE_OPENGL1)
target_link_libraries(miniwin PRIVATE OpenGL::GL)
else()
message(STATUS "🧩 OpenGL 1.x support not enabled — needs OpenGL")
endif()
find_library(OPENGL_ES2_LIBRARY NAMES GLESv2)
if(EMSCRIPTEN OR OPENGL_ES2_LIBRARY)
message(STATUS "Found OpenGL: enabling OpenGL ES 2.x renderer")
target_sources(miniwin PRIVATE src/d3drm/backends/opengles2/renderer.cpp)
list(APPEND GRAPHICS_BACKENDS USE_OPENGLES2)
if(OPENGL_ES2_LIBRARY)
target_link_libraries(miniwin PRIVATE ${OPENGL_ES2_LIBRARY})
endif()
else()
message(STATUS "🧩 OpenGL ES 2.x support not enabled")
endif()
endif() endif()
find_library(OPENGL_ES2_LIBRARY NAMES GLESv2)
if(EMSCRIPTEN OR OPENGL_ES2_LIBRARY AND NOT WINDOWS_STORE)
message(STATUS "Found OpenGL: enabling OpenGL ES 2.x renderer")
target_sources(miniwin PRIVATE src/d3drm/backends/opengles2/renderer.cpp)
target_compile_definitions(miniwin PRIVATE USE_OPENGLES2)
if(OPENGL_ES2_LIBRARY)
target_link_libraries(miniwin PRIVATE OpenGL::GL)
endif()
else()
message(STATUS "🧩 OpenGL ES 2.x support not enabled")
endif()
if(NINTENDO_3DS) if(NINTENDO_3DS)
if(ISLE_DEBUG) if(ISLE_DEBUG)
@ -68,6 +70,7 @@ if(NINTENDO_3DS)
ctr_add_shader_library(vshader src/d3drm/backends/citro3d/vshader.v.pica) ctr_add_shader_library(vshader src/d3drm/backends/citro3d/vshader.v.pica)
dkp_add_embedded_binary_library(3ds_shaders vshader) dkp_add_embedded_binary_library(3ds_shaders vshader)
target_link_libraries(miniwin PRIVATE ${CITRO3D_LIBRARY} 3ds_shaders) target_link_libraries(miniwin PRIVATE ${CITRO3D_LIBRARY} 3ds_shaders)
list(APPEND GRAPHICS_BACKENDS USE_CITRO3D)
else() else()
message(STATUS "🧩 Citro3D support not enabled") message(STATUS "🧩 Citro3D support not enabled")
endif() endif()
@ -79,12 +82,26 @@ if(WIN32 AND NOT WINDOWS_STORE)
src/d3drm/backends/directx9/renderer.cpp src/d3drm/backends/directx9/renderer.cpp
) )
target_link_libraries(miniwin PRIVATE d3d9) target_link_libraries(miniwin PRIVATE d3d9)
list(APPEND GRAPHICS_BACKENDS USE_DIRECTX9)
endif() endif()
if(WINDOWS_STORE) if(WINDOWS_STORE)
add_compile_definitions(WINDOWS_STORE) add_compile_definitions(WINDOWS_STORE)
endif() endif()
if(USE_SDL_GPU IN_LIST GRAPHICS_BACKENDS)
target_sources(miniwin PRIVATE
src/d3drm/backends/sdl3gpu/renderer.cpp
src/d3drm/backends/sdl3gpu/shaders/generated/ShaderIndex.cpp
)
endif()
if(USE_SOFTWARE_RENDER IN_LIST GRAPHICS_BACKENDS)
target_sources(miniwin PRIVATE
src/d3drm/backends/software/renderer.cpp
)
endif()
target_compile_definitions(miniwin PUBLIC MINIWIN) target_compile_definitions(miniwin PUBLIC MINIWIN)
target_include_directories(miniwin target_include_directories(miniwin
@ -96,6 +113,9 @@ target_link_libraries(miniwin PUBLIC miniwin-headers)
target_link_libraries(miniwin PRIVATE SDL3::SDL3) target_link_libraries(miniwin PRIVATE SDL3::SDL3)
target_compile_definitions(miniwin PUBLIC ${GRAPHICS_BACKENDS})
# Shader stuff # Shader stuff
set(shader_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/src/d3drm/backends/sdl3gpu/shaders/src") set(shader_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/src/d3drm/backends/sdl3gpu/shaders/src")

View File

@ -7,20 +7,6 @@
#include "d3drmmesh_impl.h" #include "d3drmmesh_impl.h"
#include "d3drmobject_impl.h" #include "d3drmobject_impl.h"
#include "d3drmrenderer.h" #include "d3drmrenderer.h"
#ifdef USE_OPENGL1
#include "d3drmrenderer_opengl1.h"
#endif
#ifdef USE_OPENGLES2
#include "d3drmrenderer_opengles2.h"
#endif
#ifdef __3DS__
#include "d3drmrenderer_citro3d.h"
#endif
#ifdef _WIN32
#include "d3drmrenderer_directx9.h"
#endif
#include "d3drmrenderer_sdl3gpu.h"
#include "d3drmrenderer_software.h"
#include "d3drmtexture_impl.h" #include "d3drmtexture_impl.h"
#include "d3drmviewport_impl.h" #include "d3drmviewport_impl.h"
#include "ddraw_impl.h" #include "ddraw_impl.h"
@ -146,33 +132,8 @@ HRESULT Direct3DRMImpl::CreateDeviceFromSurface(
DDSDesc.dwSize = sizeof(DDSURFACEDESC); DDSDesc.dwSize = sizeof(DDSURFACEDESC);
surface->GetSurfaceDesc(&DDSDesc); surface->GetSurfaceDesc(&DDSDesc);
if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { DDRenderer = CreateDirect3DRMRenderer(DDSDesc, guid);
DDRenderer = Direct3DRMSDL3GPURenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); if (!DDRenderer) {
}
else if (SDL_memcmp(&guid, &SOFTWARE_GUID, sizeof(GUID)) == 0) {
DDRenderer = new Direct3DRMSoftwareRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#ifdef USE_OPENGLES2
else if (SDL_memcmp(&guid, &OpenGLES2_GUID, sizeof(GUID)) == 0) {
DDRenderer = OpenGLES2Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_OPENGL1
else if (SDL_memcmp(&guid, &OpenGL1_GUID, sizeof(GUID)) == 0) {
DDRenderer = OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef __3DS__
else if (SDL_memcmp(&guid, &Citro3D_GUID, sizeof(GUID)) == 0) {
DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#if defined(_WIN32) && !defined(WINDOWS_STORE)
else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) {
DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Device GUID not recognized"); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Device GUID not recognized");
return E_NOINTERFACE; return E_NOINTERFACE;
} }

View File

@ -0,0 +1,76 @@
#include "d3drmrenderer.h"
#ifdef USE_OPENGL1
#include "d3drmrenderer_opengl1.h"
#endif
#ifdef USE_OPENGLES2
#include "d3drmrenderer_opengles2.h"
#endif
#ifdef USE_CITRO3D
#include "d3drmrenderer_citro3d.h"
#endif
#ifdef USE_DIRECTX9
#include "d3drmrenderer_directx9.h"
#endif
#ifdef USE_SDL_GPU
#include "d3drmrenderer_sdl3gpu.h"
#endif
#ifdef USE_SOFTWARE_RENDER
#include "d3drmrenderer_software.h"
#endif
Direct3DRMRenderer* CreateDirect3DRMRenderer(const DDSURFACEDESC& DDSDesc, const GUID* guid)
{
#ifdef USE_SDL_GPU
if (SDL_memcmp(guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) {
return Direct3DRMSDL3GPURenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_SOFTWARE_RENDER
if (SDL_memcmp(guid, &SOFTWARE_GUID, sizeof(GUID)) == 0) {
return new Direct3DRMSoftwareRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_OPENGLES2
if (SDL_memcmp(guid, &OpenGLES2_GUID, sizeof(GUID)) == 0) {
return OpenGLES2Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_OPENGL1
if (SDL_memcmp(guid, &OpenGL1_GUID, sizeof(GUID)) == 0) {
return OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_CITRO3D
if (SDL_memcmp(guid, &Citro3D_GUID, sizeof(GUID)) == 0) {
return new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_DIRECTX9
if (SDL_memcmp(guid, &DirectX9_GUID, sizeof(GUID)) == 0) {
return DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
return nullptr;
}
void Direct3DRMRenderer_EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx)
{
#ifdef USE_SDL_GPU
Direct3DRMSDL3GPU_EnumDevice(cb, ctx);
#endif
#ifdef USE_OPENGLES2
OpenGLES2Renderer_EnumDevice(cb, ctx);
#endif
#ifdef USE_OPENGL1
OpenGL1Renderer_EnumDevice(cb, ctx);
#endif
#ifdef USE_CITRO3D
Citro3DRenderer_EnumDevice(cb, ctx);
#endif
#ifdef USE_DIRECTX9
DirectX9Renderer_EnumDevice(cb, ctx);
#endif
#ifdef USE_SOFTWARE_RENDER
Direct3DRMSoftware_EnumDevice(cb, ctx);
#endif
}

View File

@ -1,17 +1,5 @@
#ifdef USE_OPENGL1
#include "d3drmrenderer_opengl1.h" #include "d3drmrenderer.h"
#endif
#ifdef USE_OPENGLES2
#include "d3drmrenderer_opengles2.h"
#endif
#ifdef __3DS__
#include "d3drmrenderer_citro3d.h"
#endif
#if defined(_WIN32) && !defined(WINDOWS_STORE)
#include "d3drmrenderer_directx9.h"
#endif
#include "d3drmrenderer_sdl3gpu.h"
#include "d3drmrenderer_software.h"
#include "ddpalette_impl.h" #include "ddpalette_impl.h"
#include "ddraw_impl.h" #include "ddraw_impl.h"
#include "ddsurface_impl.h" #include "ddsurface_impl.h"
@ -232,21 +220,7 @@ void EnumDevice(
HRESULT DirectDrawImpl::EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) HRESULT DirectDrawImpl::EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx)
{ {
Direct3DRMSDL3GPU_EnumDevice(cb, ctx); Direct3DRMRenderer_EnumDevices(cb, ctx);
#ifdef USE_OPENGLES2
OpenGLES2Renderer_EnumDevice(cb, ctx);
#endif
#ifdef USE_OPENGL1
OpenGL1Renderer_EnumDevice(cb, ctx);
#endif
#ifdef __3DS__
Citro3DRenderer_EnumDevice(cb, ctx);
#endif
#if defined(_WIN32) && !defined(WINDOWS_STORE)
DirectX9Renderer_EnumDevice(cb, ctx);
#endif
Direct3DRMSoftware_EnumDevice(cb, ctx);
return S_OK; return S_OK;
} }
@ -343,33 +317,8 @@ HRESULT DirectDrawImpl::CreateDevice(
DDSDesc.dwSize = sizeof(DDSURFACEDESC); DDSDesc.dwSize = sizeof(DDSURFACEDESC);
pBackBuffer->GetSurfaceDesc(&DDSDesc); pBackBuffer->GetSurfaceDesc(&DDSDesc);
if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { DDRenderer = CreateDirect3DRMRenderer(DDSDesc, &guid);
DDRenderer = Direct3DRMSDL3GPURenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); if (!DDRenderer) {
}
#ifdef USE_OPENGLES2
else if (SDL_memcmp(&guid, &OpenGLES2_GUID, sizeof(GUID)) == 0) {
DDRenderer = OpenGLES2Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef USE_OPENGL1
else if (SDL_memcmp(&guid, &OpenGL1_GUID, sizeof(GUID)) == 0) {
DDRenderer = OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#ifdef __3DS__
else if (SDL_memcmp(&guid, &Citro3D_GUID, sizeof(GUID)) == 0) {
DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
#if defined(_WIN32) && !defined(WINDOWS_STORE)
else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) {
DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
#endif
else if (SDL_memcmp(&guid, &SOFTWARE_GUID, sizeof(GUID)) == 0) {
DDRenderer = new Direct3DRMSoftwareRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight);
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Device GUID not recognized"); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Device GUID not recognized");
return E_NOINTERFACE; return E_NOINTERFACE;
} }

View File

@ -60,3 +60,6 @@ protected:
int m_virtualWidth, m_virtualHeight; int m_virtualWidth, m_virtualHeight;
ViewportTransform m_viewportTransform; ViewportTransform m_viewportTransform;
}; };
Direct3DRMRenderer* CreateDirect3DRMRenderer(const DDSURFACEDESC& DDSDesc, const GUID* guid);
void Direct3DRMRenderer_EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx);