From fd127d59fa71a4b38b8d5b4e9f2ef804443fa2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Sat, 3 Dec 2016 19:32:00 +0100 Subject: [PATCH] Cocoa: Improve OpenGL version restriction messages Fixes #904. --- docs/window.dox | 7 +++++++ include/GLFW/glfw3.h | 7 +++++++ src/nsgl_context.m | 15 ++++----------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/docs/window.dox b/docs/window.dox index b75a4de0..026298e2 100644 --- a/docs/window.dox +++ b/docs/window.dox @@ -299,6 +299,13 @@ cannot be returned if 2.0 or later was requested, and vice versa. This is because OpenGL ES 3.x is backward compatible with 2.0, but OpenGL ES 2.0 is not backward compatible with 1.x. +@note @macos The OS only supports forward-compatible core profile contexts for +OpenGL versions 3.2 and later. Before creating an OpenGL context of version +3.2 or later you must set the `GLFW_OPENGL_FORWARD_COMPAT` and +`GLFW_OPENGL_PROFILE` hints accordingly. OpenGL 3.0 and 3.1 contexts are not +supported at all on macOS. + + `GLFW_OPENGL_FORWARD_COMPAT` specifies whether the OpenGL context should be forward-compatible, i.e. one where all functionality deprecated in the requested version of OpenGL is removed. This must only be used if the requested OpenGL diff --git a/include/GLFW/glfw3.h b/include/GLFW/glfw3.h index 65efeada..15ace888 100644 --- a/include/GLFW/glfw3.h +++ b/include/GLFW/glfw3.h @@ -1831,6 +1831,13 @@ GLFWAPI void glfwWindowHint(int hint, int value); * @remark @win32 The context to share resources with must not be current on * any other thread. * + * @remark @macos The OS only supports forward-compatible core profile contexts + * for OpenGL versions 3.2 and later. Before creating an OpenGL context of + * version 3.2 or later you must set the + * [GLFW_OPENGL_FORWARD_COMPAT](@ref window_hints_ctx) and + * [GLFW_OPENGL_PROFILE](@ref window_hints_ctx) accordingly. OpenGL 3.0 and + * 3.1 contexts are not supported at all on macOS. + * * @remark @macos The GLFW window has no icon, as it is not a document * window, but the dock icon will be the same as the application bundle's icon. * For more information on bundles, see the diff --git a/src/nsgl_context.m b/src/nsgl_context.m index d79567ba..fd09312f 100644 --- a/src/nsgl_context.m +++ b/src/nsgl_context.m @@ -128,26 +128,19 @@ GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window, return GLFW_FALSE; } - if (ctxconfig->major == 3 && ctxconfig->minor < 2) - { - _glfwInputError(GLFW_VERSION_UNAVAILABLE, - "NSGL: The targeted version of macOS does not support OpenGL 3.0 or 3.1"); - return GLFW_FALSE; - } - if (ctxconfig->major > 2) { - if (!ctxconfig->forward) + if (ctxconfig->major == 3 && ctxconfig->minor < 2) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, - "NSGL: The targeted version of macOS only supports forward-compatible contexts for OpenGL 3.2 and above"); + "NSGL: The targeted version of macOS does not support OpenGL 3.0 or 3.1 (but may support 3.3 and above)"); return GLFW_FALSE; } - if (ctxconfig->profile != GLFW_OPENGL_CORE_PROFILE) + if (!ctxconfig->forward || ctxconfig->profile != GLFW_OPENGL_CORE_PROFILE) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, - "NSGL: The targeted version of macOS only supports core profile contexts for OpenGL 3.2 and above"); + "NSGL: The targeted version of macOS only supports forward-compatible core profile contexts for OpenGL 3.2 and above"); return GLFW_FALSE; } }