Sync with trunk revision 64099.
[reactos.git] / dll / opengl / opengl32 / dllmain.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS
4 * FILE: dll/opengl/opengl32/dllmain.c
5 * PURPOSE: OpenGL32 DLL
6 */
7
8 #include "opengl32.h"
9
10 #ifdef OPENGL32_USE_TLS
11 DWORD OglTlsIndex = 0xFFFFFFFF;
12 #endif
13
14 BOOL WINAPI
15 DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
16 {
17 #ifdef OPENGL32_USE_TLS
18 struct Opengl32_ThreadData* ThreadData;
19 #endif
20 switch ( Reason )
21 {
22 case DLL_PROCESS_ATTACH:
23 #ifdef OPENGL32_USE_TLS
24 OglTlsIndex = TlsAlloc();
25 if(OglTlsIndex == TLS_OUT_OF_INDEXES)
26 return FALSE;
27 #endif
28 /* Initialize Context list */
29 InitializeListHead(&ContextListHead);
30 /* no break */
31 case DLL_THREAD_ATTACH:
32 #ifdef OPENGL32_USE_TLS
33 ThreadData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ThreadData));
34 if(!ThreadData)
35 return FALSE;
36 TlsSetValue(OglTlsIndex, ThreadData);
37 ThreadData->glDispatchTable = &StubTable.glDispatchTable;
38 ThreadData->hglrc = NULL;
39 ThreadData->hdc = NULL;
40 ThreadData->dc_data = NULL;
41 #else
42 NtCurrentTeb()->glTable = &StubTable.glDispatchTable;
43 #endif // defined(OPENGL32_USE_TLS)
44 break;
45
46 case DLL_THREAD_DETACH:
47 /* Set NULL context for this thread */
48 wglMakeCurrent(NULL, NULL);
49 /* Clean up */
50 #ifdef OPENGL32_USE_TLS
51 ThreadData = TlsGetValue(OglTlsIndex);
52 if(ThreadData)
53 HeapFree(GetProcessHeap(), 0, ThreadData);
54 #else
55 NtCurrentTeb()->glTable = NULL;
56 #endif // defined(OPENGL32_USE_TLS)
57 break;
58 case DLL_PROCESS_DETACH:
59 /* Clean up */
60 if (!Reserved)
61 {
62 /* The process is not shutting down: release everything */
63 wglMakeCurrent(NULL, NULL);
64 IntDeleteAllContexts();
65 IntDeleteAllICDs();
66 #ifdef OPENGL32_USE_TLS
67 ThreadData = TlsGetValue(OglTlsIndex);
68 if(ThreadData)
69 HeapFree(GetProcessHeap(), 0, ThreadData);
70 #endif
71 }
72 #ifdef OPENGL32_USE_TLS
73 TlsFree(OglTlsIndex);
74 #endif
75 break;
76 }
77
78 return TRUE;
79 }