mirror of
https://github.com/glfw/glfw.git
synced 2026-09-21 16:44:11 +00:00
Initial implementation of experimental gamma ramp API.
This commit is contained in:
+29
-1
@@ -30,6 +30,8 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
// With the Borland C++ compiler, we want to disable FPU exceptions
|
||||
#include <float.h>
|
||||
@@ -59,12 +61,18 @@ static GLboolean initLibraries(void)
|
||||
GetProcAddress(_glfwLibrary.Win32.gdi.instance, "SetPixelFormat");
|
||||
_glfwLibrary.Win32.gdi.SwapBuffers = (SWAPBUFFERS_T)
|
||||
GetProcAddress(_glfwLibrary.Win32.gdi.instance, "SwapBuffers");
|
||||
_glfwLibrary.Win32.gdi.GetDeviceGammaRamp = (GETDEVICEGAMMARAMP_T)
|
||||
GetProcAddress(_glfwLibrary.Win32.gdi.instance, "GetDeviceGammaRamp");
|
||||
_glfwLibrary.Win32.gdi.SetDeviceGammaRamp = (SETDEVICEGAMMARAMP_T)
|
||||
GetProcAddress(_glfwLibrary.Win32.gdi.instance, "SetDeviceGammaRamp");
|
||||
|
||||
if (!_glfwLibrary.Win32.gdi.ChoosePixelFormat ||
|
||||
!_glfwLibrary.Win32.gdi.DescribePixelFormat ||
|
||||
!_glfwLibrary.Win32.gdi.GetPixelFormat ||
|
||||
!_glfwLibrary.Win32.gdi.SetPixelFormat ||
|
||||
!_glfwLibrary.Win32.gdi.SwapBuffers)
|
||||
!_glfwLibrary.Win32.gdi.SwapBuffers ||
|
||||
!_glfwLibrary.Win32.gdi.GetDeviceGammaRamp ||
|
||||
!_glfwLibrary.Win32.gdi.SetDeviceGammaRamp)
|
||||
{
|
||||
return GL_FALSE;
|
||||
}
|
||||
@@ -152,6 +160,19 @@ int _glfwPlatformInit(void)
|
||||
|
||||
_glfwLibrary.Win32.instance = GetModuleHandle(NULL);
|
||||
|
||||
// Initialise the internal gamma ramp
|
||||
_glfwLibrary.gammaSize = 256;
|
||||
_glfwLibrary.gammaRamp[GLFW_GAMMA_ORIG] =
|
||||
malloc(256 * sizeof(unsigned short) * 3);
|
||||
_glfwLibrary.gammaRamp[GLFW_GAMMA_CURR] =
|
||||
malloc(256 * sizeof(unsigned short) * 3);
|
||||
|
||||
// Get the desktop DC
|
||||
_glfwLibrary.Win32.desktopDC = GetDC(GetDesktopWindow());
|
||||
|
||||
// Save the original gamma ramp
|
||||
_glfwPlatformSaveGammaRamp(GLFW_GAMMA_ORIG);
|
||||
|
||||
_glfwInitTimer();
|
||||
|
||||
return GL_TRUE;
|
||||
@@ -164,6 +185,13 @@ int _glfwPlatformInit(void)
|
||||
|
||||
int _glfwPlatformTerminate(void)
|
||||
{
|
||||
// Restore the original gamma ramp
|
||||
_glfwPlatformRestoreGammaRamp(GLFW_GAMMA_ORIG);
|
||||
|
||||
// Free the gamma ramps
|
||||
free(_glfwLibrary.gammaRamp[GLFW_GAMMA_ORIG]);
|
||||
free(_glfwLibrary.gammaRamp[GLFW_GAMMA_CURR]);
|
||||
|
||||
if (_glfwLibrary.Win32.classAtom)
|
||||
{
|
||||
UnregisterClass(_GLFW_WNDCLASSNAME, _glfwLibrary.Win32.instance);
|
||||
|
||||
Reference in New Issue
Block a user