Browse Source

Fix #13807 (#16539)

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
pull/16593/head
Dragorn421 2 years ago
committed by GitHub
parent
commit
0400665c57
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 13
      src/Avalonia.OpenGL/GlBasicInfoInterface.cs
  2. 3
      src/Avalonia.OpenGL/GlInterface.cs

13
src/Avalonia.OpenGL/GlBasicInfoInterface.cs

@ -25,6 +25,9 @@ namespace Avalonia.OpenGL
[GetProcAddress("glGetStringi")]
public partial IntPtr GetStringiNative(int v, int v1);
[GetProcAddress("glGetError")]
public partial int GetError();
public string? GetString(int v)
{
var ptr = GetStringNative(v);
@ -43,9 +46,19 @@ namespace Avalonia.OpenGL
public List<string> GetExtensions()
{
// On some (generally older) versions of OpenGL, GL_EXTENSIONS is a space-separated list of available extensions.
// For example:
// https://learn.microsoft.com/en-us/windows/win32/opengl/glgetstring
// https://docs.gl/gl2/glGetString
// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGetString.xhtml
var sp = GetString(GlConsts.GL_EXTENSIONS);
if (sp != null)
return sp.Split(' ').ToList();
// The OpenGL version is not such a version.
// Consume the GL_INVALID_ENUM error from the GetString call above.
GetError();
// For other (generally newer) versions
GetIntegerv(GlConsts.GL_NUM_EXTENSIONS, out int count);
var rv = new List<string>(count);
for (var c = 0; c < count; c++)

3
src/Avalonia.OpenGL/GlInterface.cs

@ -52,9 +52,6 @@ namespace Avalonia.OpenGL
public IntPtr GetProcAddress(string proc) => _getProcAddress(proc);
[GetProcAddress("glGetError")]
public partial int GetError();
[GetProcAddress("glClearStencil")]
public partial void ClearStencil(int s);

Loading…
Cancel
Save