- break;
- }
-}
-
-
-
-r_vertexgeneric_t *R_Mesh_PrepareVertices_Generic_Lock(int numvertices)
-{
- size_t size;
- size = sizeof(r_vertexgeneric_t) * numvertices;
- if (gl_state.preparevertices_tempdatamaxsize < size)
- {
- gl_state.preparevertices_tempdatamaxsize = size;
- gl_state.preparevertices_tempdata = Mem_Realloc(r_main_mempool, gl_state.preparevertices_tempdata, gl_state.preparevertices_tempdatamaxsize);
- }
- gl_state.preparevertices_vertexgeneric = (r_vertexgeneric_t *)gl_state.preparevertices_tempdata;
- gl_state.preparevertices_numvertices = numvertices;
- return gl_state.preparevertices_vertexgeneric;
-}
-
-qboolean R_Mesh_PrepareVertices_Generic_Unlock(void)
-{
- R_Mesh_PrepareVertices_Generic(gl_state.preparevertices_numvertices, gl_state.preparevertices_vertexgeneric, NULL);
- gl_state.preparevertices_vertexgeneric = NULL;
- gl_state.preparevertices_numvertices = 0;
- return true;
-}
-
-void R_Mesh_PrepareVertices_Generic_Arrays(int numvertices, const float *vertex3f, const float *color4f, const float *texcoord2f)
-{
- int i;
- r_vertexgeneric_t *vertex;
- switch(vid.renderpath)
- {
- case RENDERPATH_GL20:
- case RENDERPATH_CGGL:
- if (gl_mesh_separatearrays.integer)
- {
- R_Mesh_VertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f, NULL, 0);
- R_Mesh_ColorPointer(4, GL_FLOAT, sizeof(float[4]), color4f, NULL, 0);
- R_Mesh_TexCoordPointer(0, 2, GL_FLOAT, sizeof(float[2]), texcoord2f, NULL, 0);
- R_Mesh_TexCoordPointer(1, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- R_Mesh_TexCoordPointer(2, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- R_Mesh_TexCoordPointer(3, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- R_Mesh_TexCoordPointer(4, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- return;
- }
- break;
- case RENDERPATH_GL13:
- case RENDERPATH_GL11:
- if (gl_mesh_separatearrays.integer)
- {
- R_Mesh_VertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f, NULL, 0);
- R_Mesh_ColorPointer(4, GL_FLOAT, sizeof(float[4]), color4f, NULL, 0);
- R_Mesh_TexCoordPointer(0, 2, GL_FLOAT, sizeof(float[2]), texcoord2f, NULL, 0);
- if (vid.texunits >= 2)
- R_Mesh_TexCoordPointer(1, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- if (vid.texunits >= 3)
- R_Mesh_TexCoordPointer(2, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- return;
- }
- break;
- }
-
- // no quick path for this case, convert to vertex structs
- vertex = R_Mesh_PrepareVertices_Generic_Lock(numvertices);
- for (i = 0;i < numvertices;i++)
- VectorCopy(vertex3f + 3*i, vertex[i].vertex3f);
- if (color4f)
- {
- for (i = 0;i < numvertices;i++)
- Vector4Scale(color4f + 4*i, 255.0f, vertex[i].color4ub);
- }
- else
- {
- float tempcolor4f[4];
- unsigned char tempcolor4ub[4];
- Vector4Scale(gl_state.color4f, 255.0f, tempcolor4f);
- tempcolor4ub[0] = (unsigned char)bound(0.0f, tempcolor4f[0], 255.0f);
- tempcolor4ub[1] = (unsigned char)bound(0.0f, tempcolor4f[1], 255.0f);
- tempcolor4ub[2] = (unsigned char)bound(0.0f, tempcolor4f[2], 255.0f);
- tempcolor4ub[3] = (unsigned char)bound(0.0f, tempcolor4f[3], 255.0f);
- for (i = 0;i < numvertices;i++)
- Vector4Copy(tempcolor4ub, vertex[i].color4ub);
- }
- if (texcoord2f)
- for (i = 0;i < numvertices;i++)
- Vector2Copy(texcoord2f + 2*i, vertex[i].texcoord2f);
- R_Mesh_PrepareVertices_Generic_Unlock();
- R_Mesh_PrepareVertices_Generic(numvertices, vertex, NULL);
-}
-
-void R_Mesh_PrepareVertices_Generic(int numvertices, const r_vertexgeneric_t *vertex, const r_meshbuffer_t *vertexbuffer)
-{
- // upload temporary vertexbuffer for this rendering
- if (!gl_state.usevbo_staticvertex)
- vertexbuffer = NULL;
- if (!vertexbuffer && gl_state.usevbo_dynamicvertex)
- {
- if (gl_state.preparevertices_dynamicvertexbuffer)
- R_Mesh_UpdateMeshBuffer(gl_state.preparevertices_dynamicvertexbuffer, vertex, numvertices * sizeof(*vertex));
- else
- gl_state.preparevertices_dynamicvertexbuffer = R_Mesh_CreateMeshBuffer(vertex, numvertices * sizeof(*vertex), "temporary", false, true);
- vertexbuffer = gl_state.preparevertices_dynamicvertexbuffer;
- }
- if (vertexbuffer)
- {
- switch(vid.renderpath)
- {
- case RENDERPATH_GL20:
- case RENDERPATH_CGGL:
- R_Mesh_TexCoordPointer(2, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- R_Mesh_TexCoordPointer(3, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- R_Mesh_TexCoordPointer(4, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- case RENDERPATH_GL13:
- R_Mesh_TexCoordPointer(1, 2, GL_FLOAT, sizeof(float[2]), NULL, NULL, 0);
- case RENDERPATH_GL11:
- R_Mesh_VertexPointer( 3, GL_FLOAT , sizeof(*vertex), vertex->vertex3f , vertexbuffer, (int)((unsigned char *)vertex->vertex3f - (unsigned char *)vertex));
- R_Mesh_ColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(*vertex), vertex->color4ub , vertexbuffer, (int)((unsigned char *)vertex->color4ub - (unsigned char *)vertex));
- R_Mesh_TexCoordPointer(0, 2, GL_FLOAT , sizeof(*vertex), vertex->texcoord2f , vertexbuffer, (int)((unsigned char *)vertex->texcoord2f - (unsigned char *)vertex));
- break;
- }
- return;
- }
- switch(vid.renderpath)
- {
- case RENDERPATH_GL20:
- case RENDERPATH_CGGL: