void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (window->monitor) leaveFullscreenMode(window); if (window->context.api != GLFW_NO_API) { #if defined(_GLFW_WGL) _glfwDestroyContextWGL(window); #elif defined(_GLFW_EGL) _glfwDestroyContextEGL(window); #endif } destroyWindow(window); }
void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (window->monitor) releaseMonitor(window); if (window->context.api != GLFW_NO_API) { #if defined(_GLFW_WGL) _glfwDestroyContextWGL(window); #elif defined(_GLFW_EGL) _glfwDestroyContextEGL(window); #endif } destroyWindow(window); if (window->win32.bigIcon) DestroyIcon(window->win32.bigIcon); if (window->win32.smallIcon) DestroyIcon(window->win32.smallIcon); }
int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig, unsigned long long windowHandle) { int status; if (!createWindow(window, wndconfig, windowHandle)) return GLFW_FALSE; if (ctxconfig->api != GLFW_NO_API) { #if defined(_GLFW_WGL) if (!_glfwCreateContextWGL(window, ctxconfig, fbconfig)) return GLFW_FALSE; status = _glfwAnalyzeContextWGL(window, ctxconfig, fbconfig); if (status == _GLFW_RECREATION_IMPOSSIBLE) return GLFW_FALSE; if (status == _GLFW_RECREATION_REQUIRED) { // Some window hints require us to re-create the context using WGL // extensions retrieved through the current context, as we cannot // check for WGL extensions or retrieve WGL entry points before we // have a current context (actually until we have implicitly loaded // the vendor ICD) // Yes, this is strange, and yes, this is the proper way on WGL // As Windows only allows you to set the pixel format once for // a window, we need to destroy the current window and create a new // one to be able to use the new pixel format // Technically, it may be possible to keep the old window around if // we're just creating an OpenGL 3.0+ context with the same pixel // 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 GLFW window destruction, it's duplicated here _glfwPlatformMakeContextCurrent(NULL); // Next destroy the Win32 window and WGL context (without resetting // or destroying the GLFW window object) _glfwDestroyContextWGL(window); destroyWindow(window); // ...and then create them again, this time with better APIs if (!createWindow(window, wndconfig, windowHandle)) return GLFW_FALSE; if (!_glfwCreateContextWGL(window, ctxconfig, fbconfig)) return GLFW_FALSE; } #elif defined(_GLFW_EGL) if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) return GLFW_FALSE; #endif } if (window->monitor) { _glfwPlatformShowWindow(window); if (!enterFullscreenMode(window)) return GLFW_FALSE; } return GLFW_TRUE; }