Add GLFW_CONTEXT_RENDERER

This window hint allows choosing between hardware and software renderers
(where available) for the created OpenGL or OpenGL ES context.

Fixes #589.
This commit is contained in:
Camilla Löwy
2017-12-07 16:38:51 +01:00
parent 682f1cf203
commit d79056fc27
10 changed files with 92 additions and 12 deletions
+20 -1
View File
@@ -54,6 +54,9 @@
#define BEHAVIOR_NAME_NONE "none"
#define BEHAVIOR_NAME_FLUSH "flush"
#define RENDERER_NAME_HW "hw"
#define RENDERER_NAME_SW "sw"
static void usage(void)
{
printf("Usage: glfwinfo [OPTION]...\n");
@@ -68,6 +71,9 @@ static void usage(void)
API_NAME_NATIVE " or "
API_NAME_EGL " or "
API_NAME_OSMESA ")\n");
printf(" --renderer=RENDERER the renderer to use ("
RENDERER_NAME_HW " or "
RENDERER_NAME_SW ")\n");
printf(" -d, --debug request a debug context\n");
printf(" -f, --forward require a forward-compatible context\n");
printf(" -h, --help show this help\n");
@@ -365,7 +371,8 @@ int main(int argc, char** argv)
GLenum error;
GLFWwindow* window;
enum { CLIENT, CONTEXT, BEHAVIOR, DEBUG, FORWARD, HELP, EXTENSIONS, LAYERS,
enum { CLIENT, CONTEXT, RENDERER, BEHAVIOR, DEBUG, FORWARD,
HELP, EXTENSIONS, LAYERS,
MAJOR, MINOR, PROFILE, ROBUSTNESS, VERSION,
REDBITS, GREENBITS, BLUEBITS, ALPHABITS, DEPTHBITS, STENCILBITS,
ACCUMREDBITS, ACCUMGREENBITS, ACCUMBLUEBITS, ACCUMALPHABITS,
@@ -375,6 +382,7 @@ int main(int argc, char** argv)
{ "behavior", 1, NULL, BEHAVIOR },
{ "client-api", 1, NULL, CLIENT },
{ "context-api", 1, NULL, CONTEXT },
{ "renderer", 1, NULL, RENDERER },
{ "debug", 0, NULL, DEBUG },
{ "forward", 0, NULL, FORWARD },
{ "help", 0, NULL, HELP },
@@ -464,6 +472,17 @@ int main(int argc, char** argv)
exit(EXIT_FAILURE);
}
break;
case RENDERER:
if (strcasecmp(optarg, RENDERER_NAME_HW) == 0)
glfwWindowHint(GLFW_CONTEXT_RENDERER, GLFW_HARDWARE_RENDERER);
else if (strcasecmp(optarg, RENDERER_NAME_SW) == 0)
glfwWindowHint(GLFW_CONTEXT_RENDERER, GLFW_SOFTWARE_RENDERER);
else
{
usage();
exit(EXIT_FAILURE);
}
break;
case 'd':
case DEBUG:
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE);