[OPENGL32]
[reactos.git] / reactos / dll / opengl / opengl32 / opengl32.h
index 72862f6..b3e0bd0 100644 (file)
@@ -5,7 +5,8 @@
  * PURPOSE:              OpenGL32 lib, general header
  */
 
-#pragma once
+#ifndef _OPENGL32_PCH_
+#define _OPENGL32_PCH_
 
 #define WIN32_NO_STATUS
 #include <stdarg.h>
 
 #include "icd.h"
 
+/* *$%$£^§! headers inclusion */
+static __inline
+BOOLEAN
+RemoveEntryList(
+    _In_ PLIST_ENTRY Entry)
+{
+    PLIST_ENTRY OldFlink;
+    PLIST_ENTRY OldBlink;
+
+    OldFlink = Entry->Flink;
+    OldBlink = Entry->Blink;
+    OldFlink->Blink = OldBlink;
+    OldBlink->Flink = OldFlink;
+    return (OldFlink == OldBlink);
+}
+
+static __inline
+VOID
+InsertTailList(
+    _In_ PLIST_ENTRY ListHead,
+    _In_ PLIST_ENTRY Entry
+)
+{
+    PLIST_ENTRY OldBlink;
+    OldBlink = ListHead->Blink;
+    Entry->Flink = ListHead;
+    Entry->Blink = OldBlink;
+    OldBlink->Flink = Entry;
+    ListHead->Blink = Entry;
+}
+
+
+static __inline
+VOID
+InitializeListHead(
+    _Inout_ PLIST_ENTRY ListHead
+)
+{
+    ListHead->Flink = ListHead->Blink = ListHead;
+}
+
+extern LIST_ENTRY ContextListHead;
+
 struct wgl_context
 {
     DWORD magic;
     volatile LONG lock;
 
+    LIST_ENTRY ListEntry;
+
     DHGLRC dhglrc;
     struct ICD_Data* icd_data;
     INT pixelformat;
@@ -58,6 +104,10 @@ struct wgl_dc_data
     struct wgl_dc_data* next;
 };
 
+/* Clean up functions */
+void IntDeleteAllContexts(void);
+void IntDeleteAllICDs(void);
+
 #ifdef OPENGL32_USE_TLS
 extern DWORD OglTlsIndex;
 
@@ -87,7 +137,7 @@ HGLRC
 IntGetCurrentRC(void)
 {
     struct Opengl32_ThreadData* data = TlsGetValue(OglTlsIndex);
-    return data->hglrc;
+    return data ? data->hglrc : NULL;
 }
 
 static inline
@@ -168,3 +218,5 @@ PROC sw_GetProcAddress(LPCSTR name);
 BOOL sw_CopyContext(DHGLRC dhglrcSrc, DHGLRC dhglrcDst, UINT mask);
 BOOL sw_ShareLists(DHGLRC dhglrcSrc, DHGLRC dhglrcDst);
 BOOL sw_SwapBuffers(HDC hdc, struct wgl_dc_data* dc_data);
+
+#endif /* _OPENGL32_PCH_ */