diff --git a/miniwin/CMakeLists.txt b/miniwin/CMakeLists.txt index 1ed5e909..41b2b2fb 100644 --- a/miniwin/CMakeLists.txt +++ b/miniwin/CMakeLists.txt @@ -20,41 +20,42 @@ add_library(miniwin STATIC EXCLUDE_FROM_ALL src/d3drm/d3drmtexture.cpp src/d3drm/d3drmviewport.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 $<$:DEBUG> ) -find_package(OpenGL) -if(OpenGL_FOUND AND NOT WINDOWS_STORE) - message(STATUS "Found OpenGL: enabling OpenGL 1.x renderer") - target_sources(miniwin PRIVATE - src/d3drm/backends/opengl1/actual.cpp - src/d3drm/backends/opengl1/renderer.cpp - ) - target_compile_definitions(miniwin PRIVATE USE_OPENGL1) - target_link_libraries(miniwin PRIVATE OpenGL::GL) -else() - message(STATUS "🧩 OpenGL 1.x support not enabled — needs OpenGL") +list(APPEND GRAPHICS_BACKENDS USE_SOFTWARE_RENDER) +list(APPEND GRAPHICS_BACKENDS USE_SDL_GPU) + +if(NOT WINDOWS_STORE) + find_package(OpenGL) + if(OpenGL_FOUND) + message(STATUS "Found OpenGL: enabling OpenGL 1.x renderer") + target_sources(miniwin PRIVATE + src/d3drm/backends/opengl1/actual.cpp + src/d3drm/backends/opengl1/renderer.cpp + ) + 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() -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(ISLE_DEBUG) @@ -68,6 +69,7 @@ if(NINTENDO_3DS) ctr_add_shader_library(vshader src/d3drm/backends/citro3d/vshader.v.pica) dkp_add_embedded_binary_library(3ds_shaders vshader) target_link_libraries(miniwin PRIVATE ${CITRO3D_LIBRARY} 3ds_shaders) + list(APPEND GRAPHICS_BACKENDS USE_CITRO3D) else() message(STATUS "🧩 Citro3D support not enabled") endif() @@ -79,12 +81,26 @@ if(WIN32 AND NOT WINDOWS_STORE) src/d3drm/backends/directx9/renderer.cpp ) target_link_libraries(miniwin PRIVATE d3d9) + list(APPEND GRAPHICS_BACKENDS USE_DIRECTX9) endif() if(WINDOWS_STORE) add_compile_definitions(WINDOWS_STORE) 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_include_directories(miniwin @@ -96,6 +112,9 @@ target_link_libraries(miniwin PUBLIC miniwin-headers) target_link_libraries(miniwin PRIVATE SDL3::SDL3) +target_compile_definitions(miniwin PUBLIC ${GRAPHICS_BACKENDS}) + + # Shader stuff set(shader_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/src/d3drm/backends/sdl3gpu/shaders/src") diff --git a/miniwin/src/d3drm/d3drm.cpp b/miniwin/src/d3drm/d3drm.cpp index 1088a943..d53f0c2f 100644 --- a/miniwin/src/d3drm/d3drm.cpp +++ b/miniwin/src/d3drm/d3drm.cpp @@ -13,14 +13,18 @@ #ifdef USE_OPENGLES2 #include "d3drmrenderer_opengles2.h" #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D #include "d3drmrenderer_citro3d.h" #endif -#ifdef _WIN32 +#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 #include "d3drmtexture_impl.h" #include "d3drmviewport_impl.h" #include "ddraw_impl.h" @@ -146,12 +150,17 @@ HRESULT Direct3DRMImpl::CreateDeviceFromSurface( DDSDesc.dwSize = sizeof(DDSURFACEDESC); surface->GetSurfaceDesc(&DDSDesc); - if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { + if (false); +#ifdef USE_SDL_GPU + else if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { DDRenderer = Direct3DRMSDL3GPURenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } +#endif +#ifdef USE_SOFTWARE_RENDER else if (SDL_memcmp(&guid, &SOFTWARE_GUID, sizeof(GUID)) == 0) { DDRenderer = new Direct3DRMSoftwareRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } +#endif #ifdef USE_OPENGLES2 else if (SDL_memcmp(&guid, &OpenGLES2_GUID, sizeof(GUID)) == 0) { DDRenderer = OpenGLES2Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); @@ -162,12 +171,12 @@ HRESULT Direct3DRMImpl::CreateDeviceFromSurface( DDRenderer = OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D else if (SDL_memcmp(&guid, &Citro3D_GUID, sizeof(GUID)) == 0) { DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) { DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } diff --git a/miniwin/src/ddraw/ddraw.cpp b/miniwin/src/ddraw/ddraw.cpp index d2ce8743..86a3522a 100644 --- a/miniwin/src/ddraw/ddraw.cpp +++ b/miniwin/src/ddraw/ddraw.cpp @@ -4,14 +4,18 @@ #ifdef USE_OPENGLES2 #include "d3drmrenderer_opengles2.h" #endif -#ifdef __3DS__ +#ifdef USE_CITRO3D #include "d3drmrenderer_citro3d.h" #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#if 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 #include "ddpalette_impl.h" #include "ddraw_impl.h" #include "ddsurface_impl.h" @@ -232,21 +236,24 @@ void EnumDevice( HRESULT DirectDrawImpl::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 __3DS__ +#ifdef USE_CITRO3D Citro3DRenderer_EnumDevice(cb, ctx); #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 DirectX9Renderer_EnumDevice(cb, ctx); #endif +#ifdef USE_SOFTWARE_RENDER Direct3DRMSoftware_EnumDevice(cb, ctx); - +#endif return S_OK; } @@ -343,9 +350,12 @@ HRESULT DirectDrawImpl::CreateDevice( DDSDesc.dwSize = sizeof(DDSURFACEDESC); pBackBuffer->GetSurfaceDesc(&DDSDesc); - if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { + if (false); +#ifdef USE_SDL_GPU + else if (SDL_memcmp(&guid, &SDL3_GPU_GUID, sizeof(GUID)) == 0) { DDRenderer = Direct3DRMSDL3GPURenderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } +#endif #ifdef USE_OPENGLES2 else if (SDL_memcmp(&guid, &OpenGLES2_GUID, sizeof(GUID)) == 0) { DDRenderer = OpenGLES2Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); @@ -361,14 +371,16 @@ HRESULT DirectDrawImpl::CreateDevice( DDRenderer = new Citro3DRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif -#if defined(_WIN32) && !defined(WINDOWS_STORE) +#ifdef USE_DIRECTX9 else if (SDL_memcmp(&guid, &DirectX9_GUID, sizeof(GUID)) == 0) { DDRenderer = DirectX9Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); } #endif +#ifdef USE_SOFTWARE_RENDER else if (SDL_memcmp(&guid, &SOFTWARE_GUID, sizeof(GUID)) == 0) { DDRenderer = new Direct3DRMSoftwareRenderer(DDSDesc.dwWidth, DDSDesc.dwHeight); } +#endif else { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Device GUID not recognized"); return E_NOINTERFACE;