GLFWAPI void glfwTerminate(void) { int i; if (!_glfwInitialized) return; memset(&_glfw.callbacks, 0, sizeof(_glfw.callbacks)); while (_glfw.windowListHead) glfwDestroyWindow((GLFWwindow*) _glfw.windowListHead); while (_glfw.cursorListHead) glfwDestroyCursor((GLFWcursor*) _glfw.cursorListHead); for (i = 0; i < _glfw.monitorCount; i++) { _GLFWmonitor* monitor = _glfw.monitors[i]; if (monitor->originalRamp.size) _glfwPlatformSetGammaRamp(monitor, &monitor->originalRamp); } _glfwFreeMonitors(_glfw.monitors, _glfw.monitorCount); _glfw.monitors = NULL; _glfw.monitorCount = 0; _glfwPlatformTerminate(); memset(&_glfw, 0, sizeof(_glfw)); _glfwInitialized = GL_FALSE; }
void _glfwInputMonitorChange(void) { int i, j, monitorCount = _glfw.monitorCount; _GLFWmonitor** monitors = _glfw.monitors; _glfw.monitors = _glfwPlatformGetMonitors(&_glfw.monitorCount); // Re-use still connected monitor objects for (i = 0; i < _glfw.monitorCount; i++) { for (j = 0; j < monitorCount; j++) { if (_glfwPlatformIsSameMonitor(_glfw.monitors[i], monitors[j])) { _glfwFreeMonitor(_glfw.monitors[i]); _glfw.monitors[i] = monitors[j]; break; } } } // Find and report disconnected monitors (not in the new list) for (i = 0; i < monitorCount; i++) { _GLFWwindow* window; for (j = 0; j < _glfw.monitorCount; j++) { if (monitors[i] == _glfw.monitors[j]) break; } if (j < _glfw.monitorCount) continue; for (window = _glfw.windowListHead; window; window = window->next) { if (window->monitor == monitors[i]) window->monitor = NULL; } if (_glfw.callbacks.monitor) _glfw.callbacks.monitor((GLFWmonitor*) monitors[i], GLFW_DISCONNECTED); } // Find and report newly connected monitors (not in the old list) // Re-used monitor objects are then removed from the old list to avoid // having them destroyed at the end of this function for (i = 0; i < _glfw.monitorCount; i++) { for (j = 0; j < monitorCount; j++) { if (_glfw.monitors[i] == monitors[j]) { monitors[j] = NULL; break; } } if (j < monitorCount) continue; if (_glfw.callbacks.monitor) _glfw.callbacks.monitor((GLFWmonitor*) _glfw.monitors[i], GLFW_CONNECTED); } _glfwFreeMonitors(monitors, monitorCount); }