summaryrefslogtreecommitdiff
path: root/win/win_gl.cpp
blob: 4310c55cadbdc4c28643e3729405da0b2f3316a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// Windows OpenGL functions
//

#include "stdafx.h"
#include "opengl.h"

static HMODULE gl_module;

// ============================================================================
// Function pointers

WGLCHOOSEPIXELFORMAT pfnwglChoosePixelFormat;
WGLDESCRIBEPIXELFORMAT pfnwglDescribePixelFormat;
WGLGETPIXELFORMAT pfnwglGetPixelFormat;
WGLSETPIXELFORMAT pfnwglSetPixelFormat;
WGLSWAPBUFFERS pfnwglSwapBuffers;
WGLCOPYCONTEXT pfnwglCopyContext;
WGLCREATECONTEXT pfnwglCreateContext;
WGLCREATELAYERCONTEXT pfnwglCreateLayerContext;
WGLDELETECONTEXT pfnwglDeleteContext;
WGLGETCURRENTCONTEXT pfnwglGetCurrentContext;
WGLGETCURRENTDC pfnwglGetCurrentDC;
WGLGETPROCADDRESS pfnwglGetProcAddress;
WGLMAKECURRENT pfnwglMakeCurrent;
WGLSHARELISTS pfnwglShareLists;
WGLUSEFONTBITMAPS pfnwglUseFontBitmaps;
WGLUSEFONTOUTLINES pfnwglUseFontOutlines;
WGLDESCRIBELAYERPLANE pfnwglDescribeLayerPlane;
WGLSETLAYERPALETTEENTRIES pfnwglSetLayerPaletteEntries;
WGLGETLAYERPALETTEENTRIES pfnwglGetLayerPaletteEntries;
WGLREALIZELAYERPALETTE pfnwglRealizeLayerPalette;
WGLSWAPLAYERBUFFERS pfnwglSwapLayerBuffers;
WGLSWAPINTERVALEXT pfnwglSwapIntervalEXT;
WGLGETDEVICEGAMMARAMPEXT pfnwglGetDeviceGammaRampEXT;
WGLSETDEVICEGAMMARAMPEXT pfnwglSetDeviceGammaRampEXT;

// ============================================================================
// Global functions

void* Sys_GLGetProc (const char *symbol)
{
	return GetProcAddress (gl_module, symbol);
}

void* Sys_GLGetExtension (const char *symbol)
{
	return pfnwglGetProcAddress (symbol);
}

bool Sys_GLOpenLibrary (const char* libname)
{
	if (libname)
		gl_module = LoadLibrary (libname);

	if (gl_module == NULL)
		gl_module = LoadLibrary ("opengl32.dll");

	if (gl_module == NULL)
		gl_module = LoadLibrary ("opengl.dll");

	if (gl_module == NULL)
		return false;

	pfnwglChoosePixelFormat = (WGLCHOOSEPIXELFORMAT) Sys_GLGetProc ("wglChoosePixelFormat");
	pfnwglDescribePixelFormat = (WGLDESCRIBEPIXELFORMAT) Sys_GLGetProc ("wglDescribePixelFormat");
	pfnwglGetPixelFormat = (WGLGETPIXELFORMAT) Sys_GLGetProc ("wglGetPixelFormat");
	pfnwglSetPixelFormat = (WGLSETPIXELFORMAT) Sys_GLGetProc ("wglSetPixelFormat");
	pfnwglSwapBuffers = (WGLSWAPBUFFERS) Sys_GLGetProc ("wglSwapBuffers");
	pfnwglCopyContext = (WGLCOPYCONTEXT) Sys_GLGetProc ("wglCopyContext");
	pfnwglCreateContext = (WGLCREATECONTEXT) Sys_GLGetProc ("wglCreateContext");
	pfnwglCreateLayerContext = (WGLCREATELAYERCONTEXT) Sys_GLGetProc ("wglCreateLayerContext");
	pfnwglDeleteContext = (WGLDELETECONTEXT) Sys_GLGetProc ("wglDeleteContext");
	pfnwglGetCurrentContext = (WGLGETCURRENTCONTEXT) Sys_GLGetProc ("wglGetCurrentContext");
	pfnwglGetCurrentDC = (WGLGETCURRENTDC) Sys_GLGetProc ("wglGetCurrentDC");
	pfnwglGetProcAddress = (WGLGETPROCADDRESS) Sys_GLGetProc ("wglGetProcAddress");
	pfnwglMakeCurrent = (WGLMAKECURRENT) Sys_GLGetProc ("wglMakeCurrent");
	pfnwglShareLists = (WGLSHARELISTS) Sys_GLGetProc ("wglShareLists");
	pfnwglUseFontBitmaps = (WGLUSEFONTBITMAPS) Sys_GLGetProc ("wglUseFontBitmaps");
	pfnwglUseFontOutlines = (WGLUSEFONTOUTLINES) Sys_GLGetProc ("wglUseFontOutlines");
	pfnwglDescribeLayerPlane = (WGLDESCRIBELAYERPLANE) Sys_GLGetProc ("wglDescribeLayerPlane");
	pfnwglSetLayerPaletteEntries = (WGLSETLAYERPALETTEENTRIES) Sys_GLGetProc ("wglSetLayerPaletteEntries");
	pfnwglGetLayerPaletteEntries = (WGLGETLAYERPALETTEENTRIES) Sys_GLGetProc ("wglGetLayerPaletteEntries");
	pfnwglRealizeLayerPalette = (WGLREALIZELAYERPALETTE) Sys_GLGetProc ("wglRealizeLayerPalette");
	pfnwglSwapLayerBuffers = (WGLSWAPLAYERBUFFERS) Sys_GLGetProc ("wglSwapLayerBuffers");
	pfnwglSwapIntervalEXT = (WGLSWAPINTERVALEXT) Sys_GLGetProc ("wglSwapIntervalEXT");
	pfnwglGetDeviceGammaRampEXT = (WGLGETDEVICEGAMMARAMPEXT) Sys_GLGetProc ("wglGetDeviceGammaRampEXT");
	pfnwglSetDeviceGammaRampEXT = (WGLSETDEVICEGAMMARAMPEXT) Sys_GLGetProc ("wglSetDeviceGammaRampEXT");

	return true;
}

void Sys_GLCloseLibrary ()
{
	if (gl_module)
	{
		FreeLibrary (gl_module);
		gl_module = NULL;
	}

	pfnwglChoosePixelFormat = NULL;
	pfnwglDescribePixelFormat = NULL;
	pfnwglGetPixelFormat = NULL;
	pfnwglSetPixelFormat = NULL;
	pfnwglSwapBuffers = NULL;
	pfnwglCopyContext = NULL;
	pfnwglCreateContext = NULL;
	pfnwglCreateLayerContext = NULL;
	pfnwglDeleteContext = NULL;
	pfnwglGetCurrentContext = NULL;
	pfnwglGetCurrentDC = NULL;
	pfnwglGetProcAddress = NULL;
	pfnwglMakeCurrent = NULL;
	pfnwglShareLists = NULL;
	pfnwglUseFontBitmaps = NULL;
	pfnwglUseFontOutlines = NULL;
	pfnwglDescribeLayerPlane = NULL;
	pfnwglSetLayerPaletteEntries = NULL;
	pfnwglGetLayerPaletteEntries = NULL;
	pfnwglRealizeLayerPalette = NULL;
	pfnwglSwapLayerBuffers = NULL;
	pfnwglSwapIntervalEXT = NULL;
	pfnwglGetDeviceGammaRampEXT = NULL;
	pfnwglSetDeviceGammaRampEXT = NULL;
}