mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-02-03 10:45:10 +00:00
ref_gl: integrate gl2shim extensions
This commit is contained in:
parent
e23b632ce5
commit
d254bac16b
@ -41,13 +41,7 @@ Limitations:
|
|||||||
#define MAX_PROGS 32
|
#define MAX_PROGS 32
|
||||||
// must be LESS GL2_MAX_VERTS
|
// must be LESS GL2_MAX_VERTS
|
||||||
#define MAX_BEGINEND_VERTS 8192
|
#define MAX_BEGINEND_VERTS 8192
|
||||||
void* (APIENTRY* _pglMapBufferRange)(GLenum target, GLsizei offset, GLsizei length, GLbitfield access);
|
|
||||||
void* (APIENTRY* _pglFlushMappedBufferRange)(GLenum target, GLsizei offset, GLsizei length);
|
|
||||||
void* (APIENTRY* _pglDrawRangeElementsBaseVertex)( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLuint vertex );
|
|
||||||
void (APIENTRY*_pglBufferStorage)( GLenum target,
|
|
||||||
GLsizei size,
|
|
||||||
const GLvoid * data,
|
|
||||||
GLbitfield flags);
|
|
||||||
void (APIENTRY*_pglWaitSync)( void * sync,
|
void (APIENTRY*_pglWaitSync)( void * sync,
|
||||||
GLbitfield flags,
|
GLbitfield flags,
|
||||||
uint64_t timeout);
|
uint64_t timeout);
|
||||||
@ -186,6 +180,8 @@ static const char *gl2wrap_attr_name[GL2_ATTR_MAX] =
|
|||||||
"inTexCoord1",
|
"inTexCoord1",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MB(x,y) (x?GL_MAP_##y##_BIT:0)
|
||||||
|
|
||||||
static void (APIENTRY*rpglEnable)(GLenum e);
|
static void (APIENTRY*rpglEnable)(GLenum e);
|
||||||
static void (APIENTRY*rpglDisable)(GLenum e);
|
static void (APIENTRY*rpglDisable)(GLenum e);
|
||||||
static void (APIENTRY*rpglDrawElements )( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
|
static void (APIENTRY*rpglDrawElements )( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
|
||||||
@ -451,7 +447,7 @@ static gl2wrap_prog_t *GL2_SetProg( const GLuint flags )
|
|||||||
static void GL2_InitTriQuads( void )
|
static void GL2_InitTriQuads( void )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for( i = 0; i < (!!_pglDrawRangeElementsBaseVertex?1:4); i++ )
|
for( i = 0; i < (!!pglDrawRangeElementsBaseVertex?1:4); i++ )
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
GLushort triquads_array[TRIQUADS_SIZE];
|
GLushort triquads_array[TRIQUADS_SIZE];
|
||||||
@ -485,22 +481,10 @@ static void GL2_InitIncrementalBuffer( int i, GLuint size )
|
|||||||
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][j] );
|
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][j] );
|
||||||
if( gl2wrap_config.buf_storage )
|
if( gl2wrap_config.buf_storage )
|
||||||
{
|
{
|
||||||
_pglBufferStorage( GL_ARRAY_BUFFER_ARB, size, NULL,
|
GLuint flags = GL_MAP_WRITE_BIT | MB(!gl2wrap_config.coherent,FLUSH_EXPLICIT) |
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
GL_MAP_PERSISTENT_BIT | MB(gl2wrap_config.coherent,COHERENT);
|
||||||
| (gl2wrap_config.coherent?0x80:0)
|
pglBufferStorage( GL_ARRAY_BUFFER_ARB, size, NULL, GL_MAP_WRITE_BIT | MB(gl2wrap_config.coherent,COHERENT)| GL_MAP_PERSISTENT_BIT );
|
||||||
| 0x40
|
gl2wrap.mappings[i][j] = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, size, flags);
|
||||||
);
|
|
||||||
gl2wrap.mappings[i][j] = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
|
||||||
0,
|
|
||||||
size,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
// | 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
// | 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
// |0x0020 //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(!gl2wrap_config.coherent?0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
| 0X40
|
|
||||||
|(gl2wrap_config.coherent?0x80:0) // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pglBufferDataARB( GL_ARRAY_BUFFER_ARB, size, NULL, GL_STREAM_DRAW_ARB );
|
pglBufferDataARB( GL_ARRAY_BUFFER_ARB, size, NULL, GL_STREAM_DRAW_ARB );
|
||||||
@ -664,34 +648,15 @@ static void GL2_ResetPersistentBuffer( void )
|
|||||||
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle] );
|
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle] );
|
||||||
if(gl2wrap_config.buf_storage)
|
if(gl2wrap_config.buf_storage)
|
||||||
{
|
{
|
||||||
|
GLuint flags = GL_MAP_WRITE_BIT | MB(!gl2wrap_config.coherent,FLUSH_EXPLICIT) |
|
||||||
|
GL_MAP_PERSISTENT_BIT | MB(gl2wrap_config.coherent,COHERENT);
|
||||||
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
||||||
gl2wrap.mappings[i][gl2wrap.attrbufcycle] = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
gl2wrap.mappings[i][gl2wrap.attrbufcycle] = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, size, flags);
|
||||||
0,
|
|
||||||
size,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
// | 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
// | 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
// |0x0020 //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(!gl2wrap_config.coherent?0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
| 0X40
|
|
||||||
| (gl2wrap_config.coherent?0x00000080:0) // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
gl2wrap.attrbuf[i] = gl2wrap.mappings[i][gl2wrap.attrbufcycle];
|
gl2wrap.attrbuf[i] = gl2wrap.mappings[i][gl2wrap.attrbufcycle];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
void *mem = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
void *mem = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, size, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT );
|
||||||
0,
|
|
||||||
size,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
// | 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
| 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
// |0x0020 //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
// |0x0010 // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
//| 0X40
|
|
||||||
//| 0x00000080 // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
(void)mem;
|
(void)mem;
|
||||||
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
||||||
}
|
}
|
||||||
@ -756,20 +721,14 @@ static void GL2_UpdateIncrementalBuffer( gl2wrap_prog_t *prog, int count )
|
|||||||
if ( prog->attridx[i] >= 0 )
|
if ( prog->attridx[i] >= 0 )
|
||||||
{
|
{
|
||||||
void *mem;
|
void *mem;
|
||||||
|
GLuint flags = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT |
|
||||||
|
MB(gl2wrap_config.async,UNSYNCHRONIZED) |
|
||||||
|
MB(gl2wrap_config.force_flush,FLUSH_EXPLICIT);
|
||||||
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle]);
|
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle]);
|
||||||
mem = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
mem = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, gl2wrap_attr_size[i] * 4 * gl2wrap.begin, gl2wrap_attr_size[i] * 4 * count, flags);
|
||||||
gl2wrap_attr_size[i] * 4 * gl2wrap.begin,
|
|
||||||
gl2wrap_attr_size[i] * 4 * count,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
| 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
// | 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
|(gl2wrap_config.async ? 0x0020:0) //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(gl2wrap_config.force_flush ? 0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
//| 0x00000080 // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
memcpy(mem, gl2wrap.attrbuf[i] + gl2wrap_attr_size[i] * gl2wrap.begin, gl2wrap_attr_size[i] * 4 * count);
|
memcpy(mem, gl2wrap.attrbuf[i] + gl2wrap_attr_size[i] * gl2wrap.begin, gl2wrap_attr_size[i] * 4 * count);
|
||||||
if( gl2wrap_config.force_flush )
|
if( gl2wrap_config.force_flush )
|
||||||
_pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, 0, gl2wrap_attr_size[i] * 4 * count );
|
pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, 0, gl2wrap_attr_size[i] * 4 * count );
|
||||||
pglUnmapBufferARB( GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB( GL_ARRAY_BUFFER_ARB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -782,7 +741,7 @@ static void GL2_UpdateIncrementalBuffer( gl2wrap_prog_t *prog, int count )
|
|||||||
if ( prog->attridx[i] >= 0 )
|
if ( prog->attridx[i] >= 0 )
|
||||||
{
|
{
|
||||||
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle]);
|
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap.attrbufobj[i][gl2wrap.attrbufcycle]);
|
||||||
_pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, 0, gl2wrap_attr_size[i] * 4 * count );
|
pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, 0, gl2wrap_attr_size[i] * 4 * count );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -849,16 +808,9 @@ void GL2_FlushPrims( void )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
void *mem = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
GLuint flags = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT |
|
||||||
0,
|
MB(gl2wrap_config.async,UNSYNCHRONIZED)| MB(gl2wrap_config.force_flush,FLUSH_EXPLICIT);
|
||||||
gl2wrap_attr_size[i] * 4 * count,
|
void *mem = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, gl2wrap_attr_size[i] * 4 * count, flags );
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
| 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
| 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
|(gl2wrap_config.async ? 0x0020:0) //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(gl2wrap_config.force_flush ? 0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
//| 0x00000080 // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
memcpy( mem, gl2wrap.attrbuf[i] + gl2wrap_attr_size[i] * gl2wrap.begin, gl2wrap_attr_size[i] * 4 * count);
|
memcpy( mem, gl2wrap.attrbuf[i] + gl2wrap_attr_size[i] * gl2wrap.begin, gl2wrap_attr_size[i] * 4 * count);
|
||||||
pglUnmapBufferARB( GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB( GL_ARRAY_BUFFER_ARB);
|
||||||
}
|
}
|
||||||
@ -882,7 +834,7 @@ void GL2_FlushPrims( void )
|
|||||||
// simple case, one quad may draw like polygon(4)
|
// simple case, one quad may draw like polygon(4)
|
||||||
if(count == 4)
|
if(count == 4)
|
||||||
rpglDrawArrays( GL_TRIANGLE_FAN, startindex, count );
|
rpglDrawArrays( GL_TRIANGLE_FAN, startindex, count );
|
||||||
else if(_pglDrawRangeElementsBaseVertex)
|
else if(pglDrawRangeElementsBaseVertex)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Opengl deprecated QUADS, but made some workarounds availiable
|
* Opengl deprecated QUADS, but made some workarounds availiable
|
||||||
@ -892,7 +844,7 @@ void GL2_FlushPrims( void )
|
|||||||
* or just put 0-4 offset when it's availiable
|
* or just put 0-4 offset when it's availiable
|
||||||
* */
|
* */
|
||||||
pglBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, gl2wrap.triquads_ibo[0] );
|
pglBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, gl2wrap.triquads_ibo[0] );
|
||||||
_pglDrawRangeElementsBaseVertex( GL_TRIANGLES, startindex, startindex + count, Q_min(count / 4 * 6,TRIQUADS_SIZE * 6 - startindex), GL_UNSIGNED_SHORT, (void*)(size_t)(startindex / 4 * 6 * 2), startindex % 4 );
|
pglDrawRangeElementsBaseVertex( GL_TRIANGLES, startindex, startindex + count, Q_min(count / 4 * 6,TRIQUADS_SIZE * 6 - startindex), GL_UNSIGNED_SHORT, (void*)(size_t)(startindex / 4 * 6 * 2), startindex % 4 );
|
||||||
pglBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
pglBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
||||||
}
|
}
|
||||||
else if(rpglDrawRangeElements)
|
else if(rpglDrawRangeElements)
|
||||||
@ -1402,19 +1354,11 @@ static void GL2_UpdatePersistentArrayBuffer( gl2wrap_prog_t *prog, int size, int
|
|||||||
|
|
||||||
if(gl2wrap_arrays.stream_counter + size > GL2_MAX_VERTS * 64)
|
if(gl2wrap_arrays.stream_counter + size > GL2_MAX_VERTS * 64)
|
||||||
{
|
{
|
||||||
|
GLuint flags = GL_MAP_WRITE_BIT | MB(!gl2wrap_config.coherent,FLUSH_EXPLICIT)|
|
||||||
|
GL_MAP_PERSISTENT_BIT | MB(gl2wrap_config.coherent,COHERENT);
|
||||||
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
||||||
gl2wrap_arrays.stream_counter = 0;
|
gl2wrap_arrays.stream_counter = 0;
|
||||||
gl2wrap_arrays.stream_pointer = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
gl2wrap_arrays.stream_pointer = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, GL2_MAX_VERTS * 64, flags);
|
||||||
0,
|
|
||||||
GL2_MAX_VERTS * 64,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
// | 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
// | 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
// |0x0020 //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(!gl2wrap_config.coherent?0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
| 0X40
|
|
||||||
| (gl2wrap_config.coherent?0x00000080:0) // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
//i = -1;
|
//i = -1;
|
||||||
//continue;
|
//continue;
|
||||||
size = end * stride, offset = 0;
|
size = end * stride, offset = 0;
|
||||||
@ -1422,7 +1366,7 @@ static void GL2_UpdatePersistentArrayBuffer( gl2wrap_prog_t *prog, int size, int
|
|||||||
|
|
||||||
memcpy(((char*)gl2wrap_arrays.stream_pointer) + gl2wrap_arrays.stream_counter, ((char*)gl2wrap_arrays.ptr[attr].userptr) + offset, size);
|
memcpy(((char*)gl2wrap_arrays.stream_pointer) + gl2wrap_arrays.stream_counter, ((char*)gl2wrap_arrays.ptr[attr].userptr) + offset, size);
|
||||||
if( !gl2wrap_config.coherent )
|
if( !gl2wrap_config.coherent )
|
||||||
_pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, gl2wrap_arrays.stream_counter, size );
|
pglFlushMappedBufferRange( GL_ARRAY_BUFFER_ARB, gl2wrap_arrays.stream_counter, size );
|
||||||
pglVertexAttribPointerARB( prog->attridx[attr], gl2wrap_arrays.ptr[attr].size, gl2wrap_arrays.ptr[attr].type, attr == GL2_ATTR_COLOR, gl2wrap_arrays.ptr[attr].stride, (void*)(gl2wrap_arrays.stream_counter - offset) );
|
pglVertexAttribPointerARB( prog->attridx[attr], gl2wrap_arrays.ptr[attr].size, gl2wrap_arrays.ptr[attr].type, attr == GL2_ATTR_COLOR, gl2wrap_arrays.ptr[attr].stride, (void*)(gl2wrap_arrays.stream_counter - offset) );
|
||||||
gl2wrap_arrays.stream_counter += size;
|
gl2wrap_arrays.stream_counter += size;
|
||||||
}
|
}
|
||||||
@ -1438,21 +1382,14 @@ static void GL2_UpdateIncrementalArrayBuffer( gl2wrap_prog_t *prog, int size, in
|
|||||||
{
|
{
|
||||||
void *mem;
|
void *mem;
|
||||||
qboolean inv = false;
|
qboolean inv = false;
|
||||||
|
GLuint flags = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT | MB(inv,INVALIDATE_BUFFER)|
|
||||||
|
MB(gl2wrap_config.async, UNSYNCHRONIZED)| MB(gl2wrap_config.force_flush, FLUSH_EXPLICIT);
|
||||||
if(gl2wrap_arrays.stream_counter + size > GL2_MAX_VERTS * 64)
|
if(gl2wrap_arrays.stream_counter + size > GL2_MAX_VERTS * 64)
|
||||||
size = end * stride, offset = 0, gl2wrap_arrays.stream_counter = 0, inv = true;
|
size = end * stride, offset = 0, gl2wrap_arrays.stream_counter = 0, inv = true;
|
||||||
mem = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
mem = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, gl2wrap_arrays.stream_counter, size, flags );
|
||||||
gl2wrap_arrays.stream_counter,
|
|
||||||
size,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
| 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
| (inv?0x0008:0) // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
|(gl2wrap_config.async ? 0x0020:0) //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
|(gl2wrap_config.force_flush ? 0x0010:0) // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
// GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
memcpy(mem, ((char*)gl2wrap_arrays.ptr[attr].userptr) + offset, size);
|
memcpy(mem, ((char*)gl2wrap_arrays.ptr[attr].userptr) + offset, size);
|
||||||
if(gl2wrap_config.force_flush)
|
if(gl2wrap_config.force_flush)
|
||||||
_pglFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, 0, size);
|
pglFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, 0, size);
|
||||||
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
pglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
||||||
pglVertexAttribPointerARB( prog->attridx[attr], gl2wrap_arrays.ptr[attr].size, gl2wrap_arrays.ptr[attr].type, attr == GL2_ATTR_COLOR, gl2wrap_arrays.ptr[attr].stride, (void*)(gl2wrap_arrays.stream_counter - offset) );
|
pglVertexAttribPointerARB( prog->attridx[attr], gl2wrap_arrays.ptr[attr].size, gl2wrap_arrays.ptr[attr].type, attr == GL2_ATTR_COLOR, gl2wrap_arrays.ptr[attr].stride, (void*)(gl2wrap_arrays.stream_counter - offset) );
|
||||||
gl2wrap_arrays.stream_counter += size;
|
gl2wrap_arrays.stream_counter += size;
|
||||||
@ -1467,25 +1404,12 @@ Prepare BufferStorage
|
|||||||
*/
|
*/
|
||||||
static void GL2_AllocArrayPersistenStorage( void )
|
static void GL2_AllocArrayPersistenStorage( void )
|
||||||
{
|
{
|
||||||
|
GLuint flags = GL_MAP_WRITE_BIT | MB(!gl2wrap_config.coherent,FLUSH_EXPLICIT)
|
||||||
|
| GL_MAP_PERSISTENT_BIT | MB(gl2wrap_config.coherent, COHERENT);
|
||||||
pglGenBuffersARB( 1, &gl2wrap_arrays.stream_buffer );
|
pglGenBuffersARB( 1, &gl2wrap_arrays.stream_buffer );
|
||||||
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap_arrays.stream_buffer );
|
rpglBindBufferARB( GL_ARRAY_BUFFER_ARB, gl2wrap_arrays.stream_buffer );
|
||||||
_pglBufferStorage( GL_ARRAY_BUFFER_ARB, GL2_MAX_VERTS * 64, NULL,
|
pglBufferStorage( GL_ARRAY_BUFFER_ARB, GL2_MAX_VERTS * 64, NULL, GL_MAP_WRITE_BIT | MB(gl2wrap_config.coherent,COHERENT)|GL_MAP_PERSISTENT_BIT);
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
gl2wrap_arrays.stream_pointer = pglMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, GL2_MAX_VERTS * 64, flags );
|
||||||
| (gl2wrap_config.coherent?0x00000080:0)
|
|
||||||
| 0x40
|
|
||||||
);
|
|
||||||
gl2wrap_arrays.stream_pointer = _pglMapBufferRange(GL_ARRAY_BUFFER_ARB,
|
|
||||||
0,
|
|
||||||
GL2_MAX_VERTS * 64,
|
|
||||||
0x0002 //GL_MAP_WRITE_BIT
|
|
||||||
// | 0x0004// GL_MAP_INVALIDATE_RANGE_BIT.
|
|
||||||
// | 0x0008 // GL_MAP_INVALIDATE_BUFFER_BIT
|
|
||||||
// |0x0020 //GL_MAP_UNSYNCHRONIZED_BIT
|
|
||||||
// |0x0010 // GL_MAP_FLUSH_EXPLICIT_BIT
|
|
||||||
| (!gl2wrap_config.coherent?0x0010:0)
|
|
||||||
| 0X40
|
|
||||||
| (gl2wrap_config.coherent?0x00000080:0) // GL_MAP_COHERENT_BIT
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GL2_AllocArrays( void )
|
static void GL2_AllocArrays( void )
|
||||||
@ -1724,16 +1648,16 @@ void GL2_ShimInstall( void )
|
|||||||
GL2_OVERRIDE_PTR( VertexPointer )
|
GL2_OVERRIDE_PTR( VertexPointer )
|
||||||
GL2_OVERRIDE_PTR( ColorPointer )
|
GL2_OVERRIDE_PTR( ColorPointer )
|
||||||
GL2_OVERRIDE_PTR( TexCoordPointer )
|
GL2_OVERRIDE_PTR( TexCoordPointer )
|
||||||
_pglMapBufferRange = gEngfuncs.GL_GetProcAddress("glMapBufferRange");
|
//pglMapBufferRange = gEngfuncs.GL_GetProcAddress("glMapBufferRange");
|
||||||
pglUnmapBufferARB = gEngfuncs.GL_GetProcAddress("glUnmapBuffer");
|
//pglUnmapBufferARB = gEngfuncs.GL_GetProcAddress("glUnmapBuffer");
|
||||||
_pglFlushMappedBufferRange = gEngfuncs.GL_GetProcAddress("glFlushMappedBufferRange");
|
//pglFlushMappedBufferRange = gEngfuncs.GL_GetProcAddress("glFlushMappedBufferRange");
|
||||||
_pglBufferStorage = gEngfuncs.GL_GetProcAddress("glBufferStorage");
|
//pglBufferStorage = gEngfuncs.GL_GetProcAddress("glBufferStorage");
|
||||||
_pglMemoryBarrier = gEngfuncs.GL_GetProcAddress("glMemoryBarrier");
|
//_pglMemoryBarrier = gEngfuncs.GL_GetProcAddress("glMemoryBarrier");
|
||||||
_pglFenceSync = gEngfuncs.GL_GetProcAddress("glFenceSync");
|
//_pglFenceSync = gEngfuncs.GL_GetProcAddress("glFenceSync");
|
||||||
_pglWaitSync = gEngfuncs.GL_GetProcAddress("glWaitSync");
|
//_pglWaitSync = gEngfuncs.GL_GetProcAddress("glWaitSync");
|
||||||
_pglClientWaitSync = gEngfuncs.GL_GetProcAddress("glClientWaitSync");
|
//_pglClientWaitSync = gEngfuncs.GL_GetProcAddress("glClientWaitSync");
|
||||||
_pglDeleteSync = gEngfuncs.GL_GetProcAddress("glDeleteSync");
|
//_pglDeleteSync = gEngfuncs.GL_GetProcAddress("glDeleteSync");
|
||||||
_pglDrawRangeElementsBaseVertex = gEngfuncs.GL_GetProcAddress("glDrawRangeElementsBaseVertex");
|
//pglDrawRangeElementsBaseVertex = gEngfuncs.GL_GetProcAddress("glDrawRangeElementsBaseVertex");
|
||||||
|
|
||||||
#ifdef QUAD_BATCH
|
#ifdef QUAD_BATCH
|
||||||
GL2_OVERRIDE_PTR_B( BindTexture )
|
GL2_OVERRIDE_PTR_B( BindTexture )
|
||||||
|
@ -815,7 +815,13 @@ typedef float GLmatrix[16];
|
|||||||
|
|
||||||
// GL Core additions
|
// GL Core additions
|
||||||
#define GL_NUM_EXTENSIONS 0x821D
|
#define GL_NUM_EXTENSIONS 0x821D
|
||||||
|
#define GL_MAP_WRITE_BIT 0x0002
|
||||||
|
#define GL_MAP_COHERENT_BIT 0x0080
|
||||||
|
#define GL_MAP_PERSISTENT_BIT 0x0040
|
||||||
|
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
|
||||||
|
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
|
||||||
|
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
|
||||||
|
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
|
||||||
|
|
||||||
|
|
||||||
#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
||||||
@ -1366,9 +1372,15 @@ APIENTRY_LINKAGE void GL_FUNCTION( glGenVertexArrays )( GLsizei n, const GLuint
|
|||||||
APIENTRY_LINKAGE GLboolean GL_FUNCTION( glIsVertexArray )( GLuint array );
|
APIENTRY_LINKAGE GLboolean GL_FUNCTION( glIsVertexArray )( GLuint array );
|
||||||
APIENTRY_LINKAGE void GL_FUNCTION( glSwapInterval ) ( int interval );
|
APIENTRY_LINKAGE void GL_FUNCTION( glSwapInterval ) ( int interval );
|
||||||
|
|
||||||
|
// arb shaders change in core
|
||||||
APIENTRY_LINKAGE void GL_FUNCTION( glDeleteProgram )(GLuint program);
|
APIENTRY_LINKAGE void GL_FUNCTION( glDeleteProgram )(GLuint program);
|
||||||
APIENTRY_LINKAGE void GL_FUNCTION( glProgramiv )(GLuint program, GLenum e, GLuint *v);
|
APIENTRY_LINKAGE void GL_FUNCTION( glProgramiv )(GLuint program, GLenum e, GLuint *v);
|
||||||
|
|
||||||
|
// gl2shim deps
|
||||||
|
APIENTRY_LINKAGE void GL_FUNCTION( glBufferStorage )( GLenum target, GLsizei size, const GLvoid * data, GLbitfield flags);
|
||||||
|
APIENTRY_LINKAGE void GL_FUNCTION( glFlushMappedBufferRange )(GLenum target, GLsizei offset, GLsizei length);
|
||||||
|
APIENTRY_LINKAGE void *GL_FUNCTION( glMapBufferRange )(GLenum target, GLsizei offset, GLsizei length, GLbitfield access);
|
||||||
|
APIENTRY_LINKAGE void GL_FUNCTION( glDrawRangeElementsBaseVertex )( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLuint vertex );
|
||||||
|
|
||||||
#if !defined( XASH_GL_STATIC ) || (!defined( XASH_GLES ) && !defined( XASH_GL4ES ))
|
#if !defined( XASH_GL_STATIC ) || (!defined( XASH_GLES ) && !defined( XASH_GL4ES ))
|
||||||
APIENTRY_LINKAGE void GL_FUNCTION( glTexImage2DMultisample )(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
|
APIENTRY_LINKAGE void GL_FUNCTION( glTexImage2DMultisample )(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
|
||||||
|
@ -622,6 +622,9 @@ enum
|
|||||||
GL_ARB_TEXTURE_COMPRESSION_BPTC,
|
GL_ARB_TEXTURE_COMPRESSION_BPTC,
|
||||||
GL_SHADER_OBJECTS_EXT,
|
GL_SHADER_OBJECTS_EXT,
|
||||||
GL_ARB_VERTEX_ARRAY_OBJECT_EXT,
|
GL_ARB_VERTEX_ARRAY_OBJECT_EXT,
|
||||||
|
GL_BUFFER_STORAGE_EXT,
|
||||||
|
GL_MAP_BUFFER_RANGE_EXT,
|
||||||
|
GL_DRAW_RANGE_ELEMENTS_BASE_VERTEX_EXT,
|
||||||
GL_EXTCOUNT, // must be last
|
GL_EXTCOUNT, // must be last
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -247,7 +247,32 @@ static dllfunc_t drawrangeelementsextfuncs[] =
|
|||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// mangling in gl2shim???
|
||||||
|
// still need resolve some ext dynamicly, and mangling beginend wrappers will help only with LTO
|
||||||
|
// anyway this will not work with gl-wes/nanogl, we do not link to libGLESv2, so skip this now
|
||||||
#ifndef XASH_GL_STATIC
|
#ifndef XASH_GL_STATIC
|
||||||
|
|
||||||
|
static dllfunc_t mapbufferrangefuncs[] =
|
||||||
|
{
|
||||||
|
{ GL_CALL( glMapBufferRange ) },
|
||||||
|
{ GL_CALL( glFlushMappedBufferRange ) },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static dllfunc_t drawrangeelementsbasevertexfuncs[] =
|
||||||
|
{
|
||||||
|
{ GL_CALL( glDrawRangeElementsBaseVertex ) },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static dllfunc_t bufferstoragefuncs[] =
|
||||||
|
{
|
||||||
|
{ GL_CALL( glBufferStorage ) },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static dllfunc_t shaderobjectsfuncs[] =
|
static dllfunc_t shaderobjectsfuncs[] =
|
||||||
{
|
{
|
||||||
{ GL_CALL( glDeleteObjectARB ) },
|
{ GL_CALL( glDeleteObjectARB ) },
|
||||||
@ -729,6 +754,17 @@ void GL_InitExtensionsGLES( void )
|
|||||||
case GL_DRAW_RANGEELEMENTS_EXT:
|
case GL_DRAW_RANGEELEMENTS_EXT:
|
||||||
GL_CheckExtension( "draw_range_elements", drawrangeelementsfuncs, "gl_drawrangeelements", extid, 0 );
|
GL_CheckExtension( "draw_range_elements", drawrangeelementsfuncs, "gl_drawrangeelements", extid, 0 );
|
||||||
break;
|
break;
|
||||||
|
case GL_DRAW_RANGE_ELEMENTS_BASE_VERTEX_EXT:
|
||||||
|
if( !GL_CheckExtension( "GL_OES_draw_elements_base_vertex", drawrangeelementsbasevertexfuncs, "gl_drawrangeelementsbasevertex", GL_DRAW_RANGE_ELEMENTS_BASE_VERTEX_EXT, 0 ) )
|
||||||
|
GL_CheckExtension( "GL_EXT_draw_elements_base_vertex", drawrangeelementsbasevertexfuncs, "gl_drawrangeelementsbasevertex", GL_DRAW_RANGE_ELEMENTS_BASE_VERTEX_EXT, 3.2 );
|
||||||
|
break;
|
||||||
|
case GL_MAP_BUFFER_RANGE_EXT:
|
||||||
|
GL_CheckExtension( "GL_EXT_map_buffer_range", mapbufferrangefuncs, "gl_map_buffer_range", GL_MAP_BUFFER_RANGE_EXT , 3.0);
|
||||||
|
break;
|
||||||
|
case GL_BUFFER_STORAGE_EXT:
|
||||||
|
GL_CheckExtension( "GL_EXT_buffer_storage", bufferstoragefuncs, "gl_buffer_storage", GL_BUFFER_STORAGE_EXT, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
case GL_DEBUG_OUTPUT:
|
case GL_DEBUG_OUTPUT:
|
||||||
if( glw_state.extended )
|
if( glw_state.extended )
|
||||||
@ -854,8 +890,11 @@ void GL_InitExtensionsBigGL( void )
|
|||||||
if(glConfig.context == CONTEXT_TYPE_GL_CORE )
|
if(glConfig.context == CONTEXT_TYPE_GL_CORE )
|
||||||
GL_CheckExtension( "shader_objects", shaderobjectsfuncs_gles, "gl_shaderobjects", GL_SHADER_OBJECTS_EXT, 2.0 );
|
GL_CheckExtension( "shader_objects", shaderobjectsfuncs_gles, "gl_shaderobjects", GL_SHADER_OBJECTS_EXT, 2.0 );
|
||||||
else
|
else
|
||||||
GL_CheckExtension( "GL_ARB_shader_objects", shaderobjectsfuncs, "gl_shaderobjects", GL_SHADER_OBJECTS_EXT, 0 );
|
GL_CheckExtension( "GL_ARB_shader_objects", shaderobjectsfuncs, "gl_shaderobjects", GL_SHADER_OBJECTS_EXT, 2.0 );
|
||||||
GL_CheckExtension( "GL_ARB_vertex_array_object", vaofuncs, "gl_vertex_array_object", GL_ARB_VERTEX_ARRAY_OBJECT_EXT, 0 );
|
GL_CheckExtension( "GL_ARB_vertex_array_object", vaofuncs, "gl_vertex_array_object", GL_ARB_VERTEX_ARRAY_OBJECT_EXT, 3.0 );
|
||||||
|
GL_CheckExtension( "GL_ARB_buffer_storage", bufferstoragefuncs, "gl_buffer_storage", GL_BUFFER_STORAGE_EXT, 4.4);
|
||||||
|
GL_CheckExtension( "GL_ARB_map_buffer_range", mapbufferrangefuncs, "gl_map_buffer_range", GL_MAP_BUFFER_RANGE_EXT , 3.0);
|
||||||
|
GL_CheckExtension( "GL_ARB_draw_elements_base_vertex", drawrangeelementsbasevertexfuncs, "gl_drawrangeelementsbasevertex", GL_DRAW_RANGE_ELEMENTS_BASE_VERTEX_EXT, 3.2 );
|
||||||
#endif
|
#endif
|
||||||
if( GL_CheckExtension( "GL_ARB_shading_language_100", NULL, NULL, GL_SHADER_GLSL100_EXT, 2.0 ))
|
if( GL_CheckExtension( "GL_ARB_shading_language_100", NULL, NULL, GL_SHADER_GLSL100_EXT, 2.0 ))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user