mirror of
https://github.com/leozide/leocad
synced 2025-01-03 23:03:55 +01:00
173 lines
5.8 KiB
C++
Executable file
173 lines
5.8 KiB
C++
Executable file
#include "lc_global.h"
|
|
#include "opengl.h"
|
|
|
|
static HMODULE gl_module;
|
|
static bool gl_ignore_GDI = false;
|
|
|
|
// ============================================================================
|
|
// Function pointers
|
|
|
|
static WGLCHOOSEPIXELFORMAT pfnwglChoosePixelFormat;
|
|
static WGLDESCRIBEPIXELFORMAT pfnwglDescribePixelFormat;
|
|
static WGLGETPIXELFORMAT pfnwglGetPixelFormat;
|
|
static WGLSETPIXELFORMAT pfnwglSetPixelFormat;
|
|
static 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
|
|
|
|
BOOL OpenGLSwapBuffers (HDC hdc)
|
|
{
|
|
if (!gl_ignore_GDI)
|
|
return SwapBuffers (hdc);
|
|
else
|
|
return pfnwglSwapBuffers (hdc);
|
|
}
|
|
|
|
int OpenGLChoosePixelFormat(HDC hdc, CONST PIXELFORMATDESCRIPTOR * ppfd)
|
|
{
|
|
if (!gl_ignore_GDI)
|
|
return ChoosePixelFormat (hdc, ppfd);
|
|
else
|
|
return pfnwglChoosePixelFormat (hdc, ppfd);
|
|
}
|
|
|
|
int OpenGLDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd)
|
|
{
|
|
if (!gl_ignore_GDI)
|
|
return DescribePixelFormat (hdc, iPixelFormat, nBytes, ppfd);
|
|
else
|
|
return pfnwglDescribePixelFormat (hdc, iPixelFormat, nBytes, ppfd);
|
|
}
|
|
|
|
BOOL OpenGLSetPixelFormat(HDC hdc, int iPixelFormat, CONST PIXELFORMATDESCRIPTOR * ppfd)
|
|
{
|
|
if (!gl_ignore_GDI)
|
|
return SetPixelFormat (hdc, iPixelFormat, ppfd);
|
|
else
|
|
return pfnwglSetPixelFormat (hdc, iPixelFormat, ppfd);
|
|
}
|
|
|
|
int OpenGLGetPixelFormat(HDC hdc)
|
|
{
|
|
if (!gl_ignore_GDI)
|
|
return GetPixelFormat (hdc);
|
|
else
|
|
return pfnwglGetPixelFormat (hdc);
|
|
}
|
|
|
|
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 (strcmp(libname, "opengl32.dll"))
|
|
gl_ignore_GDI = true;
|
|
}
|
|
|
|
if (gl_module == NULL)
|
|
{
|
|
gl_module = LoadLibrary ("opengl32.dll");
|
|
gl_ignore_GDI = false;
|
|
}
|
|
|
|
if (gl_module == NULL)
|
|
{
|
|
gl_module = LoadLibrary ("opengl.dll");
|
|
gl_ignore_GDI = true;
|
|
}
|
|
|
|
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;
|
|
}
|