Author: jgardou Date: Fri Mar 11 18:17:34 2011 New Revision: 51019
URL: http://svn.reactos.org/svn/reactos?rev=51019&view=rev Log: [OPENGL32] - use well defined macro instead of weird pointer calculation - reset thread specific data on a thread detach call Fixes crash in heroes 3 and probably others
Modified: trunk/reactos/dll/win32/opengl32/icdtable.h trunk/reactos/dll/win32/opengl32/opengl32.c trunk/reactos/dll/win32/opengl32/wgl.c
Modified: trunk/reactos/dll/win32/opengl32/icdtable.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/opengl32/icdtable... ============================================================================== --- trunk/reactos/dll/win32/opengl32/icdtable.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/opengl32/icdtable.h [iso-8859-1] Fri Mar 11 18:17:34 2011 @@ -18,6 +18,8 @@ PROC dispatch_table[812]; /*!< Table containing \a num_funcs pointers to OpenGL functions */ } ICDTable, *PICDTable;
+#define DISPATCH_TABLE_SIZE 812*sizeof(PROC) + #endif /* OPENGL32_PRIVATE_ICDTABLE_H */
/* EOF */
Modified: trunk/reactos/dll/win32/opengl32/opengl32.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/opengl32/opengl32... ============================================================================== --- trunk/reactos/dll/win32/opengl32/opengl32.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/opengl32/opengl32.c [iso-8859-1] Fri Mar 11 18:17:34 2011 @@ -34,7 +34,7 @@
dispatchTable = (PROC*)HeapAlloc( GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, - sizeof (((ICDTable *)(0))->dispatch_table) ); + DISPATCH_TABLE_SIZE ); if (dispatchTable == NULL) { DBGPRINT( "Error: Couldn't allocate GL dispatch table" ); @@ -84,6 +84,7 @@ GetLastError() ); lpData = NULL; } + TlsSetValue( OPENGL32_tls, NULL );
if (teb->glTable != NULL) {
Modified: trunk/reactos/dll/win32/opengl32/wgl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/opengl32/wgl.c?re... ============================================================================== --- trunk/reactos/dll/win32/opengl32/wgl.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/opengl32/wgl.c [iso-8859-1] Fri Mar 11 18:17:34 2011 @@ -454,13 +454,12 @@ /* save table */ size = sizeof (PROC) * table->num_funcs; memcpy( tebTable, table->dispatch_table, size ); - memset( tebTable + table->num_funcs, 0, - sizeof (table->dispatch_table) - size ); + memset( tebTable + table->num_funcs, 0, DISPATCH_TABLE_SIZE - size ); } else { DBGPRINT( "Unsetting current context" ); - memset( tebTable, 0, sizeof (table->dispatch_table) ); + memset( tebTable, 0, DISPATCH_TABLE_SIZE ); }
/* put in empty functions as long as we dont have a fallback */