[OPENGL32] Fix usage of TEB members.
[reactos.git] / dll / opengl / opengl32 / opengl32.h
index b3e0bd0..32b4f35 100644 (file)
 #include <winddi.h>
 #include <GL/gl.h>
 
+#ifndef OPENGL32_USE_TLS
+#include <pstypes.h>
+#endif
+
 #include <wine/debug.h>
 
 #include "icd.h"
@@ -108,104 +112,74 @@ struct wgl_dc_data
 void IntDeleteAllContexts(void);
 void IntDeleteAllICDs(void);
 
-#ifdef OPENGL32_USE_TLS
-extern DWORD OglTlsIndex;
+FORCEINLINE
+const GLDISPATCHTABLE*
+IntGetCurrentDispatchTable(void)
+{
+    return (GLDISPATCHTABLE*)NtCurrentTeb()->glTable;
+}
 
-struct Opengl32_ThreadData
+FORCEINLINE
+void
+IntSetCurrentDispatchTable(const GLDISPATCHTABLE* table)
 {
-    const GLDISPATCHTABLE* glDispatchTable;
-    HGLRC hglrc;
-    HDC hdc;
-    struct wgl_dc_data* dc_data;
-    PVOID* icdData;
-};
-C_ASSERT(FIELD_OFFSET(struct Opengl32_ThreadData, glDispatchTable) == 0);
+    NtCurrentTeb()->glTable = (void*)table;
+}
 
-static inline
+FORCEINLINE
 void
 IntMakeCurrent(HGLRC hglrc, HDC hdc, struct wgl_dc_data* dc_data)
 {
-    struct Opengl32_ThreadData* thread_data = TlsGetValue(OglTlsIndex);
+    TEB* CurrentTeb = NtCurrentTeb();
 
-    thread_data->hglrc = hglrc;
-    thread_data->hdc = hdc;
-    thread_data->dc_data = dc_data;
+    CurrentTeb->glCurrentRC = hglrc;
+    CurrentTeb->glReserved2 = hdc;
+    CurrentTeb->glSectionInfo = dc_data;
 }
 
-static inline
+FORCEINLINE
 HGLRC
 IntGetCurrentRC(void)
 {
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data ? data->hglrc : NULL;
+    return NtCurrentTeb()->glCurrentRC;
 }
 
-static inline
-DHGLRC
-IntGetCurrentDHGLRC(void)
-{
-    struct wgl_context* ctx = (struct wgl_context*)IntGetCurrentRC();
-    if(!ctx) return NULL;
-    return ctx->dhglrc;
-}
-
-static inline
+FORCEINLINE
 HDC
 IntGetCurrentDC(void)
 {
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data->hdc;
+    return NtCurrentTeb()->glReserved2;
 }
 
 static inline
 struct wgl_dc_data*
 IntGetCurrentDcData(void)
 {
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data->dc_data;
+    return NtCurrentTeb()->glSectionInfo;
 }
 
-static inline
-const GLDISPATCHTABLE *
-IntGetCurrentDispatchTable(void)
-{
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data->glDispatchTable;
-}
-
-static inline
-void
-IntSetCurrentDispatchTable(const GLDISPATCHTABLE* table)
-{
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    data->glDispatchTable = table;
-}
-
-static inline
+FORCEINLINE
 void
 IntSetCurrentICDPrivate(void* value)
 {
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    data->icdData = value;
+    NtCurrentTeb()->glContext = value;
 }
 
-static inline
+FORCEINLINE
 void*
 IntGetCurrentICDPrivate(void)
 {
-    struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data->icdData;
+    return (void*)NtCurrentTeb()->glContext;
 }
 
-
-#else
-static inline
-const GLDISPATCHTABLE*
-IntGetCurrentDispatchTable(void)
+FORCEINLINE
+DHGLRC
+IntGetCurrentDHGLRC(void)
 {
-    return (GLDISPATCHTABLE*)NtCurrentTeb()->glTable;
+    struct wgl_context* ctx = (struct wgl_context*)IntGetCurrentRC();
+    if(!ctx) return NULL;
+    return ctx->dhglrc;
 }
-#endif // defined(OPENGL32_USE_TLS)
 
 /* Software implementation functions */
 INT sw_DescribePixelFormat(HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR* descr);