mirror of
https://github.com/glfw/glfw.git
synced 2025-06-08 08:45:02 +00:00
Merge 0a898628ff
into 3a60992a41
This commit is contained in:
commit
8c53ffa71f
@ -437,6 +437,18 @@ Context release behaviors are described in detail by the
|
|||||||
[GL_KHR_context_flush_control](https://www.opengl.org/registry/specs/KHR/context_flush_control.txt)
|
[GL_KHR_context_flush_control](https://www.opengl.org/registry/specs/KHR/context_flush_control.txt)
|
||||||
extension.
|
extension.
|
||||||
|
|
||||||
|
@anchor GLFW_CONTEXT_PRIORITY_hint
|
||||||
|
__GLFW_CONTEXT_PRIORITY__ specifies the context priority to be used by the
|
||||||
|
context. Possible values are one of `GLFW_PRIORITY_LOW`, `GLFW_PRIORITY_MEDIUM`,
|
||||||
|
`GLFW_PRIORITY_HIGH` or `GLFW_PRIORITY_REALTIME`. This functionality is currently
|
||||||
|
only implemented for the EGL context creating API.
|
||||||
|
|
||||||
|
Context priorities are described in detail by the
|
||||||
|
[EGL_NV_context_priority_realtime](https://www.khronos.org/registry/EGL/extensions/NV/EGL_NV_context_priority_realtime.txt)
|
||||||
|
and
|
||||||
|
[EGL_IMG_context_priority](https://www.khronos.org/registry/EGL/extensions/IMG/EGL_IMG_context_priority.txt)
|
||||||
|
extensions.
|
||||||
|
|
||||||
@anchor GLFW_CONTEXT_NO_ERROR_hint
|
@anchor GLFW_CONTEXT_NO_ERROR_hint
|
||||||
__GLFW_CONTEXT_NO_ERROR__ specifies whether errors should be generated by the
|
__GLFW_CONTEXT_NO_ERROR__ specifies whether errors should be generated by the
|
||||||
context. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. If enabled,
|
context. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. If enabled,
|
||||||
@ -538,6 +550,7 @@ GLFW_CONTEXT_VERSION_MAJOR | 1 | Any valid major ve
|
|||||||
GLFW_CONTEXT_VERSION_MINOR | 0 | Any valid minor version number of the chosen client API
|
GLFW_CONTEXT_VERSION_MINOR | 0 | Any valid minor version number of the chosen client API
|
||||||
GLFW_CONTEXT_ROBUSTNESS | `GLFW_NO_ROBUSTNESS` | `GLFW_NO_ROBUSTNESS`, `GLFW_NO_RESET_NOTIFICATION` or `GLFW_LOSE_CONTEXT_ON_RESET`
|
GLFW_CONTEXT_ROBUSTNESS | `GLFW_NO_ROBUSTNESS` | `GLFW_NO_ROBUSTNESS`, `GLFW_NO_RESET_NOTIFICATION` or `GLFW_LOSE_CONTEXT_ON_RESET`
|
||||||
GLFW_CONTEXT_RELEASE_BEHAVIOR | `GLFW_ANY_RELEASE_BEHAVIOR` | `GLFW_ANY_RELEASE_BEHAVIOR`, `GLFW_RELEASE_BEHAVIOR_FLUSH` or `GLFW_RELEASE_BEHAVIOR_NONE`
|
GLFW_CONTEXT_RELEASE_BEHAVIOR | `GLFW_ANY_RELEASE_BEHAVIOR` | `GLFW_ANY_RELEASE_BEHAVIOR`, `GLFW_RELEASE_BEHAVIOR_FLUSH` or `GLFW_RELEASE_BEHAVIOR_NONE`
|
||||||
|
GLFW_CONTEXT_PRIORITY | `GLFW_PRIORITY_MEDIUM` | `GLFW_PRIORITY_LOW`, `GLFW_PRIORITY_MEDIUM`, `GLFW_PRIORITY_HIGH`, `GLFW_PRIORITY_REALTIME`
|
||||||
GLFW_OPENGL_FORWARD_COMPAT | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE`
|
GLFW_OPENGL_FORWARD_COMPAT | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE`
|
||||||
GLFW_CONTEXT_DEBUG | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE`
|
GLFW_CONTEXT_DEBUG | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE`
|
||||||
GLFW_OPENGL_PROFILE | `GLFW_OPENGL_ANY_PROFILE` | `GLFW_OPENGL_ANY_PROFILE`, `GLFW_OPENGL_COMPAT_PROFILE` or `GLFW_OPENGL_CORE_PROFILE`
|
GLFW_OPENGL_PROFILE | `GLFW_OPENGL_ANY_PROFILE` | `GLFW_OPENGL_ANY_PROFILE`, `GLFW_OPENGL_COMPAT_PROFILE` or `GLFW_OPENGL_CORE_PROFILE`
|
||||||
|
@ -1084,6 +1084,11 @@ extern "C" {
|
|||||||
* [window hint](@ref GLFW_SCALE_TO_MONITOR).
|
* [window hint](@ref GLFW_SCALE_TO_MONITOR).
|
||||||
*/
|
*/
|
||||||
#define GLFW_SCALE_TO_MONITOR 0x0002200C
|
#define GLFW_SCALE_TO_MONITOR 0x0002200C
|
||||||
|
/*! @brief Context priority.
|
||||||
|
*
|
||||||
|
* Context priority hint [hint](@ref GLFW_CONTEXT_PRIORITY_hint).
|
||||||
|
*/
|
||||||
|
#define GLFW_CONTEXT_PRIORITY 0x0002200D
|
||||||
/*! @brief macOS specific
|
/*! @brief macOS specific
|
||||||
* [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint).
|
* [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint).
|
||||||
*/
|
*/
|
||||||
@ -1152,6 +1157,11 @@ extern "C" {
|
|||||||
#define GLFW_ANGLE_PLATFORM_TYPE_VULKAN 0x00037007
|
#define GLFW_ANGLE_PLATFORM_TYPE_VULKAN 0x00037007
|
||||||
#define GLFW_ANGLE_PLATFORM_TYPE_METAL 0x00037008
|
#define GLFW_ANGLE_PLATFORM_TYPE_METAL 0x00037008
|
||||||
|
|
||||||
|
#define GLFW_PRIORITY_LOW 0x00038001
|
||||||
|
#define GLFW_PRIORITY_MEDIUM 0x00038002
|
||||||
|
#define GLFW_PRIORITY_HIGH 0x00038003
|
||||||
|
#define GLFW_PRIORITY_REALTIME 0x00038004
|
||||||
|
|
||||||
/*! @defgroup shapes Standard cursor shapes
|
/*! @defgroup shapes Standard cursor shapes
|
||||||
* @brief Standard system cursor shapes.
|
* @brief Standard system cursor shapes.
|
||||||
*
|
*
|
||||||
|
@ -170,6 +170,20 @@ GLFWbool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctxconfig->priority)
|
||||||
|
{
|
||||||
|
if (ctxconfig->priority != GLFW_PRIORITY_LOW &&
|
||||||
|
ctxconfig->priority != GLFW_PRIORITY_MEDIUM &&
|
||||||
|
ctxconfig->priority != GLFW_PRIORITY_HIGH &&
|
||||||
|
ctxconfig->priority != GLFW_PRIORITY_REALTIME)
|
||||||
|
{
|
||||||
|
_glfwInputError(GLFW_INVALID_ENUM,
|
||||||
|
"Invalid context priority 0x%08X",
|
||||||
|
ctxconfig->priority);
|
||||||
|
return GLFW_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,6 +485,8 @@ GLFWbool _glfwInitEGL(void)
|
|||||||
extensionSupportedEGL("EGL_KHR_context_flush_control");
|
extensionSupportedEGL("EGL_KHR_context_flush_control");
|
||||||
_glfw.egl.EXT_present_opaque =
|
_glfw.egl.EXT_present_opaque =
|
||||||
extensionSupportedEGL("EGL_EXT_present_opaque");
|
extensionSupportedEGL("EGL_EXT_present_opaque");
|
||||||
|
_glfw.egl.IMG_context_priority =
|
||||||
|
extensionSupportedEGL("EGL_IMG_context_priority");
|
||||||
|
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
@ -634,6 +636,24 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_glfw.egl.IMG_context_priority && ctxconfig->priority != GLFW_PRIORITY_MEDIUM)
|
||||||
|
{
|
||||||
|
if (ctxconfig->priority == GLFW_PRIORITY_LOW)
|
||||||
|
{
|
||||||
|
SET_ATTRIB(EGL_CONTEXT_PRIORITY_LEVEL_IMG,
|
||||||
|
EGL_CONTEXT_PRIORITY_LOW_IMG);
|
||||||
|
} else if (ctxconfig->priority == GLFW_PRIORITY_HIGH)
|
||||||
|
{
|
||||||
|
SET_ATTRIB(EGL_CONTEXT_PRIORITY_LEVEL_IMG,
|
||||||
|
EGL_CONTEXT_PRIORITY_HIGH_IMG);
|
||||||
|
}
|
||||||
|
else if (ctxconfig->priority == GLFW_PRIORITY_REALTIME)
|
||||||
|
{
|
||||||
|
SET_ATTRIB(EGL_CONTEXT_PRIORITY_LEVEL_IMG,
|
||||||
|
EGL_CONTEXT_PRIORITY_REALTIME_NV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SET_ATTRIB(EGL_NONE, EGL_NONE);
|
SET_ATTRIB(EGL_NONE, EGL_NONE);
|
||||||
|
|
||||||
window->context.egl.handle = eglCreateContext(_glfw.egl.display,
|
window->context.egl.handle = eglCreateContext(_glfw.egl.display,
|
||||||
|
@ -187,6 +187,11 @@ typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGIPROC)(GLenum,GLuint);
|
|||||||
#define EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE 0x3450
|
#define EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE 0x3450
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE 0x3489
|
#define EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE 0x3489
|
||||||
#define EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE 0x348f
|
#define EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE 0x348f
|
||||||
|
#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100
|
||||||
|
#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101
|
||||||
|
#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102
|
||||||
|
#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
|
||||||
|
#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357
|
||||||
|
|
||||||
typedef int EGLint;
|
typedef int EGLint;
|
||||||
typedef unsigned int EGLBoolean;
|
typedef unsigned int EGLBoolean;
|
||||||
@ -444,6 +449,7 @@ struct _GLFWctxconfig
|
|||||||
int profile;
|
int profile;
|
||||||
int robustness;
|
int robustness;
|
||||||
int release;
|
int release;
|
||||||
|
int priority;
|
||||||
_GLFWwindow* share;
|
_GLFWwindow* share;
|
||||||
struct {
|
struct {
|
||||||
GLFWbool offline;
|
GLFWbool offline;
|
||||||
@ -814,6 +820,7 @@ struct _GLFWlibrary
|
|||||||
GLFWbool ANGLE_platform_angle_d3d;
|
GLFWbool ANGLE_platform_angle_d3d;
|
||||||
GLFWbool ANGLE_platform_angle_vulkan;
|
GLFWbool ANGLE_platform_angle_vulkan;
|
||||||
GLFWbool ANGLE_platform_angle_metal;
|
GLFWbool ANGLE_platform_angle_metal;
|
||||||
|
GLFWbool IMG_context_priority;
|
||||||
|
|
||||||
void* handle;
|
void* handle;
|
||||||
|
|
||||||
|
@ -264,6 +264,7 @@ void glfwDefaultWindowHints(void)
|
|||||||
_glfw.hints.context.source = GLFW_NATIVE_CONTEXT_API;
|
_glfw.hints.context.source = GLFW_NATIVE_CONTEXT_API;
|
||||||
_glfw.hints.context.major = 1;
|
_glfw.hints.context.major = 1;
|
||||||
_glfw.hints.context.minor = 0;
|
_glfw.hints.context.minor = 0;
|
||||||
|
_glfw.hints.context.priority = GLFW_PRIORITY_MEDIUM;
|
||||||
|
|
||||||
// The default is a focused, visible, resizable window with decorations
|
// The default is a focused, visible, resizable window with decorations
|
||||||
memset(&_glfw.hints.window, 0, sizeof(_glfw.hints.window));
|
memset(&_glfw.hints.window, 0, sizeof(_glfw.hints.window));
|
||||||
@ -422,6 +423,9 @@ GLFWAPI void glfwWindowHint(int hint, int value)
|
|||||||
case GLFW_REFRESH_RATE:
|
case GLFW_REFRESH_RATE:
|
||||||
_glfw.hints.refreshRate = value;
|
_glfw.hints.refreshRate = value;
|
||||||
return;
|
return;
|
||||||
|
case GLFW_CONTEXT_PRIORITY:
|
||||||
|
_glfw.hints.context.priority = value;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint 0x%08X", hint);
|
_glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint 0x%08X", hint);
|
||||||
|
@ -71,6 +71,11 @@
|
|||||||
#define PLATFORM_NAME_X11 "x11"
|
#define PLATFORM_NAME_X11 "x11"
|
||||||
#define PLATFORM_NAME_NULL "null"
|
#define PLATFORM_NAME_NULL "null"
|
||||||
|
|
||||||
|
#define PRIORITY_LOW "low"
|
||||||
|
#define PRIORITY_MEDIUM "medium"
|
||||||
|
#define PRIORITY_HIGH "high"
|
||||||
|
#define PRIORITY_REALTIME "realtime"
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
printf("Usage: glfwinfo [OPTION]...\n");
|
printf("Usage: glfwinfo [OPTION]...\n");
|
||||||
@ -133,6 +138,11 @@ static void usage(void)
|
|||||||
ANGLE_TYPE_METAL ")\n");
|
ANGLE_TYPE_METAL ")\n");
|
||||||
printf(" --graphics-switching request macOS graphics switching\n");
|
printf(" --graphics-switching request macOS graphics switching\n");
|
||||||
printf(" --disable-xcb-surface disable VK_KHR_xcb_surface extension\n");
|
printf(" --disable-xcb-surface disable VK_KHR_xcb_surface extension\n");
|
||||||
|
printf(" --priority=PRIORITY request context priority to use ("
|
||||||
|
PRIORITY_LOW ","
|
||||||
|
PRIORITY_MEDIUM ","
|
||||||
|
PRIORITY_HIGH ","
|
||||||
|
PRIORITY_REALTIME ")\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void error_callback(int error, const char* description)
|
static void error_callback(int error, const char* description)
|
||||||
@ -361,6 +371,7 @@ int main(int argc, char** argv)
|
|||||||
int context_robustness = GLFW_NO_ROBUSTNESS;
|
int context_robustness = GLFW_NO_ROBUSTNESS;
|
||||||
bool context_debug = false;
|
bool context_debug = false;
|
||||||
bool context_no_error = false;
|
bool context_no_error = false;
|
||||||
|
int context_priority = GLFW_PRIORITY_MEDIUM;
|
||||||
bool opengl_forward = false;
|
bool opengl_forward = false;
|
||||||
int opengl_profile = GLFW_OPENGL_ANY_PROFILE;
|
int opengl_profile = GLFW_OPENGL_ANY_PROFILE;
|
||||||
int fb_red_bits = 8;
|
int fb_red_bits = 8;
|
||||||
@ -388,7 +399,7 @@ int main(int argc, char** argv)
|
|||||||
REDBITS, GREENBITS, BLUEBITS, ALPHABITS, DEPTHBITS, STENCILBITS,
|
REDBITS, GREENBITS, BLUEBITS, ALPHABITS, DEPTHBITS, STENCILBITS,
|
||||||
ACCUMREDBITS, ACCUMGREENBITS, ACCUMBLUEBITS, ACCUMALPHABITS,
|
ACCUMREDBITS, ACCUMGREENBITS, ACCUMBLUEBITS, ACCUMALPHABITS,
|
||||||
AUXBUFFERS, SAMPLES, STEREO, SRGB, SINGLEBUFFER, NOERROR_SRSLY,
|
AUXBUFFERS, SAMPLES, STEREO, SRGB, SINGLEBUFFER, NOERROR_SRSLY,
|
||||||
ANGLE_TYPE, GRAPHICS_SWITCHING, XCB_SURFACE };
|
ANGLE_TYPE, GRAPHICS_SWITCHING, XCB_SURFACE, PRIORITY };
|
||||||
const struct option options[] =
|
const struct option options[] =
|
||||||
{
|
{
|
||||||
{ "platform", 1, NULL, PLATFORM },
|
{ "platform", 1, NULL, PLATFORM },
|
||||||
@ -424,6 +435,7 @@ int main(int argc, char** argv)
|
|||||||
{ "angle-type", 1, NULL, ANGLE_TYPE },
|
{ "angle-type", 1, NULL, ANGLE_TYPE },
|
||||||
{ "graphics-switching", 0, NULL, GRAPHICS_SWITCHING },
|
{ "graphics-switching", 0, NULL, GRAPHICS_SWITCHING },
|
||||||
{ "vk-xcb-surface", 0, NULL, XCB_SURFACE },
|
{ "vk-xcb-surface", 0, NULL, XCB_SURFACE },
|
||||||
|
{ "priority", 1, NULL, PRIORITY },
|
||||||
{ NULL, 0, NULL, 0 }
|
{ NULL, 0, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -652,6 +664,22 @@ int main(int argc, char** argv)
|
|||||||
case XCB_SURFACE:
|
case XCB_SURFACE:
|
||||||
disable_xcb_surface = true;
|
disable_xcb_surface = true;
|
||||||
break;
|
break;
|
||||||
|
case PRIORITY:
|
||||||
|
if (strcasecmp(optarg, PRIORITY_LOW) == 0)
|
||||||
|
context_priority = GLFW_PRIORITY_LOW;
|
||||||
|
else if (strcasecmp(optarg, PRIORITY_MEDIUM) == 0)
|
||||||
|
context_priority = GLFW_PRIORITY_MEDIUM;
|
||||||
|
else if (strcasecmp(optarg, PRIORITY_HIGH) == 0)
|
||||||
|
context_priority = GLFW_PRIORITY_HIGH;
|
||||||
|
else if (strcasecmp(optarg, PRIORITY_REALTIME) == 0)
|
||||||
|
context_priority = GLFW_PRIORITY_REALTIME;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@ -690,6 +718,7 @@ int main(int argc, char** argv)
|
|||||||
glfwWindowHint(GLFW_CONTEXT_NO_ERROR, context_no_error);
|
glfwWindowHint(GLFW_CONTEXT_NO_ERROR, context_no_error);
|
||||||
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, opengl_forward);
|
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, opengl_forward);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, opengl_profile);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, opengl_profile);
|
||||||
|
glfwWindowHint(GLFW_CONTEXT_PRIORITY, context_priority);
|
||||||
|
|
||||||
glfwWindowHint(GLFW_RED_BITS, fb_red_bits);
|
glfwWindowHint(GLFW_RED_BITS, fb_red_bits);
|
||||||
glfwWindowHint(GLFW_BLUE_BITS, fb_blue_bits);
|
glfwWindowHint(GLFW_BLUE_BITS, fb_blue_bits);
|
||||||
|
Loading…
Reference in New Issue
Block a user