Add MSAA support to OpenGL 1.1 (#640)

This commit is contained in:
Anders Jenbo 2025-07-23 20:30:05 +02:00 committed by GitHub
parent a5a3c4ec83
commit a9db8d321e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 6 deletions

View File

@ -16,7 +16,7 @@ static_assert(sizeof(GL11_BridgeTexCoord) == sizeof(TexCoord), "GL11_BridgeTexCo
static_assert(sizeof(GL11_BridgeSceneLight) == sizeof(SceneLight), "GL11_BridgeSceneLight is wrong size"); static_assert(sizeof(GL11_BridgeSceneLight) == sizeof(SceneLight), "GL11_BridgeSceneLight is wrong size");
static_assert(sizeof(GL11_BridgeSceneVertex) == sizeof(D3DRMVERTEX), "GL11_BridgeSceneVertex is wrong size"); static_assert(sizeof(GL11_BridgeSceneVertex) == sizeof(D3DRMVERTEX), "GL11_BridgeSceneVertex is wrong size");
Direct3DRMRenderer* OpenGL1Renderer::Create(DWORD width, DWORD height) Direct3DRMRenderer* OpenGL1Renderer::Create(DWORD width, DWORD height, DWORD msaaSamples)
{ {
// We have to reset the attributes here after having enumerated the // We have to reset the attributes here after having enumerated the
// OpenGL ES 2.0 renderer, or else SDL gets very confused by SDL_GL_DEPTH_SIZE // OpenGL ES 2.0 renderer, or else SDL gets very confused by SDL_GL_DEPTH_SIZE
@ -28,6 +28,11 @@ Direct3DRMRenderer* OpenGL1Renderer::Create(DWORD width, DWORD height)
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
if (msaaSamples > 1) {
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaaSamples);
}
if (!DDWindow) { if (!DDWindow) {
SDL_Log("No window handler"); SDL_Log("No window handler");
return nullptr; return nullptr;

View File

@ -41,7 +41,7 @@ Direct3DRMRenderer* CreateDirect3DRMRenderer(
#endif #endif
#ifdef USE_OPENGL1 #ifdef USE_OPENGL1
if (SDL_memcmp(guid, &OpenGL1_GUID, sizeof(GUID)) == 0) { if (SDL_memcmp(guid, &OpenGL1_GUID, sizeof(GUID)) == 0) {
return OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight); return OpenGL1Renderer::Create(DDSDesc.dwWidth, DDSDesc.dwHeight, d3d->GetMSAASamples());
} }
#endif #endif
#ifdef USE_CITRO3D #ifdef USE_CITRO3D
@ -66,7 +66,7 @@ void Direct3DRMRenderer_EnumDevices(const IDirect3DMiniwin* d3d, LPD3DENUMDEVICE
OpenGLES3Renderer_EnumDevice(d3d, cb, ctx); OpenGLES3Renderer_EnumDevice(d3d, cb, ctx);
#endif #endif
#ifdef USE_OPENGL1 #ifdef USE_OPENGL1
OpenGL1Renderer_EnumDevice(cb, ctx); OpenGL1Renderer_EnumDevice(d3d, cb, ctx);
#endif #endif
#ifdef USE_CITRO3D #ifdef USE_CITRO3D
Citro3DRenderer_EnumDevice(cb, ctx); Citro3DRenderer_EnumDevice(cb, ctx);

View File

@ -11,7 +11,7 @@ DEFINE_GUID(OpenGL1_GUID, 0x682656F3, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x
class OpenGL1Renderer : public Direct3DRMRenderer { class OpenGL1Renderer : public Direct3DRMRenderer {
public: public:
static Direct3DRMRenderer* Create(DWORD width, DWORD height); static Direct3DRMRenderer* Create(DWORD width, DWORD height, DWORD msaaSamples);
OpenGL1Renderer(DWORD width, DWORD height, SDL_GLContext context); OpenGL1Renderer(DWORD width, DWORD height, SDL_GLContext context);
~OpenGL1Renderer() override; ~OpenGL1Renderer() override;
@ -54,9 +54,9 @@ class OpenGL1Renderer : public Direct3DRMRenderer {
ViewportTransform m_viewportTransform; ViewportTransform m_viewportTransform;
}; };
inline static void OpenGL1Renderer_EnumDevice(LPD3DENUMDEVICESCALLBACK cb, void* ctx) inline static void OpenGL1Renderer_EnumDevice(const IDirect3DMiniwin* d3d, LPD3DENUMDEVICESCALLBACK cb, void* ctx)
{ {
Direct3DRMRenderer* device = OpenGL1Renderer::Create(640, 480); Direct3DRMRenderer* device = OpenGL1Renderer::Create(640, 480, d3d->GetMSAASamples());
if (!device) { if (!device) {
return; return;
} }