Merge branch 'master' into multi-monitor

This commit is contained in:
Camilla Berglund 2012-10-22 02:46:06 +02:00
commit 0e170f4902
6 changed files with 30 additions and 16 deletions

View File

@ -654,9 +654,9 @@ static GLboolean initializeAppKit(void)
// Implicitly create shared NSApplication instance // Implicitly create shared NSApplication instance
[GLFWApplication sharedApplication]; [GLFWApplication sharedApplication];
// Setting up the menu bar must go between sharedApplication // Menu bar setup must go between sharedApplication above and
// above and finishLaunching below, in order to properly emulate the // finishLaunching below, in order to properly emulate the behavior
// behavior of NSApplicationMain // of NSApplicationMain
createMenuBar(); createMenuBar();
[NSApp finishLaunching]; [NSApp finishLaunching];
@ -969,7 +969,6 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
[window->NSGL.pixelFormat release]; [window->NSGL.pixelFormat release];
window->NSGL.pixelFormat = nil; window->NSGL.pixelFormat = nil;
[NSOpenGLContext clearCurrentContext];
[window->NSGL.context release]; [window->NSGL.context release];
window->NSGL.context = nil; window->NSGL.context = nil;

View File

@ -528,11 +528,6 @@ int _glfwCreateContext(_GLFWwindow* window,
void _glfwDestroyContext(_GLFWwindow* window) void _glfwDestroyContext(_GLFWwindow* window)
{ {
// This is duplicated from glfwDestroyWindow
// TODO: Stop duplicating code
if (window == _glfwCurrentWindow)
_glfwPlatformMakeContextCurrent(NULL);
if (window->WGL.context) if (window->WGL.context)
{ {
wglDeleteContext(window->WGL.context); wglDeleteContext(window->WGL.context);

View File

@ -964,8 +964,16 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window,
// we're just creating an OpenGL 3.0+ context with the same pixel // we're just creating an OpenGL 3.0+ context with the same pixel
// format, but it's not worth the added code complexity // format, but it's not worth the added code complexity
// First we clear the current context (the one we just created)
// This is usually done by glfwDestroyWindow, but as we're not doing
// full window destruction, it's duplicated here
_glfwPlatformMakeContextCurrent(NULL);
// Next destroy the Win32 window and WGL context (without resetting or
// destroying the GLFW window object)
destroyWindow(window); destroyWindow(window);
// ...and then create them again, this time with better APIs
if (!createWindow(window, wndconfig, fbconfig)) if (!createWindow(window, wndconfig, fbconfig))
return GL_FALSE; return GL_FALSE;
} }

View File

@ -477,8 +477,8 @@ GLFWAPI void glfwDestroyWindow(GLFWwindow handle)
if (window == NULL) if (window == NULL)
return; return;
// Clear the current context if this window's context is current // The window's context must not be current on another thread when the
// TODO: Re-examine this in light of multithreading // window is destroyed
if (window == _glfwPlatformGetCurrentContext()) if (window == _glfwPlatformGetCurrentContext())
_glfwPlatformMakeContextCurrent(NULL); _glfwPlatformMakeContextCurrent(NULL);

View File

@ -619,8 +619,6 @@ void _glfwDestroyContext(_GLFWwindow* window)
if (window->GLX.context) if (window->GLX.context)
{ {
// Release and destroy the context
glXMakeCurrent(_glfwLibrary.X11.display, None, NULL);
glXDestroyContext(_glfwLibrary.X11.display, window->GLX.context); glXDestroyContext(_glfwLibrary.X11.display, window->GLX.context);
window->GLX.context = NULL; window->GLX.context = NULL;
} }

View File

@ -74,7 +74,7 @@ static const char* get_client_api_name(int api)
return "Unknown API"; return "Unknown API";
} }
static const char* get_profile_name(GLint mask) static const char* get_profile_name_gl(GLint mask)
{ {
if (mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) if (mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT)
return "compatibility"; return "compatibility";
@ -84,6 +84,16 @@ static const char* get_profile_name(GLint mask)
return "unknown"; return "unknown";
} }
static const char* get_profile_name_glfw(int profile)
{
if (profile == GLFW_OPENGL_COMPAT_PROFILE)
return "compatibility";
if (profile == GLFW_OPENGL_CORE_PROFILE)
return "core";
return "unknown";
}
static void list_extensions(int api, int major, int minor) static void list_extensions(int api, int major, int minor)
{ {
int i; int i;
@ -302,13 +312,17 @@ int main(int argc, char** argv)
if (major > 3 || (major == 3 && minor >= 2)) if (major > 3 || (major == 3 && minor >= 2))
{ {
int profile = glfwGetWindowParam(window, GLFW_OPENGL_PROFILE);
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask); glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask);
printf("%s profile mask (0x%08x): %s\n", printf("%s profile mask (0x%08x): %s\n",
get_client_api_name(api), get_client_api_name(api),
mask, mask,
get_profile_name(mask)); get_profile_name_gl(mask));
printf("%s profile mask parsed by GLFW:\n", get_client_api_name(api)); printf("%s profile mask parsed by GLFW: %s\n",
get_client_api_name(api),
get_profile_name_glfw(profile));
} }
} }