2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: dll/opengl/opengl32/dllmain.c
5 * PURPOSE: OpenGL32 DLL
10 #ifdef OPENGL32_USE_TLS
11 DWORD OglTlsIndex
= 0xFFFFFFFF;
15 DllMain(HINSTANCE hInstance
, DWORD Reason
, LPVOID Reserved
)
17 #ifdef OPENGL32_USE_TLS
18 struct Opengl32_ThreadData
* ThreadData
;
22 /* The DLL is loading due to process
23 * initialization or a call to LoadLibrary.
25 case DLL_PROCESS_ATTACH
:
26 #ifdef OPENGL32_USE_TLS
27 OglTlsIndex
= TlsAlloc();
28 if(OglTlsIndex
== TLS_OUT_OF_INDEXES
)
32 case DLL_THREAD_ATTACH
:
33 #ifdef OPENGL32_USE_TLS
34 ThreadData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*ThreadData
));
37 TlsSetValue(OglTlsIndex
, ThreadData
);
38 ThreadData
->glDispatchTable
= &StubTable
.glDispatchTable
;
39 ThreadData
->hglrc
= NULL
;
40 ThreadData
->hdc
= NULL
;
41 ThreadData
->dc_data
= NULL
;
43 NtCurrentTeb()->glTable
= &StubTable
.glDispatchTable
;
44 #endif // defined(OPENGL32_USE_TLS)
47 case DLL_THREAD_DETACH
:
49 #ifdef OPENGL32_USE_TLS
50 ThreadData
= TlsGetValue(OglTlsIndex
);
52 HeapFree(GetProcessHeap(), 0, ThreadData
);
54 NtCurrentTeb
->glTable
= NULL
;
55 #endif // defined(OPENGL32_USE_TLS)
58 case DLL_PROCESS_DETACH
:
60 #ifdef OPENGL32_USE_TLS
61 ThreadData
= TlsGetValue(OglTlsIndex
);
63 HeapFree(GetProcessHeap(), 0, ThreadData
);
66 NtCurrentTeb
->glTable
= NULL
;
67 #endif // defined(OPENGL32_USE_TLS)