/* ============ R_InitVBOs ============ */ void R_InitVBOs( void ) { int dataSize; ri.Printf( PRINT_DEVELOPER, "------- R_InitVBOs -------\n" ); Com_InitGrowList( &tr.vbos, 100 ); Com_InitGrowList( &tr.ibos, 100 ); #if !defined( COMPAT_Q3A ) && !defined( COMPAT_ET ) dataSize = sizeof( vec4_t ) * SHADER_MAX_VERTEXES * 11; #else dataSize = sizeof( vec4_t ) * SHADER_MAX_VERTEXES * 10; #endif tess.vbo = R_CreateVBO( "tessVertexArray_VBO", NULL, dataSize, VBO_USAGE_DYNAMIC ); tess.vbo->ofsXYZ = 0; tess.vbo->ofsTexCoords = tess.vbo->ofsXYZ + sizeof( tess.xyz ); tess.vbo->ofsLightCoords = tess.vbo->ofsTexCoords + sizeof( tess.texCoords ); tess.vbo->ofsTangents = tess.vbo->ofsLightCoords + sizeof( tess.lightCoords ); tess.vbo->ofsBinormals = tess.vbo->ofsTangents + sizeof( tess.tangents ); tess.vbo->ofsNormals = tess.vbo->ofsBinormals + sizeof( tess.binormals ); tess.vbo->ofsColors = tess.vbo->ofsNormals + sizeof( tess.normals ); #if !defined( COMPAT_Q3A ) && !defined( COMPAT_ET ) tess.vbo->ofsPaintColors = tess.vbo->ofsColors + sizeof( tess.colors ); tess.vbo->ofsAmbientLight = tess.vbo->ofsPaintColors + sizeof( tess.PaintColors ); #endif tess.vbo->ofsAmbientLight = tess.vbo->ofsColors + sizeof( tess.colors ); tess.vbo->ofsDirectedLight = tess.vbo->ofsAmbientLight + sizeof( tess.ambientLights ); tess.vbo->ofsLightDirections = tess.vbo->ofsDirectedLight + sizeof( tess.directedLights ); tess.vbo->sizeXYZ = sizeof( tess.xyz ); tess.vbo->sizeTangents = sizeof( tess.tangents ); tess.vbo->sizeBinormals = sizeof( tess.binormals ); tess.vbo->sizeNormals = sizeof( tess.normals ); dataSize = sizeof( tess.indexes ); tess.ibo = R_CreateIBO( "tessVertexArray_IBO", NULL, dataSize, VBO_USAGE_DYNAMIC ); R_InitUnitCubeVBO(); // allocate a PBO for color grade map transfers glGenBuffers( 1, &tr.colorGradePBO ); glBindBuffer( GL_PIXEL_PACK_BUFFER, tr.colorGradePBO ); glBufferData( GL_PIXEL_PACK_BUFFER, REF_COLORGRADEMAP_STORE_SIZE * sizeof(color4ub_t), NULL, GL_STREAM_COPY ); glBindBuffer( GL_PIXEL_PACK_BUFFER, 0 ); R_BindNullVBO(); R_BindNullIBO(); GL_CheckErrors(); }
/* ============ R_InitVBOs ============ */ void R_InitVBOs( void ) { int dataSize; byte *data; ri.Printf( PRINT_ALL, "------- R_InitVBOs -------\n" ); Com_InitGrowList( &tr.vbos, 100 ); Com_InitGrowList( &tr.ibos, 100 ); dataSize = sizeof( vec4_t ) * SHADER_MAX_VERTEXES * 11; data = Com_Allocate( dataSize ); memset( data, 0, dataSize ); tess.vbo = R_CreateVBO( "tessVertexArray_VBO", data, dataSize, VBO_USAGE_DYNAMIC ); tess.vbo->ofsXYZ = 0; tess.vbo->ofsTexCoords = tess.vbo->ofsXYZ + sizeof( tess.xyz ); tess.vbo->ofsLightCoords = tess.vbo->ofsTexCoords + sizeof( tess.texCoords ); tess.vbo->ofsTangents = tess.vbo->ofsLightCoords + sizeof( tess.lightCoords ); tess.vbo->ofsBinormals = tess.vbo->ofsTangents + sizeof( tess.tangents ); tess.vbo->ofsNormals = tess.vbo->ofsBinormals + sizeof( tess.binormals ); tess.vbo->ofsColors = tess.vbo->ofsNormals + sizeof( tess.normals ); #if !defined( COMPAT_Q3A ) && !defined( COMPAT_ET ) tess.vbo->ofsPaintColors = tess.vbo->ofsColors + sizeof( tess.colors ); tess.vbo->ofsLightDirections = tess.vbo->ofsPaintColors + sizeof( tess.paintColors ); #endif tess.vbo->sizeXYZ = sizeof( tess.xyz ); tess.vbo->sizeTangents = sizeof( tess.tangents ); tess.vbo->sizeBinormals = sizeof( tess.binormals ); tess.vbo->sizeNormals = sizeof( tess.normals ); Com_Dealloc( data ); dataSize = sizeof( tess.indexes ); data = Com_Allocate( dataSize ); memset( data, 0, dataSize ); tess.ibo = R_CreateIBO( "tessVertexArray_IBO", data, dataSize, VBO_USAGE_DYNAMIC ); Com_Dealloc( data ); R_InitUnitCubeVBO(); R_BindNullVBO(); R_BindNullIBO(); GL_CheckErrors(); }
/* ============ R_InitVBOs ============ */ void R_InitVBOs(void) { int dataSize; byte *data; Ren_Print("------- R_InitVBOs -------\n"); Com_InitGrowList(&tr.vbos, 100); Com_InitGrowList(&tr.ibos, 100); dataSize = sizeof(vec4_t) * SHADER_MAX_VERTEXES * 11; data = (byte *)Com_Allocate(dataSize); memset(data, 0, dataSize); tess.vbo = R_CreateVBO("tessVertexArray_VBO", data, dataSize, VBO_USAGE_DYNAMIC); tess.vbo->ofsXYZ = 0; tess.vbo->ofsTexCoords = tess.vbo->ofsXYZ + sizeof(tess.xyz); tess.vbo->ofsLightCoords = tess.vbo->ofsTexCoords + sizeof(tess.texCoords); tess.vbo->ofsTangents = tess.vbo->ofsLightCoords + sizeof(tess.lightCoords); tess.vbo->ofsBinormals = tess.vbo->ofsTangents + sizeof(tess.tangents); tess.vbo->ofsNormals = tess.vbo->ofsBinormals + sizeof(tess.binormals); tess.vbo->ofsColors = tess.vbo->ofsNormals + sizeof(tess.normals); tess.vbo->sizeXYZ = sizeof(tess.xyz); tess.vbo->sizeTangents = sizeof(tess.tangents); tess.vbo->sizeBinormals = sizeof(tess.binormals); tess.vbo->sizeNormals = sizeof(tess.normals); Com_Dealloc(data); dataSize = sizeof(tess.indexes); data = (byte *)Com_Allocate(dataSize); memset(data, 0, dataSize); tess.ibo = R_CreateIBO("tessVertexArray_IBO", data, dataSize, VBO_USAGE_DYNAMIC); Com_Dealloc(data); R_InitUnitCubeVBO(); R_BindNullVBO(); R_BindNullIBO(); GL_CheckErrors(); }
/* ============ R_InitVBOs ============ */ void R_InitVBOs() { uint32_t attribs = ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT | ATTR_COLOR; ri.Printf( PRINT_DEVELOPER, "------- R_InitVBOs -------\n" ); Com_InitGrowList( &tr.vbos, 100 ); Com_InitGrowList( &tr.ibos, 100 ); tess.vertsBuffer = ( shaderVertex_t * ) Com_Allocate_Aligned( 64, SHADER_MAX_VERTEXES * sizeof( shaderVertex_t ) ); tess.indexesBuffer = ( glIndex_t * ) Com_Allocate_Aligned( 64, SHADER_MAX_INDEXES * sizeof( glIndex_t ) ); if( glConfig2.mapBufferRangeAvailable ) { tess.vbo = R_CreateDynamicVBO( "tessVertexArray_VBO", vertexCapacity, attribs, VBO_LAYOUT_STATIC ); tess.ibo = R_CreateDynamicIBO( "tessVertexArray_IBO", indexCapacity ); tess.vertsWritten = tess.indexesWritten = 0; } else { // use glBufferSubData to update VBO tess.vbo = R_CreateDynamicVBO( "tessVertexArray_VBO", SHADER_MAX_VERTEXES, attribs, VBO_LAYOUT_STATIC ); tess.ibo = R_CreateDynamicIBO( "tessVertexArray_IBO", SHADER_MAX_INDEXES ); } R_InitUnitCubeVBO(); // allocate a PBO for color grade map transfers glGenBuffers( 1, &tr.colorGradePBO ); glBindBuffer( GL_PIXEL_PACK_BUFFER, tr.colorGradePBO ); glBufferData( GL_PIXEL_PACK_BUFFER, REF_COLORGRADEMAP_STORE_SIZE * sizeof(u8vec4_t), nullptr, GL_STREAM_COPY ); glBindBuffer( GL_PIXEL_PACK_BUFFER, 0 ); GL_CheckErrors(); }