EGL: Add support for EGL_ANGLE_platform_angle
From upstream: 0dea8a4441.
This commit is contained in:
parent
ce262f810d
commit
973d98457f
@ -2105,8 +2105,34 @@ const char* _glfwPlatformGetClipboardString(void)
|
|||||||
return _glfw.ns.clipboardString;
|
return _glfw.ns.clipboardString;
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLenum _glfwPlatformGetEGLPlatform(void)
|
EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs)
|
||||||
{
|
{
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle)
|
||||||
|
{
|
||||||
|
int type = 0;
|
||||||
|
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle_opengl)
|
||||||
|
{
|
||||||
|
if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_OPENGL)
|
||||||
|
type = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle_metal)
|
||||||
|
{
|
||||||
|
if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_METAL)
|
||||||
|
type = EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
{
|
||||||
|
*attribs = calloc(3, sizeof(EGLint));
|
||||||
|
(*attribs)[0] = EGL_PLATFORM_ANGLE_TYPE_ANGLE;
|
||||||
|
(*attribs)[1] = type;
|
||||||
|
(*attribs)[2] = EGL_NONE;
|
||||||
|
return EGL_PLATFORM_ANGLE_ANGLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
glfw/egl_context.c
vendored
21
glfw/egl_context.c
vendored
@ -273,6 +273,7 @@ static void destroyContextEGL(_GLFWwindow* window)
|
|||||||
bool _glfwInitEGL(void)
|
bool _glfwInitEGL(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
EGLint* attribs = NULL;
|
||||||
const char* extensions;
|
const char* extensions;
|
||||||
const char* sonames[] =
|
const char* sonames[] =
|
||||||
{
|
{
|
||||||
@ -364,6 +365,16 @@ bool _glfwInitEGL(void)
|
|||||||
_glfwStringInExtensionString("EGL_EXT_platform_x11", extensions);
|
_glfwStringInExtensionString("EGL_EXT_platform_x11", extensions);
|
||||||
_glfw.egl.EXT_platform_wayland =
|
_glfw.egl.EXT_platform_wayland =
|
||||||
_glfwStringInExtensionString("EGL_EXT_platform_wayland", extensions);
|
_glfwStringInExtensionString("EGL_EXT_platform_wayland", extensions);
|
||||||
|
_glfw.egl.ANGLE_platform_angle =
|
||||||
|
_glfwStringInExtensionString("EGL_ANGLE_platform_angle", extensions);
|
||||||
|
_glfw.egl.ANGLE_platform_angle_opengl =
|
||||||
|
_glfwStringInExtensionString("EGL_ANGLE_platform_angle_opengl", extensions);
|
||||||
|
_glfw.egl.ANGLE_platform_angle_d3d =
|
||||||
|
_glfwStringInExtensionString("EGL_ANGLE_platform_angle_d3d", extensions);
|
||||||
|
_glfw.egl.ANGLE_platform_angle_vulkan =
|
||||||
|
_glfwStringInExtensionString("EGL_ANGLE_platform_angle_vulkan", extensions);
|
||||||
|
_glfw.egl.ANGLE_platform_angle_metal =
|
||||||
|
_glfwStringInExtensionString("EGL_ANGLE_platform_angle_metal", extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_glfw.egl.EXT_platform_base)
|
if (_glfw.egl.EXT_platform_base)
|
||||||
@ -374,17 +385,19 @@ bool _glfwInitEGL(void)
|
|||||||
eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
|
eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
|
||||||
}
|
}
|
||||||
|
|
||||||
_glfw.egl.platform = _glfwPlatformGetEGLPlatform();
|
_glfw.egl.platform = _glfwPlatformGetEGLPlatform(&attribs);
|
||||||
if (_glfw.egl.platform)
|
if (_glfw.egl.platform)
|
||||||
{
|
{
|
||||||
_glfw.egl.display =
|
_glfw.egl.display =
|
||||||
eglGetPlatformDisplayEXT(_glfw.egl.platform,
|
eglGetPlatformDisplayEXT(_glfw.egl.platform,
|
||||||
_glfwPlatformGetEGLNativeDisplay(),
|
_glfwPlatformGetEGLNativeDisplay(),
|
||||||
NULL);
|
attribs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_glfw.egl.display = eglGetDisplay(_glfwPlatformGetEGLNativeDisplay());
|
_glfw.egl.display = eglGetDisplay(_glfwPlatformGetEGLNativeDisplay());
|
||||||
|
|
||||||
|
free(attribs);
|
||||||
|
|
||||||
if (_glfw.egl.display == EGL_NO_DISPLAY)
|
if (_glfw.egl.display == EGL_NO_DISPLAY)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_API_UNAVAILABLE,
|
_glfwInputError(GLFW_API_UNAVAILABLE,
|
||||||
@ -589,7 +602,9 @@ bool _glfwCreateContextEGL(_GLFWwindow* window,
|
|||||||
setAttrib(EGL_NONE, EGL_NONE);
|
setAttrib(EGL_NONE, EGL_NONE);
|
||||||
|
|
||||||
native = _glfwPlatformGetEGLNativeWindow(window);
|
native = _glfwPlatformGetEGLNativeWindow(window);
|
||||||
if (_glfw.egl.platform)
|
// HACK: ANGLE does not implement eglCreatePlatformWindowSurfaceEXT
|
||||||
|
// despite reporting EGL_EXT_platform_base
|
||||||
|
if (_glfw.egl.platform && _glfw.egl.platform != EGL_PLATFORM_ANGLE_ANGLE)
|
||||||
{
|
{
|
||||||
window->context.egl.surface =
|
window->context.egl.surface =
|
||||||
eglCreatePlatformWindowSurfaceEXT(_glfw.egl.display, config, native, attribs);
|
eglCreatePlatformWindowSurfaceEXT(_glfw.egl.display, config, native, attribs);
|
||||||
|
|||||||
14
glfw/egl_context.h
vendored
14
glfw/egl_context.h
vendored
@ -94,6 +94,15 @@
|
|||||||
#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098
|
#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098
|
||||||
#define EGL_PLATFORM_X11_EXT 0x31d5
|
#define EGL_PLATFORM_X11_EXT 0x31d5
|
||||||
#define EGL_PLATFORM_WAYLAND_EXT 0x31d8
|
#define EGL_PLATFORM_WAYLAND_EXT 0x31d8
|
||||||
|
#define EGL_PLATFORM_ANGLE_ANGLE 0x3202
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320d
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320e
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE 0x3450
|
||||||
|
#define EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE 0x3489
|
||||||
|
#define EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE 0x348f
|
||||||
|
|
||||||
typedef int EGLint;
|
typedef int EGLint;
|
||||||
typedef unsigned int EGLBoolean;
|
typedef unsigned int EGLBoolean;
|
||||||
@ -177,6 +186,11 @@ typedef struct _GLFWlibraryEGL
|
|||||||
bool EXT_platform_base;
|
bool EXT_platform_base;
|
||||||
bool EXT_platform_x11;
|
bool EXT_platform_x11;
|
||||||
bool EXT_platform_wayland;
|
bool EXT_platform_wayland;
|
||||||
|
bool ANGLE_platform_angle;
|
||||||
|
bool ANGLE_platform_angle_opengl;
|
||||||
|
bool ANGLE_platform_angle_d3d;
|
||||||
|
bool ANGLE_platform_angle_vulkan;
|
||||||
|
bool ANGLE_platform_angle_metal;
|
||||||
|
|
||||||
void* handle;
|
void* handle;
|
||||||
|
|
||||||
|
|||||||
17
glfw/glfw3.h
vendored
17
glfw/glfw3.h
vendored
@ -1147,6 +1147,14 @@ extern "C" {
|
|||||||
#define GLFW_EGL_CONTEXT_API 0x00036002
|
#define GLFW_EGL_CONTEXT_API 0x00036002
|
||||||
#define GLFW_OSMESA_CONTEXT_API 0x00036003
|
#define GLFW_OSMESA_CONTEXT_API 0x00036003
|
||||||
|
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_NONE 0x00037001
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_OPENGL 0x00037002
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_OPENGLES 0x00037003
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_D3D9 0x00037004
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_D3D11 0x00037005
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_VULKAN 0x00037007
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_METAL 0x00037008
|
||||||
|
|
||||||
/*! @defgroup shapes Standard cursor shapes
|
/*! @defgroup shapes Standard cursor shapes
|
||||||
* @brief Standard system cursor shapes.
|
* @brief Standard system cursor shapes.
|
||||||
*
|
*
|
||||||
@ -1180,8 +1188,13 @@ typedef enum {
|
|||||||
* Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS).
|
* Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS).
|
||||||
*/
|
*/
|
||||||
#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001
|
#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001
|
||||||
#define GLFW_DEBUG_KEYBOARD 0x00050002
|
/*! @brief ANGLE rendering backend init hint.
|
||||||
#define GLFW_ENABLE_JOYSTICKS 0x00050003
|
*
|
||||||
|
* ANGLE rendering backend [init hint](@ref GLFW_ANGLE_PLATFORM_TYPE_hint).
|
||||||
|
*/
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE 0x00050002
|
||||||
|
#define GLFW_DEBUG_KEYBOARD 0x00050003
|
||||||
|
#define GLFW_ENABLE_JOYSTICKS 0x00050004
|
||||||
/*! @brief macOS specific init hint.
|
/*! @brief macOS specific init hint.
|
||||||
*
|
*
|
||||||
* macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint).
|
* macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint).
|
||||||
|
|||||||
4
glfw/init.c
vendored
4
glfw/init.c
vendored
@ -53,6 +53,7 @@ static GLFWerrorfun _glfwErrorCallback;
|
|||||||
static _GLFWinitconfig _glfwInitHints =
|
static _GLFWinitconfig _glfwInitHints =
|
||||||
{
|
{
|
||||||
true, // hat buttons
|
true, // hat buttons
|
||||||
|
GLFW_ANGLE_PLATFORM_TYPE_NONE, // ANGLE backend
|
||||||
false, // debug keyboard
|
false, // debug keyboard
|
||||||
true, // enable joystick
|
true, // enable joystick
|
||||||
{
|
{
|
||||||
@ -281,6 +282,9 @@ GLFWAPI void glfwInitHint(int hint, int value)
|
|||||||
case GLFW_JOYSTICK_HAT_BUTTONS:
|
case GLFW_JOYSTICK_HAT_BUTTONS:
|
||||||
_glfwInitHints.hatButtons = value;
|
_glfwInitHints.hatButtons = value;
|
||||||
return;
|
return;
|
||||||
|
case GLFW_ANGLE_PLATFORM_TYPE:
|
||||||
|
_glfwInitHints.angleType = value;
|
||||||
|
return;
|
||||||
case GLFW_DEBUG_KEYBOARD:
|
case GLFW_DEBUG_KEYBOARD:
|
||||||
_glfwInitHints.debugKeyboard = value;
|
_glfwInitHints.debugKeyboard = value;
|
||||||
return;
|
return;
|
||||||
|
|||||||
3
glfw/internal.h
vendored
3
glfw/internal.h
vendored
@ -274,6 +274,7 @@ struct _GLFWerror
|
|||||||
struct _GLFWinitconfig
|
struct _GLFWinitconfig
|
||||||
{
|
{
|
||||||
bool hatButtons;
|
bool hatButtons;
|
||||||
|
int angleType;
|
||||||
bool debugKeyboard;
|
bool debugKeyboard;
|
||||||
bool enableJoysticks;
|
bool enableJoysticks;
|
||||||
struct {
|
struct {
|
||||||
@ -724,7 +725,7 @@ void _glfwPlatformWaitEvents(void);
|
|||||||
void _glfwPlatformWaitEventsTimeout(monotonic_t timeout);
|
void _glfwPlatformWaitEventsTimeout(monotonic_t timeout);
|
||||||
void _glfwPlatformPostEmptyEvent(void);
|
void _glfwPlatformPostEmptyEvent(void);
|
||||||
|
|
||||||
EGLenum _glfwPlatformGetEGLPlatform(void);
|
EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs);
|
||||||
EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void);
|
EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void);
|
||||||
EGLNativeWindowType _glfwPlatformGetEGLNativeWindow(_GLFWwindow* window);
|
EGLNativeWindowType _glfwPlatformGetEGLNativeWindow(_GLFWwindow* window);
|
||||||
|
|
||||||
|
|||||||
2
glfw/wl_window.c
vendored
2
glfw/wl_window.c
vendored
@ -2014,7 +2014,7 @@ const char* _glfwPlatformGetPrimarySelectionString(void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLenum _glfwPlatformGetEGLPlatform(void)
|
EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs UNUSED)
|
||||||
{
|
{
|
||||||
if (_glfw.egl.EXT_platform_base && _glfw.egl.EXT_platform_wayland)
|
if (_glfw.egl.EXT_platform_base && _glfw.egl.EXT_platform_wayland)
|
||||||
return EGL_PLATFORM_WAYLAND_EXT;
|
return EGL_PLATFORM_WAYLAND_EXT;
|
||||||
|
|||||||
34
glfw/x11_window.c
vendored
34
glfw/x11_window.c
vendored
@ -2855,12 +2855,40 @@ const char* _glfwPlatformGetPrimarySelectionString(void)
|
|||||||
return getSelectionString(_glfw.x11.PRIMARY);
|
return getSelectionString(_glfw.x11.PRIMARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLenum _glfwPlatformGetEGLPlatform(void)
|
EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs)
|
||||||
{
|
{
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle)
|
||||||
|
{
|
||||||
|
int type = 0;
|
||||||
|
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle_opengl)
|
||||||
|
{
|
||||||
|
if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_OPENGL)
|
||||||
|
type = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_glfw.egl.ANGLE_platform_angle_vulkan)
|
||||||
|
{
|
||||||
|
if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_VULKAN)
|
||||||
|
type = EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
{
|
||||||
|
*attribs = calloc(5, sizeof(EGLint));
|
||||||
|
(*attribs)[0] = EGL_PLATFORM_ANGLE_TYPE_ANGLE;
|
||||||
|
(*attribs)[1] = type;
|
||||||
|
(*attribs)[2] = EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE;
|
||||||
|
(*attribs)[3] = EGL_PLATFORM_X11_EXT;
|
||||||
|
(*attribs)[4] = EGL_NONE;
|
||||||
|
return EGL_PLATFORM_ANGLE_ANGLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_glfw.egl.EXT_platform_base && _glfw.egl.EXT_platform_x11)
|
if (_glfw.egl.EXT_platform_base && _glfw.egl.EXT_platform_x11)
|
||||||
return EGL_PLATFORM_X11_EXT;
|
return EGL_PLATFORM_X11_EXT;
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void)
|
EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void)
|
||||||
|
|||||||
17
kitty/glfw-wrapper.h
generated
17
kitty/glfw-wrapper.h
generated
@ -885,6 +885,14 @@
|
|||||||
#define GLFW_EGL_CONTEXT_API 0x00036002
|
#define GLFW_EGL_CONTEXT_API 0x00036002
|
||||||
#define GLFW_OSMESA_CONTEXT_API 0x00036003
|
#define GLFW_OSMESA_CONTEXT_API 0x00036003
|
||||||
|
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_NONE 0x00037001
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_OPENGL 0x00037002
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_OPENGLES 0x00037003
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_D3D9 0x00037004
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_D3D11 0x00037005
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_VULKAN 0x00037007
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE_METAL 0x00037008
|
||||||
|
|
||||||
/*! @defgroup shapes Standard cursor shapes
|
/*! @defgroup shapes Standard cursor shapes
|
||||||
* @brief Standard system cursor shapes.
|
* @brief Standard system cursor shapes.
|
||||||
*
|
*
|
||||||
@ -918,8 +926,13 @@ typedef enum {
|
|||||||
* Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS).
|
* Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS).
|
||||||
*/
|
*/
|
||||||
#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001
|
#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001
|
||||||
#define GLFW_DEBUG_KEYBOARD 0x00050002
|
/*! @brief ANGLE rendering backend init hint.
|
||||||
#define GLFW_ENABLE_JOYSTICKS 0x00050003
|
*
|
||||||
|
* ANGLE rendering backend [init hint](@ref GLFW_ANGLE_PLATFORM_TYPE_hint).
|
||||||
|
*/
|
||||||
|
#define GLFW_ANGLE_PLATFORM_TYPE 0x00050002
|
||||||
|
#define GLFW_DEBUG_KEYBOARD 0x00050003
|
||||||
|
#define GLFW_ENABLE_JOYSTICKS 0x00050004
|
||||||
/*! @brief macOS specific init hint.
|
/*! @brief macOS specific init hint.
|
||||||
*
|
*
|
||||||
* macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint).
|
* macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint).
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user