//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include // The the sole (fake) video mode of our (sole) fake monitor // static GLFWvidmode getVideoMode(void) { GLFWvidmode mode; mode.width = 1920; mode.height = 1080; mode.redBits = 8; mode.greenBits = 8; mode.blueBits = 8; mode.refreshRate = 60; return mode; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPollMonitorsNull(void) { const float dpi = 141.f; const GLFWvidmode mode = getVideoMode(); _GLFWmonitor* monitor = _glfwAllocMonitor("Null SuperNoop 0", (int) (mode.width * 25.4f / dpi), (int) (mode.height * 25.4f / dpi)); _glfwInputMonitor(monitor, GLFW_CONNECTED, _GLFW_INSERT_FIRST); } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor) { _glfwFreeGammaArrays(&monitor->null.ramp); } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) { } void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, float* xscale, float* yscale) { if (xscale) *xscale = 1.f; if (yscale) *yscale = 1.f; } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height) { const GLFWvidmode mode = getVideoMode(); if (xpos) *xpos = 0; if (ypos) *ypos = 10; if (width) *width = mode.width; if (height) *height = mode.height - 10; } GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* found) { GLFWvidmode* mode = calloc(1, sizeof(GLFWvidmode)); *mode = getVideoMode(); *found = 1; return mode; } void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode) { *mode = getVideoMode(); } GLFWbool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp) { if (!monitor->null.ramp.size) { _glfwAllocGammaArrays(&monitor->null.ramp, 256); for (unsigned int i = 0; i < monitor->null.ramp.size; i++) { const float gamma = 2.2f; float value; value = i / (float) (monitor->null.ramp.size - 1); value = powf(value, 1.f / gamma) * 65535.f + 0.5f; value = _glfw_fminf(value, 65535.f); monitor->null.ramp.red[i] = (unsigned short) value; monitor->null.ramp.green[i] = (unsigned short) value; monitor->null.ramp.blue[i] = (unsigned short) value; } } _glfwAllocGammaArrays(ramp, monitor->null.ramp.size); memcpy(ramp->red, monitor->null.ramp.red, sizeof(short) * ramp->size); memcpy(ramp->green, monitor->null.ramp.green, sizeof(short) * ramp->size); memcpy(ramp->blue, monitor->null.ramp.blue, sizeof(short) * ramp->size); return GLFW_TRUE; } void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp) { if (monitor->null.ramp.size != ramp->size) { _glfwInputError(GLFW_PLATFORM_ERROR, "Null: Gamma ramp size must match current ramp size"); return; } memcpy(monitor->null.ramp.red, ramp->red, sizeof(short) * ramp->size); memcpy(monitor->null.ramp.green, ramp->green, sizeof(short) * ramp->size); memcpy(monitor->null.ramp.blue, ramp->blue, sizeof(short) * ramp->size); }