1 /* $Id: opengl32.h,v 1.14 2004/02/12 23:56:15 royce Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: lib/opengl32/opengl32.h
6 * PURPOSE: OpenGL32 lib
7 * PROGRAMMER: Royce Mitchell III, Anich Gregor (blight)
12 #ifndef OPENGL32_PRIVATE_H
13 #define OPENGL32_PRIVATE_H
19 /* gl function list */
22 /* ICD index list/types */
27 # define DEBUG_OPENGL32
28 # define DEBUG_OPENGL32_BRKPTS /* enable breakpoints */
29 # define DEBUG_OPENGL32_ICD_EXPORTS /* dumps the list of (un)supported glXXX
30 functions when an ICD is loaded. */
35 inline void DBGPRINT ( ... ) {}
37 # ifdef DEBUG_OPENGL32
38 ULONG
DbgPrint(PCH Format
,...);
40 # define DBGPRINT( fmt, args... ) \
41 DPRINT( "OpenGL32.DLL: %s: "fmt"\n", __FUNCTION__, ##args )
43 # define DBGPRINT( ... ) do {} while (0)
47 #ifdef DEBUG_OPENGL32_BRKPTS
48 # if defined(__GNUC__)
49 # define DBGBREAK() __asm__( "int $3" );
50 # elif defined(_MSC_VER)
51 # define DBGBREAK() __asm { int 3 }
53 # error Unsupported compiler!
57 /* function/data attributes */
58 #define EXPORT __declspec(dllexport)
60 # define NAKED __declspec(naked)
63 # define STDCALL __stdcall
66 # define NAKED __attribute__((naked))
67 # define SHARED __attribute__((section("shared"), shared))
73 #define APIENTRY EXPORT __stdcall
75 /* gl function list */
78 /* GL data types - x86 typedefs */
79 typedef unsigned int GLenum
;
80 typedef unsigned char GLboolean
;
81 typedef unsigned int GLbitfield
;
82 typedef signed char GLbyte
;
83 typedef short GLshort
;
86 typedef unsigned char GLubyte
;
87 typedef unsigned short GLushort
;
88 typedef unsigned int GLuint
;
89 typedef unsigned short GLhalf
;
90 typedef float GLfloat
;
91 typedef float GLclampf
;
92 typedef double GLdouble
;
93 typedef double GLclampd
;
96 /* Called by the driver to set the dispatch table */
97 typedef DWORD
APIENTRY (*SetContextCallBack
)( const ICDTable
* );
100 typedef struct tagGLDRIVERDATA
102 HMODULE handle
; /* DLL handle */
103 UINT refcount
; /* number of references to this ICD */
104 WCHAR driver_name
[256]; /* name of display driver */
106 WCHAR dll
[256]; /* Dll value from registry */
107 DWORD version
; /* Version value from registry */
108 DWORD driver_version
; /* DriverVersion value from registry */
109 DWORD flags
; /* Flags value from registry */
111 BOOL
APIENTRY (*DrvCopyContext
)( HGLRC
, HGLRC
, UINT
);
112 HGLRC
APIENTRY (*DrvCreateContext
)( HDC
);
113 HGLRC
APIENTRY (*DrvCreateLayerContext
)( HDC
, int );
114 BOOL
APIENTRY (*DrvDeleteContext
)( HGLRC
);
115 BOOL
APIENTRY (*DrvDescribeLayerPlane
)( HDC
, int, int, UINT
, LPLAYERPLANEDESCRIPTOR
);
116 int APIENTRY (*DrvDescribePixelFormat
)( IN HDC
, IN
int, IN UINT
, OUT LPPIXELFORMATDESCRIPTOR
);
117 int APIENTRY (*DrvGetLayerPaletteEntries
)( HDC
, int, int, int, COLORREF
* );
118 PROC
APIENTRY (*DrvGetProcAddress
)( LPCSTR lpProcName
);
119 void APIENTRY (*DrvReleaseContext
)();
120 BOOL
APIENTRY (*DrvRealizeLayerPalette
)( HDC
, int, BOOL
);
121 PICDTable
APIENTRY (*DrvSetContext
)( HDC hdc
, HGLRC hglrc
, SetContextCallBack callback
);
122 int APIENTRY (*DrvSetLayerPaletteEntries
)( HDC
, int, int, int, CONST COLORREF
* );
123 BOOL
APIENTRY (*DrvSetPixelFormat
)( IN HDC
, IN
int, IN CONST PIXELFORMATDESCRIPTOR
* );
124 BOOL
APIENTRY (*DrvShareLists
)( HGLRC
, HGLRC
);
125 BOOL
APIENTRY (*DrvSwapBuffers
)( HDC
);
126 BOOL
APIENTRY (*DrvSwapLayerBuffers
)( HDC
, UINT
);
127 BOOL
APIENTRY (*DrvValidateVersion
)( DWORD
);
129 struct tagGLDRIVERDATA
*next
; /* next ICD -- linked list */
132 /* Out private OpenGL context (saved in TLS) */
133 typedef struct tagGLRC
135 GLDRIVERDATA
*icd
; /* driver used for this context */
136 HDC hdc
; /* DC handle */
137 BOOL is_current
; /* wether this context is current for some DC */
138 DWORD thread_id
; /* thread holding this context */
140 HGLRC hglrc
; /* GLRC from DrvCreateContext */
142 struct tagGLRC
*next
; /* linked list */
146 typedef struct tagGLPROCESSDATA
148 GLDRIVERDATA
*driver_list
; /* list of loaded drivers */
149 HANDLE driver_mutex
; /* mutex to protect driver list */
150 GLRC
*glrc_list
; /* list of GL rendering contexts */
151 HANDLE glrc_mutex
; /* mutex to protect glrc list */
152 HDC cachedHdc
; /* cached HDC from last SetPixelFormat */
153 INT cachedFormat
; /* cached format from last SetPixelFormat */
157 typedef struct tagGLTHREADDATA
159 GLRC
*glrc
; /* current GL rendering context */
162 extern DWORD OPENGL32_tls
;
163 extern GLPROCESSDATA OPENGL32_processdata
;
164 #define OPENGL32_threaddata ((GLTHREADDATA *)TlsGetValue( OPENGL32_tls ))
166 /* function prototypes */
167 GLDRIVERDATA
*OPENGL32_LoadICDForHDC( HDC hdc
);
168 GLDRIVERDATA
*OPENGL32_LoadICD( LPCWSTR driver
);
169 BOOL
OPENGL32_UnloadICD( GLDRIVERDATA
*icd
);
170 DWORD
OPENGL32_RegEnumDrivers( DWORD idx
, LPWSTR name
, LPDWORD cName
);
171 DWORD
OPENGL32_RegGetDriverInfo( LPCWSTR driver
, GLDRIVERDATA
*icd
);
173 /* empty gl functions from gl.c */
174 int STDCALL
glEmptyFunc0();
175 int STDCALL
glEmptyFunc4( long );
176 int STDCALL
glEmptyFunc8( long, long );
177 int STDCALL
glEmptyFunc12( long, long, long );
178 int STDCALL
glEmptyFunc16( long, long, long, long );
179 int STDCALL
glEmptyFunc20( long, long, long, long, long );
180 int STDCALL
glEmptyFunc24( long, long, long, long, long, long );
181 int STDCALL
glEmptyFunc28( long, long, long, long, long, long, long );
182 int STDCALL
glEmptyFunc32( long, long, long, long, long, long, long, long );
183 int STDCALL
glEmptyFunc36( long, long, long, long, long, long, long, long,
185 int STDCALL
glEmptyFunc40( long, long, long, long, long, long, long, long,
187 int STDCALL
glEmptyFunc44( long, long, long, long, long, long, long, long,
189 int STDCALL
glEmptyFunc48( long, long, long, long, long, long, long, long,
190 long, long, long, long );
191 int STDCALL
glEmptyFunc52( long, long, long, long, long, long, long, long,
192 long, long, long, long, long );
193 int STDCALL
glEmptyFunc56( long, long, long, long, long, long, long, long,
194 long, long, long, long, long, long );
196 #define X(func,ret,typeargs,args,icdidx,tebidx,stack) EXPORT ret STDCALL func typeargs;
204 #endif//OPENGL32_PRIVATE_H