Workaround for GLES 2.0 hardware
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -40,6 +40,7 @@ Also thanks to:
|
|||||||
* Biofreak
|
* Biofreak
|
||||||
* Braxton Williams (Buddytex)
|
* Braxton Williams (Buddytex)
|
||||||
* Brendan Gluth (Mechanical_Man)
|
* Brendan Gluth (Mechanical_Man)
|
||||||
|
* Brent Gardner (bggardner)
|
||||||
* Bryan Wilbur
|
* Bryan Wilbur
|
||||||
* Bugra Cuhadaroglu (BugraC)
|
* Bugra Cuhadaroglu (BugraC)
|
||||||
* Chris Cameron (Vesuvian)
|
* Chris Cameron (Vesuvian)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj" />
|
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj" />
|
||||||
<PackageReference Include="OpenRA-Freetype6" Version="1.0.4" />
|
<PackageReference Include="OpenRA-Freetype6" Version="1.0.4" />
|
||||||
<PackageReference Include="OpenRA-OpenAL-CS" Version="1.0.16" />
|
<PackageReference Include="OpenRA-OpenAL-CS" Version="1.0.16" />
|
||||||
<PackageReference Include="OpenRA-SDL2-CS" Version="1.0.26" />
|
<PackageReference Include="OpenRA-SDL2-CS" Version="1.0.27" />
|
||||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
|
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
|
||||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
|
||||||
<AdditionalFiles Include="../stylecop.json" />
|
<AdditionalFiles Include="../stylecop.json" />
|
||||||
|
|||||||
@@ -145,8 +145,6 @@ namespace OpenRA.Platforms.Default
|
|||||||
if (Platform.CurrentPlatform == PlatformType.Windows)
|
if (Platform.CurrentPlatform == PlatformType.Windows)
|
||||||
SetProcessDPIAware();
|
SetProcessDPIAware();
|
||||||
|
|
||||||
SDL.SDL_Init(SDL.SDL_INIT_NOPARACHUTE | SDL.SDL_INIT_VIDEO);
|
|
||||||
|
|
||||||
// Decide which OpenGL profile to use.
|
// Decide which OpenGL profile to use.
|
||||||
// We first need to query the available profiles on Windows/Linux.
|
// We first need to query the available profiles on Windows/Linux.
|
||||||
// On macOS, known/consistent OpenGL support is provided by the OS.
|
// On macOS, known/consistent OpenGL support is provided by the OS.
|
||||||
@@ -161,6 +159,10 @@ namespace OpenRA.Platforms.Default
|
|||||||
throw new InvalidOperationException("No supported OpenGL profiles were found.");
|
throw new InvalidOperationException("No supported OpenGL profiles were found.");
|
||||||
|
|
||||||
profile = supportedProfiles.Contains(requestProfile) ? requestProfile : supportedProfiles.First();
|
profile = supportedProfiles.Contains(requestProfile) ? requestProfile : supportedProfiles.First();
|
||||||
|
|
||||||
|
// Note: This must be called after the CanCreateGLWindow checks above,
|
||||||
|
// which needs to create and destroy its own SDL contexts as a workaround for specific buggy drivers
|
||||||
|
SDL.SDL_Init(SDL.SDL_INIT_VIDEO);
|
||||||
SetSDLAttributes(profile);
|
SetSDLAttributes(profile);
|
||||||
|
|
||||||
Console.WriteLine("Using SDL 2 with OpenGL ({0}) renderer", profile);
|
Console.WriteLine("Using SDL 2 with OpenGL ({0}) renderer", profile);
|
||||||
@@ -487,6 +489,9 @@ namespace OpenRA.Platforms.Default
|
|||||||
static bool CanCreateGLWindow(GLProfile profile)
|
static bool CanCreateGLWindow(GLProfile profile)
|
||||||
{
|
{
|
||||||
// Implementation inspired by TestIndividualGLVersion from Veldrid
|
// Implementation inspired by TestIndividualGLVersion from Veldrid
|
||||||
|
|
||||||
|
// Need to create and destroy its own SDL contexts as a workaround for specific buggy drivers
|
||||||
|
SDL.SDL_Init(SDL.SDL_INIT_VIDEO);
|
||||||
SetSDLAttributes(profile);
|
SetSDLAttributes(profile);
|
||||||
|
|
||||||
var flags = SDL.SDL_WindowFlags.SDL_WINDOW_HIDDEN | SDL.SDL_WindowFlags.SDL_WINDOW_OPENGL;
|
var flags = SDL.SDL_WindowFlags.SDL_WINDOW_HIDDEN | SDL.SDL_WindowFlags.SDL_WINDOW_OPENGL;
|
||||||
@@ -494,6 +499,7 @@ namespace OpenRA.Platforms.Default
|
|||||||
if (window == IntPtr.Zero || !string.IsNullOrEmpty(SDL.SDL_GetError()))
|
if (window == IntPtr.Zero || !string.IsNullOrEmpty(SDL.SDL_GetError()))
|
||||||
{
|
{
|
||||||
SDL.SDL_ClearError();
|
SDL.SDL_ClearError();
|
||||||
|
SDL.SDL_Quit();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,11 +508,13 @@ namespace OpenRA.Platforms.Default
|
|||||||
{
|
{
|
||||||
SDL.SDL_ClearError();
|
SDL.SDL_ClearError();
|
||||||
SDL.SDL_DestroyWindow(window);
|
SDL.SDL_DestroyWindow(window);
|
||||||
|
SDL.SDL_Quit();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL.SDL_GL_DeleteContext(context);
|
SDL.SDL_GL_DeleteContext(context);
|
||||||
SDL.SDL_DestroyWindow(window);
|
SDL.SDL_DestroyWindow(window);
|
||||||
|
SDL.SDL_Quit();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user