From 0488bbd33aa049668d14ba78c317a6ad23b6729b Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri, 31 May 2024 20:48:16 -0700 Subject: [PATCH] Fix mupen grabbing an OpenGL context based on whatever current version/flag attributes were present This is global state that gets mucked by us since we also use SDL2 to handle OpenGL context management, Rice/Glide/Glidemk2 don't like core contexts due to them using old deprecated functionality --- Assets/dll/mupen64plus.dll | Bin 445952 -> 445952 bytes .../src/api/vidext_sdl2_compat.h | 4 ++ .../Controls/OpenGLControl.cs | 2 +- .../OpenGL/SDL2OpenGLContext.cs | 39 +++++++----------- .../GraphicsImplementations/OpenGLProvider.cs | 4 +- .../Interfaces/IOpenGLProvider.cs | 5 +-- .../Consoles/Nintendo/3DS/Encore.cs | 2 +- .../Consoles/Nintendo/NDS/MelonDS.cs | 4 +- 8 files changed, 28 insertions(+), 32 deletions(-) diff --git a/Assets/dll/mupen64plus.dll b/Assets/dll/mupen64plus.dll index 33c0df9adfbc13a0d737f8cc2bf9c239a08e9771..1bc2bcc28efc2b42d058d40305083f26618fd171 100644 GIT binary patch delta 9379 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 diff --git a/libmupen64plus/mupen64plus-core/src/api/vidext_sdl2_compat.h b/libmupen64plus/mupen64plus-core/src/api/vidext_sdl2_compat.h index 53da2bf49b..6d8f781e35 100644 --- a/libmupen64plus/mupen64plus-core/src/api/vidext_sdl2_compat.h +++ b/libmupen64plus/mupen64plus-core/src/api/vidext_sdl2_compat.h @@ -636,6 +636,10 @@ SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) /* If we're in OpenGL mode, just create a stub surface and we're done! */ if (flags & SDL_OPENGL) { + // make sure to set version/flag attributes, those might have been changed from the defaults + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0); SDL_VideoContext = SDL_GL_CreateContext(SDL_VideoWindow); if (!SDL_VideoContext) { return NULL; diff --git a/src/BizHawk.Bizware.Graphics.Controls/Controls/OpenGLControl.cs b/src/BizHawk.Bizware.Graphics.Controls/Controls/OpenGLControl.cs index 107759e1f7..c9c5a6c354 100644 --- a/src/BizHawk.Bizware.Graphics.Controls/Controls/OpenGLControl.cs +++ b/src/BizHawk.Bizware.Graphics.Controls/Controls/OpenGLControl.cs @@ -41,7 +41,7 @@ namespace BizHawk.Bizware.Graphics.Controls protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); - Context = new(Handle, 3, 2, true, false); + Context = new(Handle, 3, 2, true); } protected override void OnHandleDestroyed(EventArgs e) diff --git a/src/BizHawk.Bizware.Graphics/OpenGL/SDL2OpenGLContext.cs b/src/BizHawk.Bizware.Graphics/OpenGL/SDL2OpenGLContext.cs index 3ae9573750..af66b7706b 100644 --- a/src/BizHawk.Bizware.Graphics/OpenGL/SDL2OpenGLContext.cs +++ b/src/BizHawk.Bizware.Graphics/OpenGL/SDL2OpenGLContext.cs @@ -30,17 +30,6 @@ namespace BizHawk.Bizware.Graphics throw new($"Could not load default OpenGL library! SDL Error: {SDL_GetError()}"); } - // set some sensible defaults - SDL_GL_ResetAttributes(); - if (SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_RED_SIZE, 8) is not 0 - || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_GREEN_SIZE, 8) is not 0 - || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_BLUE_SIZE, 8) is not 0 - || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_ALPHA_SIZE, 0) is not 0 - || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_DOUBLEBUFFER, 1) is not 0) - { - throw new($"Could not set GL attributes! SDL Error: {SDL_GetError()}"); - } - // we will be turning a foreign window into an SDL window // we need this so it knows that it is capable of using OpenGL functions SDL_SetHint(SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL, "1"); @@ -58,8 +47,19 @@ namespace BizHawk.Bizware.Graphics private IntPtr _sdlWindow; private IntPtr _glContext; - private void CreateContext(int majorVersion, int minorVersion, bool coreProfile, bool forwardCompatible) + private void CreateContext(int majorVersion, int minorVersion, bool coreProfile) { + // set some sensible defaults + SDL_GL_ResetAttributes(); + if (SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_RED_SIZE, 8) is not 0 + || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_GREEN_SIZE, 8) is not 0 + || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_BLUE_SIZE, 8) is not 0 + || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_ALPHA_SIZE, 0) is not 0 + || SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_DOUBLEBUFFER, 1) is not 0) + { + throw new($"Could not set GL attributes! SDL Error: {SDL_GetError()}"); + } + if (SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_CONTEXT_MAJOR_VERSION, majorVersion) != 0) { throw new($"Could not set GL Major Version! SDL Error: {SDL_GetError()}"); @@ -70,13 +70,6 @@ namespace BizHawk.Bizware.Graphics throw new($"Could not set GL Minor Version! SDL Error: {SDL_GetError()}"); } - // TODO: Debug flag / debug callback with DEBUG build - if (SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_CONTEXT_FLAGS, forwardCompatible - ? (int)SDL_GLcontext.SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG : 0) != 0) - { - throw new($"Could not set GL Context Flags! SDL Error: {SDL_GetError()}"); - } - #if DEBUG_OPENGL if (SDL_GL_SetAttribute(SDL_GLattr.SDL_GL_CONTEXT_FLAGS, (int)SDL_GLcontext.SDL_GL_CONTEXT_DEBUG_FLAG) != 0) { @@ -111,7 +104,7 @@ namespace BizHawk.Bizware.Graphics #endif } - public SDL2OpenGLContext(IntPtr nativeWindowhandle, int majorVersion, int minorVersion, bool coreProfile, bool forwardCompatible) + public SDL2OpenGLContext(IntPtr nativeWindowhandle, int majorVersion, int minorVersion, bool coreProfile) { _sdlWindow = SDL_CreateWindowFrom(nativeWindowhandle); if (_sdlWindow == IntPtr.Zero) @@ -125,10 +118,10 @@ namespace BizHawk.Bizware.Graphics throw new($"Could not set share context attribute! SDL Error: {SDL_GetError()}"); } - CreateContext(majorVersion, minorVersion, coreProfile, forwardCompatible); + CreateContext(majorVersion, minorVersion, coreProfile); } - public SDL2OpenGLContext(int majorVersion, int minorVersion, bool coreProfile, bool forwardCompatible) + public SDL2OpenGLContext(int majorVersion, int minorVersion, bool coreProfile) { _sdlWindow = SDL_CreateWindow(null, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1, 1, SDL_WindowFlags.SDL_WINDOW_OPENGL | SDL_WindowFlags.SDL_WINDOW_HIDDEN); @@ -144,7 +137,7 @@ namespace BizHawk.Bizware.Graphics throw new($"Could not set share context attribute! SDL Error: {SDL_GetError()}"); } - CreateContext(majorVersion, minorVersion, coreProfile, forwardCompatible); + CreateContext(majorVersion, minorVersion, coreProfile); } public void Dispose() diff --git a/src/BizHawk.Client.EmuHawk/GraphicsImplementations/OpenGLProvider.cs b/src/BizHawk.Client.EmuHawk/GraphicsImplementations/OpenGLProvider.cs index 117e66c71f..c8418da1e0 100644 --- a/src/BizHawk.Client.EmuHawk/GraphicsImplementations/OpenGLProvider.cs +++ b/src/BizHawk.Client.EmuHawk/GraphicsImplementations/OpenGLProvider.cs @@ -13,8 +13,8 @@ namespace BizHawk.Client.EmuHawk public bool SupportsGLVersion(int major, int minor) => OpenGLVersion.SupportsVersion(major, minor); - public object RequestGLContext(int major, int minor, bool coreProfile, bool forwardCompatible) - => new SDL2OpenGLContext(major, minor, coreProfile, forwardCompatible); + public object RequestGLContext(int major, int minor, bool coreProfile) + => new SDL2OpenGLContext(major, minor, coreProfile); public void ReleaseGLContext(object context) => ((SDL2OpenGLContext)context).Dispose(); diff --git a/src/BizHawk.Emulation.Common/Interfaces/IOpenGLProvider.cs b/src/BizHawk.Emulation.Common/Interfaces/IOpenGLProvider.cs index 3d498f5264..61e0e74935 100644 --- a/src/BizHawk.Emulation.Common/Interfaces/IOpenGLProvider.cs +++ b/src/BizHawk.Emulation.Common/Interfaces/IOpenGLProvider.cs @@ -14,13 +14,12 @@ namespace BizHawk.Emulation.Common public bool SupportsGLVersion(int major, int minor); /// - /// Requests an OpenGL context with specified major / minor + /// Requests an OpenGL context with specified major / minor version /// The core profile can be requested (otherwise, the compatibility profile will be used) - /// The forward compatible bit can also be requested /// The requested OpenGL context will be shared with the current context /// Note: creating a context implicitly makes that created context current /// - public object RequestGLContext(int major, int minor, bool coreProfile, bool forwardCompatible); + public object RequestGLContext(int major, int minor, bool coreProfile); /// /// Frees this OpenGL context diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/3DS/Encore.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/3DS/Encore.cs index ac709d26b7..1b4c176ad4 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/3DS/Encore.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/3DS/Encore.cs @@ -169,7 +169,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.N3DS private IntPtr RequestGLContextCallback() { - var context = _openGLProvider.RequestGLContext(4, 3, true, false); + var context = _openGLProvider.RequestGLContext(4, 3, true); _glContexts.Add(context); var handle = GCHandle.Alloc(context, GCHandleType.Weak); return GCHandle.ToIntPtr(handle); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs index 634d11137b..1d882581fb 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs @@ -162,7 +162,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS } else { - _glContext = _openGLProvider.RequestGLContext(majorGlVersion, minorGlVersion, true, false); + _glContext = _openGLProvider.RequestGLContext(majorGlVersion, minorGlVersion, true); } } @@ -174,7 +174,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS } else { - _glContext = _openGLProvider.RequestGLContext(3, 1, true, false); + _glContext = _openGLProvider.RequestGLContext(3, 1, true); } }