mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[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 svn path=/trunk/; revision=51019
This commit is contained in:
parent
1f0f4f62b0
commit
0cc06c7b45
3 changed files with 6 additions and 4 deletions
|
@ -18,6 +18,8 @@ typedef struct tagICDTable
|
||||||
PROC dispatch_table[812]; /*!< Table containing \a num_funcs pointers to OpenGL functions */
|
PROC dispatch_table[812]; /*!< Table containing \a num_funcs pointers to OpenGL functions */
|
||||||
} ICDTable, *PICDTable;
|
} ICDTable, *PICDTable;
|
||||||
|
|
||||||
|
#define DISPATCH_TABLE_SIZE 812*sizeof(PROC)
|
||||||
|
|
||||||
#endif /* OPENGL32_PRIVATE_ICDTABLE_H */
|
#endif /* OPENGL32_PRIVATE_ICDTABLE_H */
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -34,7 +34,7 @@ OPENGL32_ThreadAttach( void )
|
||||||
|
|
||||||
dispatchTable = (PROC*)HeapAlloc( GetProcessHeap(),
|
dispatchTable = (PROC*)HeapAlloc( GetProcessHeap(),
|
||||||
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
|
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
|
||||||
sizeof (((ICDTable *)(0))->dispatch_table) );
|
DISPATCH_TABLE_SIZE );
|
||||||
if (dispatchTable == NULL)
|
if (dispatchTable == NULL)
|
||||||
{
|
{
|
||||||
DBGPRINT( "Error: Couldn't allocate GL dispatch table" );
|
DBGPRINT( "Error: Couldn't allocate GL dispatch table" );
|
||||||
|
@ -84,6 +84,7 @@ OPENGL32_ThreadDetach( void )
|
||||||
GetLastError() );
|
GetLastError() );
|
||||||
lpData = NULL;
|
lpData = NULL;
|
||||||
}
|
}
|
||||||
|
TlsSetValue( OPENGL32_tls, NULL );
|
||||||
|
|
||||||
if (teb->glTable != NULL)
|
if (teb->glTable != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -454,13 +454,12 @@ ROSGL_SetContextCallBack( const ICDTable *table )
|
||||||
/* save table */
|
/* save table */
|
||||||
size = sizeof (PROC) * table->num_funcs;
|
size = sizeof (PROC) * table->num_funcs;
|
||||||
memcpy( tebTable, table->dispatch_table, size );
|
memcpy( tebTable, table->dispatch_table, size );
|
||||||
memset( tebTable + table->num_funcs, 0,
|
memset( tebTable + table->num_funcs, 0, DISPATCH_TABLE_SIZE - size );
|
||||||
sizeof (table->dispatch_table) - size );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBGPRINT( "Unsetting current context" );
|
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 */
|
/* put in empty functions as long as we dont have a fallback */
|
||||||
|
|
Loading…
Reference in a new issue