2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: lib/opengl32/opengl.h
5 * PURPOSE: OpenGL32 lib, general header
11 #define WIN32_NO_STATUS
20 #include <wine/debug.h>
24 /* *$%$£^§! headers inclusion */
28 _In_ PLIST_ENTRY Entry
)
33 OldFlink
= Entry
->Flink
;
34 OldBlink
= Entry
->Blink
;
35 OldFlink
->Blink
= OldBlink
;
36 OldBlink
->Flink
= OldFlink
;
37 return (OldFlink
== OldBlink
);
43 _In_ PLIST_ENTRY ListHead
,
44 _In_ PLIST_ENTRY Entry
48 OldBlink
= ListHead
->Blink
;
49 Entry
->Flink
= ListHead
;
50 Entry
->Blink
= OldBlink
;
51 OldBlink
->Flink
= Entry
;
52 ListHead
->Blink
= Entry
;
59 _Inout_ PLIST_ENTRY ListHead
62 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
65 extern LIST_ENTRY ContextListHead
;
75 struct ICD_Data
* icd_data
;
77 volatile LONG thread_id
;
80 #define WGL_DC_OBJ_DC 0x1
96 struct ICD_Data
* icd_data
;
99 /* Software implementation */
104 struct wgl_dc_data
* next
;
107 /* Clean up functions */
108 void IntDeleteAllContexts(void);
109 void IntDeleteAllICDs(void);
111 #ifdef OPENGL32_USE_TLS
112 extern DWORD OglTlsIndex
;
114 struct Opengl32_ThreadData
116 const GLDISPATCHTABLE
* glDispatchTable
;
119 struct wgl_dc_data
* dc_data
;
122 C_ASSERT(FIELD_OFFSET(struct Opengl32_ThreadData
, glDispatchTable
) == 0);
126 IntMakeCurrent(HGLRC hglrc
, HDC hdc
, struct wgl_dc_data
* dc_data
)
128 struct Opengl32_ThreadData
* thread_data
= TlsGetValue(OglTlsIndex
);
130 thread_data
->hglrc
= hglrc
;
131 thread_data
->hdc
= hdc
;
132 thread_data
->dc_data
= dc_data
;
137 IntGetCurrentRC(void)
139 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
145 IntGetCurrentDHGLRC(void)
147 struct wgl_context
* ctx
= (struct wgl_context
*)IntGetCurrentRC();
148 if(!ctx
) return NULL
;
154 IntGetCurrentDC(void)
156 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
162 IntGetCurrentDcData(void)
164 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
165 return data
->dc_data
;
169 const GLDISPATCHTABLE
*
170 IntGetCurrentDispatchTable(void)
172 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
173 return data
->glDispatchTable
;
178 IntSetCurrentDispatchTable(const GLDISPATCHTABLE
* table
)
180 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
181 data
->glDispatchTable
= table
;
186 IntSetCurrentICDPrivate(void* value
)
188 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
189 data
->icdData
= value
;
194 IntGetCurrentICDPrivate(void)
196 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
197 return data
->icdData
;
203 const GLDISPATCHTABLE
*
204 IntGetCurrentDispatchTable(void)
206 return (GLDISPATCHTABLE
*)NtCurrentTeb()->glTable
;
208 #endif // defined(OPENGL32_USE_TLS)
210 /* Software implementation functions */
211 INT
sw_DescribePixelFormat(HDC hdc
, INT format
, UINT size
, PIXELFORMATDESCRIPTOR
* descr
);
212 BOOL
sw_SetPixelFormat(HDC hdc
, struct wgl_dc_data
*, INT format
);
213 DHGLRC
sw_CreateContext(struct wgl_dc_data
*);
214 BOOL
sw_DeleteContext(DHGLRC dhglrc
);
215 BOOL
sw_SetContext(struct wgl_dc_data
* dc_data
, DHGLRC dhglrc
);
216 void sw_ReleaseContext(DHGLRC hglrc
);
217 PROC
sw_GetProcAddress(LPCSTR name
);
218 BOOL
sw_CopyContext(DHGLRC dhglrcSrc
, DHGLRC dhglrcDst
, UINT mask
);
219 BOOL
sw_ShareLists(DHGLRC dhglrcSrc
, DHGLRC dhglrcDst
);
220 BOOL
sw_SwapBuffers(HDC hdc
, struct wgl_dc_data
* dc_data
);
222 #endif /* _OPENGL32_PCH_ */