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 #ifndef OPENGL32_USE_TLS
24 #include <wine/debug.h>
28 /* *$%$£^§! headers inclusion */
32 _In_ PLIST_ENTRY Entry
)
37 OldFlink
= Entry
->Flink
;
38 OldBlink
= Entry
->Blink
;
39 OldFlink
->Blink
= OldBlink
;
40 OldBlink
->Flink
= OldFlink
;
41 return (OldFlink
== OldBlink
);
47 _In_ PLIST_ENTRY ListHead
,
48 _In_ PLIST_ENTRY Entry
52 OldBlink
= ListHead
->Blink
;
53 Entry
->Flink
= ListHead
;
54 Entry
->Blink
= OldBlink
;
55 OldBlink
->Flink
= Entry
;
56 ListHead
->Blink
= Entry
;
63 _Inout_ PLIST_ENTRY ListHead
66 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
69 extern LIST_ENTRY ContextListHead
;
79 struct ICD_Data
* icd_data
;
81 volatile LONG thread_id
;
84 #define WGL_DC_OBJ_DC 0x1
100 struct ICD_Data
* icd_data
;
103 /* Software implementation */
108 struct wgl_dc_data
* next
;
111 /* Clean up functions */
112 void IntDeleteAllContexts(void);
113 void IntDeleteAllICDs(void);
115 #ifdef OPENGL32_USE_TLS
116 extern DWORD OglTlsIndex
;
118 struct Opengl32_ThreadData
120 const GLDISPATCHTABLE
* glDispatchTable
;
123 struct wgl_dc_data
* dc_data
;
126 C_ASSERT(FIELD_OFFSET(struct Opengl32_ThreadData
, glDispatchTable
) == 0);
129 BOOL
init_tls_data(void);
133 IntMakeCurrent(HGLRC hglrc
, HDC hdc
, struct wgl_dc_data
* dc_data
)
135 struct Opengl32_ThreadData
* thread_data
= TlsGetValue(OglTlsIndex
);
138 OutputDebugStringA("Calling init_tls_data from IntMakeCurrent\n");
139 if (!init_tls_data())
140 OutputDebugStringA("init_tls_data failed, brace for impact...\n");
142 thread_data
= TlsGetValue(OglTlsIndex
);
145 thread_data
->hglrc
= hglrc
;
146 thread_data
->hdc
= hdc
;
147 thread_data
->dc_data
= dc_data
;
152 IntGetCurrentRC(void)
154 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
155 return data
? data
->hglrc
: NULL
;
160 IntGetCurrentDC(void)
162 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
163 return data
? data
->hdc
: NULL
;
168 IntGetCurrentDcData(void)
170 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
171 return data
->dc_data
;
175 const GLDISPATCHTABLE
*
176 IntGetCurrentDispatchTable(void)
178 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
179 return data
->glDispatchTable
;
184 IntSetCurrentDispatchTable(const GLDISPATCHTABLE
* table
)
186 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
187 data
->glDispatchTable
= table
;
192 IntSetCurrentICDPrivate(void* value
)
194 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
195 data
->icdData
= value
;
200 IntGetCurrentICDPrivate(void)
202 struct Opengl32_ThreadData
* data
= TlsGetValue(OglTlsIndex
);
203 return data
->icdData
;
209 const GLDISPATCHTABLE
*
210 IntGetCurrentDispatchTable(void)
212 return (GLDISPATCHTABLE
*)NtCurrentTeb()->glTable
;
217 IntSetCurrentDispatchTable(const GLDISPATCHTABLE
* table
)
219 NtCurrentTeb()->glTable
= (void*)table
;
224 IntMakeCurrent(HGLRC hglrc
, HDC hdc
, struct wgl_dc_data
* dc_data
)
226 TEB
* CurrentTeb
= NtCurrentTeb();
228 CurrentTeb
->glCurrentRC
= hglrc
;
229 CurrentTeb
->glReserved2
= hdc
;
230 CurrentTeb
->glContext
= dc_data
;
235 IntGetCurrentRC(void)
237 return NtCurrentTeb()->glCurrentRC
;
242 IntGetCurrentDC(void)
244 return NtCurrentTeb()->glReserved2
;
249 IntGetCurrentDcData(void)
251 return NtCurrentTeb()->glContext
;
256 IntSetCurrentICDPrivate(void* value
)
258 NtCurrentTeb()->glReserved1
[0] = (ULONG_PTR
)value
;
263 IntGetCurrentICDPrivate(void)
265 return (void*)NtCurrentTeb()->glReserved1
[0];
268 #endif // defined(OPENGL32_USE_TLS)
272 IntGetCurrentDHGLRC(void)
274 struct wgl_context
* ctx
= (struct wgl_context
*)IntGetCurrentRC();
275 if(!ctx
) return NULL
;
279 /* Software implementation functions */
280 INT
sw_DescribePixelFormat(HDC hdc
, INT format
, UINT size
, PIXELFORMATDESCRIPTOR
* descr
);
281 BOOL
sw_SetPixelFormat(HDC hdc
, struct wgl_dc_data
*, INT format
);
282 DHGLRC
sw_CreateContext(struct wgl_dc_data
*);
283 BOOL
sw_DeleteContext(DHGLRC dhglrc
);
284 BOOL
sw_SetContext(struct wgl_dc_data
* dc_data
, DHGLRC dhglrc
);
285 void sw_ReleaseContext(DHGLRC hglrc
);
286 PROC
sw_GetProcAddress(LPCSTR name
);
287 BOOL
sw_CopyContext(DHGLRC dhglrcSrc
, DHGLRC dhglrcDst
, UINT mask
);
288 BOOL
sw_ShareLists(DHGLRC dhglrcSrc
, DHGLRC dhglrcDst
);
289 BOOL
sw_SwapBuffers(HDC hdc
, struct wgl_dc_data
* dc_data
);
291 #endif /* _OPENGL32_PCH_ */