diff options
Diffstat (limited to 'source/blender/gpu/intern/gpu_buffers.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_buffers.c | 252 |
1 files changed, 133 insertions, 119 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 5d2c9cd3a90..6eda6d35ff3 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -32,13 +32,22 @@ * with fall-back to vertex arrays. */ -#include <limits.h> -#include <stddef.h> -#include <string.h> +/* my interface */ +#include "GPU_buffers.h" -#include "GL/glew.h" +/* internal */ +#include "intern/gpu_extensions_intern.h" -#include "MEM_guardedalloc.h" +/* my library */ +#include "GPU_draw.h" +#include "GPU_glew.h" + +/* external */ + +#include "BKE_ccg.h" +#include "BKE_DerivedMesh.h" +#include "BKE_paint.h" +#include "BKE_pbvh.h" #include "BLI_bitmap.h" #include "BLI_math.h" @@ -46,6 +55,8 @@ #include "BLI_ghash.h" #include "BLI_threads.h" + +#include "bmesh.h" #include "DNA_material_types.h" #include "DNA_meshdata_types.h" @@ -55,12 +66,15 @@ #include "BKE_material.h" #include "BKE_pbvh.h" +#include "DNA_meshdata_types.h" #include "DNA_userdef_types.h" -#include "GPU_buffers.h" -#include "GPU_draw.h" +#include "MEM_guardedalloc.h" -#include "bmesh.h" +/* standard */ +#include <limits.h> +#include <stddef.h> +#include <string.h> typedef enum { GPU_BUFFER_VERTEX_STATE = (1 << 0), @@ -159,7 +173,7 @@ static void gpu_buffer_pool_delete_last(GPUBufferPool *pool) /* delete the buffer's data */ if (useVBOs) - glDeleteBuffersARB(1, &last->id); + gpu_glDeleteBuffers(1, &last->id); else MEM_freeN(last->pointer); @@ -194,7 +208,7 @@ static void gpu_buffer_pool_free_unused(GPUBufferPool *pool) while (pool->totbuf) gpu_buffer_pool_delete_last(pool); - glDeleteBuffersARB(pool->totpbvhbufids, pool->pbvhbufids); + gpu_glDeleteBuffers(pool->totpbvhbufids, pool->pbvhbufids); pool->totpbvhbufids = 0; BLI_mutex_unlock(&buffer_mutex); @@ -283,14 +297,14 @@ static GPUBuffer *gpu_buffer_alloc_intern(int size) if (useVBOs == 1) { /* create a new VBO and initialize it to the requested * size */ - glGenBuffersARB(1, &buf->id); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buf->id); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_STATIC_DRAW_ARB); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glGenBuffers(1, &buf->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, buf->id); + gpu_glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_STATIC_DRAW); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } else { buf->pointer = MEM_mallocN(size, "GPUBuffer.pointer"); - + /* purpose of this seems to be dealing with * out-of-memory errors? looks a bit iffy to me * though, at least on Linux I expect malloc() would @@ -354,8 +368,8 @@ static void gpu_buffer_free_intern(GPUBuffer *buffer) * buffer, so increase pool size */ if (pool->maxsize == pool->totbuf) { pool->maxsize += MAX_FREE_GPU_BUFFERS; - pool->buffers = MEM_reallocN(pool->buffers, - sizeof(GPUBuffer *) * pool->maxsize); + pool->buffers = (GPUBuffer**)MEM_reallocN(pool->buffers, + sizeof(GPUBuffer *) * pool->maxsize); } } @@ -634,11 +648,11 @@ static GPUBuffer *gpu_buffer_setup(DerivedMesh *dm, GPUDrawObject *object, while (!success) { /* bind the buffer and discard previous data, * avoids stalling gpu */ - glBindBufferARB(target, buffer->id); - glBufferDataARB(target, buffer->size, NULL, GL_STATIC_DRAW_ARB); + gpu_glBindBuffer(target, buffer->id); + gpu_glBufferData(target, buffer->size, NULL, GL_STATIC_DRAW); /* attempt to map the buffer */ - if (!(varray = glMapBufferARB(target, GL_WRITE_ONLY_ARB))) { + if (!(varray = gpu_glMapBuffer(target, GL_WRITE_ONLY))) { /* failed to map the buffer; delete it */ gpu_buffer_free_intern(buffer); gpu_buffer_pool_delete_last(pool); @@ -672,10 +686,10 @@ static GPUBuffer *gpu_buffer_setup(DerivedMesh *dm, GPUDrawObject *object, /* glUnmapBuffer returns GL_FALSE if * the data store is corrupted; retry * in that case */ - uploaded = glUnmapBufferARB(target); + uploaded = gpu_glUnmapBuffer(target); } } - glBindBufferARB(target, 0); + gpu_glBindBuffer(target, 0); } else { /* VBO not supported, use vertex array fallback */ @@ -820,7 +834,7 @@ static void GPU_buffer_copy_uv(DerivedMesh *dm, float *varray, int *index, int * if (!(mtface = DM_get_tessface_data_layer(dm, CD_MTFACE))) return; f = dm->getTessFaceArray(dm); - + totface = dm->getNumTessFaces(dm); for (i = 0; i < totface; i++, f++) { start = index[mat_orig_to_new[f->mat_nr]]; @@ -997,13 +1011,13 @@ typedef struct { } GPUBufferTypeSettings; const GPUBufferTypeSettings gpu_buffer_type_settings[] = { - {GPU_buffer_copy_vertex, GL_ARRAY_BUFFER_ARB, 3}, - {GPU_buffer_copy_normal, GL_ARRAY_BUFFER_ARB, 3}, - {GPU_buffer_copy_mcol, GL_ARRAY_BUFFER_ARB, 3}, - {GPU_buffer_copy_uv, GL_ARRAY_BUFFER_ARB, 2}, - {GPU_buffer_copy_uv_texpaint, GL_ARRAY_BUFFER_ARB, 4}, - {GPU_buffer_copy_edge, GL_ELEMENT_ARRAY_BUFFER_ARB, 2}, - {GPU_buffer_copy_uvedge, GL_ELEMENT_ARRAY_BUFFER_ARB, 4} + {GPU_buffer_copy_vertex, GL_ARRAY_BUFFER, 3}, + {GPU_buffer_copy_normal, GL_ARRAY_BUFFER, 3}, + {GPU_buffer_copy_mcol, GL_ARRAY_BUFFER, 3}, + {GPU_buffer_copy_uv, GL_ARRAY_BUFFER, 2}, + {GPU_buffer_copy_uv_texpaint, GL_ARRAY_BUFFER, 4}, + {GPU_buffer_copy_edge, GL_ELEMENT_ARRAY_BUFFER, 2}, + {GPU_buffer_copy_uvedge, GL_ELEMENT_ARRAY_BUFFER, 4}, }; /* get the GPUDrawObject buffer associated with a type */ @@ -1106,13 +1120,13 @@ void GPU_vertex_setup(DerivedMesh *dm) glEnableClientState(GL_VERTEX_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->points->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->points->id); glVertexPointer(3, GL_FLOAT, 0, 0); } else { glVertexPointer(3, GL_FLOAT, 0, dm->drawObject->points->pointer); } - + GLStates |= GPU_BUFFER_VERTEX_STATE; } @@ -1123,7 +1137,7 @@ void GPU_normal_setup(DerivedMesh *dm) glEnableClientState(GL_NORMAL_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->normals->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->normals->id); glNormalPointer(GL_FLOAT, 0, 0); } else { @@ -1140,7 +1154,7 @@ void GPU_uv_setup(DerivedMesh *dm) glEnableClientState(GL_TEXTURE_COORD_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->uv->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->uv->id); glTexCoordPointer(2, GL_FLOAT, 0, 0); } else { @@ -1157,7 +1171,7 @@ void GPU_texpaint_uv_setup(DerivedMesh *dm) glEnableClientState(GL_TEXTURE_COORD_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->uv->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER_ARB, dm->drawObject->uv->id); glTexCoordPointer(2, GL_FLOAT, 4 * sizeof(float), 0); glClientActiveTexture(GL_TEXTURE2); glEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -1203,7 +1217,7 @@ void GPU_color_setup(DerivedMesh *dm, int colType) glEnableClientState(GL_COLOR_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->colors->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->colors->id); glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0); } else { @@ -1223,17 +1237,17 @@ void GPU_edge_setup(DerivedMesh *dm) glEnableClientState(GL_VERTEX_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->points->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->points->id); glVertexPointer(3, GL_FLOAT, 0, 0); } else { glVertexPointer(3, GL_FLOAT, 0, dm->drawObject->points->pointer); } - + GLStates |= GPU_BUFFER_VERTEX_STATE; if (useVBOs) - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, dm->drawObject->edges->id); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, dm->drawObject->edges->id); GLStates |= GPU_BUFFER_ELEMENT_STATE; } @@ -1245,7 +1259,7 @@ void GPU_uvedge_setup(DerivedMesh *dm) glEnableClientState(GL_VERTEX_ARRAY); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, dm->drawObject->uvedges->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, dm->drawObject->uvedges->id); glVertexPointer(2, GL_FLOAT, 0, 0); } else { @@ -1293,7 +1307,7 @@ void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numda for (i = 0; i < MAX_GPU_ATTRIB_DATA; i++) { if (attribData[i].index != -1) { - glDisableVertexAttribArrayARB(attribData[i].index); + gpu_glDisableVertexAttribArray(attribData[i].index); } else break; @@ -1301,10 +1315,10 @@ void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numda elementsize = GPU_attrib_element_size(data, numdata); if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffer->id); for (i = 0; i < numdata; i++) { - glEnableVertexAttribArrayARB(data[i].index); - glVertexAttribPointerARB(data[i].index, data[i].size, data[i].type, + gpu_glEnableVertexAttribArray(data[i].index); + gpu_glVertexAttribPointer(data[i].index, data[i].size, data[i].type, GL_FALSE, elementsize, (void *)offset); offset += data[i].size * GPU_typesize(data[i].type); @@ -1316,8 +1330,8 @@ void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numda } else { for (i = 0; i < numdata; i++) { - glEnableVertexAttribArrayARB(data[i].index); - glVertexAttribPointerARB(data[i].index, data[i].size, data[i].type, + gpu_glEnableVertexAttribArray(data[i].index); + gpu_glVertexAttribPointer(data[i].index, data[i].size, data[i].type, GL_FALSE, elementsize, (char *)buffer->pointer + offset); offset += data[i].size * GPU_typesize(data[i].type); } @@ -1344,7 +1358,7 @@ void GPU_buffer_unbind(void) glDisableClientState(GL_COLOR_ARRAY); if (GLStates & GPU_BUFFER_ELEMENT_STATE) { if (useVBOs) { - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } } GLStates &= ~(GPU_BUFFER_VERTEX_STATE | GPU_BUFFER_NORMAL_STATE | @@ -1353,14 +1367,14 @@ void GPU_buffer_unbind(void) for (i = 0; i < MAX_GPU_ATTRIB_DATA; i++) { if (attribData[i].index != -1) { - glDisableVertexAttribArrayARB(attribData[i].index); + gpu_glDisableVertexAttribArray(attribData[i].index); } else break; } if (useVBOs) - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } void GPU_color_switch(int mode) @@ -1398,8 +1412,8 @@ void *GPU_buffer_lock(GPUBuffer *buffer) return 0; if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer->id); - varray = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffer->id); + varray = gpu_glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); return varray; } else { @@ -1415,10 +1429,10 @@ void *GPU_buffer_lock_stream(GPUBuffer *buffer) return 0; if (useVBOs) { - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer->id); + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffer->id); /* discard previous data, avoid stalling gpu */ - glBufferDataARB(GL_ARRAY_BUFFER_ARB, buffer->size, 0, GL_STREAM_DRAW_ARB); - varray = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + gpu_glBufferData(GL_ARRAY_BUFFER, buffer->size, 0, GL_STREAM_DRAW); + varray = gpu_glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); return varray; } else { @@ -1432,9 +1446,9 @@ void GPU_buffer_unlock(GPUBuffer *buffer) if (buffer) { /* note: this operation can fail, could return * an error code from this function? */ - glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ARRAY_BUFFER); } - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } } @@ -1609,12 +1623,12 @@ void GPU_update_mesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, MVert *mvert, copy_v4_v4(buffers->diffuse_color, diffuse_color); /* Build VBO */ - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffers->vert_buf); + gpu_glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferFormat) * totelem, - NULL, GL_STATIC_DRAW_ARB); + NULL, GL_STATIC_DRAW); - vert_data = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + vert_data = gpu_glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); if (vert_data) { /* Vertex data is shared if smooth-shaded, but separate @@ -1708,14 +1722,14 @@ void GPU_update_mesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, MVert *mvert, } } - glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ARRAY_BUFFER); } else { - glDeleteBuffersARB(1, &buffers->vert_buf); + gpu_glDeleteBuffers(1, &buffers->vert_buf); buffers->vert_buf = 0; } - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } buffers->mvert = mvert; @@ -1758,16 +1772,16 @@ GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers(int (*face_vert_indices)[4], * shading requires separate vertex normals so an index buffer is * can't be used there. */ if (gpu_vbo_enabled() && buffers->smooth) - glGenBuffersARB(1, &buffers->index_buf); + gpu_glGenBuffers(1, &buffers->index_buf); if (buffers->index_buf) { /* Generate index buffer object */ - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); - glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, - sizeof(unsigned short) * tottri * 3, NULL, GL_STATIC_DRAW_ARB); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers->index_buf); + gpu_glBufferData(GL_ELEMENT_ARRAY_BUFFER, + sizeof(unsigned short) * tottri * 3, NULL, GL_STATIC_DRAW); /* Fill the triangle buffer */ - tri_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + tri_data = gpu_glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); if (tri_data) { for (i = 0; i < totface; ++i) { const MFace *f = mface + face_indices[i]; @@ -1791,18 +1805,18 @@ GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers(int (*face_vert_indices)[4], v[2] = 2; } } - glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } else { - glDeleteBuffersARB(1, &buffers->index_buf); + gpu_glDeleteBuffers(1, &buffers->index_buf); buffers->index_buf = 0; } - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } if (gpu_vbo_enabled() && (buffers->index_buf || !buffers->smooth)) - glGenBuffersARB(1, &buffers->vert_buf); + gpu_glGenBuffers(1, &buffers->vert_buf); buffers->tot_tri = tottri; @@ -1840,11 +1854,11 @@ void GPU_update_grid_pbvh_buffers(GPU_PBVH_Buffers *buffers, CCGElem **grids, copy_v4_v4(buffers->diffuse_color, diffuse_color); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffers->vert_buf); + gpu_glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferFormat) * totvert, - NULL, GL_STATIC_DRAW_ARB); - vert_data = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + NULL, GL_STATIC_DRAW); + vert_data = gpu_glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); if (vert_data) { for (i = 0; i < totgrid; ++i) { VertexBufferFormat *vd = vert_data; @@ -1905,13 +1919,13 @@ void GPU_update_grid_pbvh_buffers(GPU_PBVH_Buffers *buffers, CCGElem **grids, vert_data += key->grid_area; } - glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ARRAY_BUFFER); } else { - glDeleteBuffersARB(1, &buffers->vert_buf); + gpu_glDeleteBuffers(1, &buffers->vert_buf); buffers->vert_buf = 0; } - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } buffers->grids = grids; @@ -1933,13 +1947,13 @@ void GPU_update_grid_pbvh_buffers(GPU_PBVH_Buffers *buffers, CCGElem **grids, int offset = 0; \ int i, j, k; \ \ - glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, \ + gpu_glBufferData(GL_ELEMENT_ARRAY_BUFFER, \ sizeof(type_) * (tot_quad_) * 6, NULL, \ - GL_STATIC_DRAW_ARB); \ + GL_STATIC_DRAW); \ \ /* Fill the buffer */ \ - tri_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, \ - GL_WRITE_ONLY_ARB); \ + tri_data = gpu_glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, \ + GL_WRITE_ONLY); \ if (tri_data) { \ for (i = 0; i < totgrid; ++i) { \ BLI_bitmap *gh = NULL; \ @@ -1966,10 +1980,10 @@ void GPU_update_grid_pbvh_buffers(GPU_PBVH_Buffers *buffers, CCGElem **grids, \ offset += gridsize * gridsize; \ } \ - glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); \ + gpu_glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); \ } \ else { \ - glDeleteBuffersARB(1, &(buffer_)); \ + gpu_glDeleteBuffers(1, &(buffer_)); \ (buffer_) = 0; \ } \ } (void)0 @@ -1991,7 +2005,7 @@ static GLuint gpu_get_grid_buffer(int gridsize, GLenum *index_type, unsigned *to * return an invalid handle */ if (!gpu_vbo_enabled()) { if (buffer) - glDeleteBuffersARB(1, &buffer); + gpu_glDeleteBuffers(1, &buffer); return 0; } @@ -2003,11 +2017,11 @@ static GLuint gpu_get_grid_buffer(int gridsize, GLenum *index_type, unsigned *to } /* Build new VBO */ - glGenBuffersARB(1, &buffer); + gpu_glGenBuffers(1, &buffer); if (buffer) { *totquad = (gridsize - 1) * (gridsize - 1); - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffer); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); if (gridsize * gridsize < USHRT_MAX) { *index_type = GL_UNSIGNED_SHORT; @@ -2018,7 +2032,7 @@ static GLuint gpu_get_grid_buffer(int gridsize, GLenum *index_type, unsigned *to FILL_QUAD_BUFFER(unsigned int, *totquad, buffer); } - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } prev_gridsize = gridsize; @@ -2054,11 +2068,11 @@ GPU_PBVH_Buffers *GPU_build_grid_pbvh_buffers(int *grid_indices, int totgrid, } else if (GLEW_ARB_vertex_buffer_object && !(U.gameflags & USER_DISABLE_VBO)) { /* Build new VBO */ - glGenBuffersARB(1, &buffers->index_buf); + gpu_glGenBuffers(1, &buffers->index_buf); if (buffers->index_buf) { buffers->tot_quad = totquad; - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers->index_buf); if (totgrid * gridsize * gridsize < USHRT_MAX) { buffers->index_type = GL_UNSIGNED_SHORT; @@ -2069,7 +2083,7 @@ GPU_PBVH_Buffers *GPU_build_grid_pbvh_buffers(int *grid_indices, int totgrid, FILL_QUAD_BUFFER(unsigned int, totquad, buffers->index_buf); } - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } buffers->has_hidden = 1; @@ -2077,7 +2091,7 @@ GPU_PBVH_Buffers *GPU_build_grid_pbvh_buffers(int *grid_indices, int totgrid, /* Build coord/normal VBO */ if (buffers->index_buf) - glGenBuffersARB(1, &buffers->vert_buf); + gpu_glGenBuffers(1, &buffers->vert_buf); return buffers; } @@ -2209,13 +2223,13 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, copy_v4_v4(buffers->diffuse_color, diffuse_color); /* Initialize vertex buffer */ - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffers->vert_buf); + gpu_glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferFormat) * totvert, - NULL, GL_STATIC_DRAW_ARB); + NULL, GL_STATIC_DRAW); /* Fill vertex buffer */ - vert_data = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + vert_data = gpu_glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); if (vert_data) { int v_index = 0; @@ -2273,14 +2287,14 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, buffers->tot_tri = tottri; } - glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ARRAY_BUFFER); /* gpu_bmesh_vert_to_buffer_copy sets dirty index values */ bm->elem_index_dirty |= BM_VERT; } else { /* Memory map failed */ - glDeleteBuffersARB(1, &buffers->vert_buf); + gpu_glDeleteBuffers(1, &buffers->vert_buf); buffers->vert_buf = 0; return; } @@ -2289,15 +2303,15 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, const int use_short = (maxvert < USHRT_MAX); /* Initialize triangle index buffer */ - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); - glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers->index_buf); + gpu_glBufferData(GL_ELEMENT_ARRAY_BUFFER, (use_short ? sizeof(unsigned short) : sizeof(unsigned int)) * 3 * tottri, - NULL, GL_STATIC_DRAW_ARB); + NULL, GL_STATIC_DRAW); /* Fill triangle index buffer */ - tri_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + tri_data = gpu_glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); if (tri_data) { GSetIterator gs_iter; @@ -2327,7 +2341,7 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, } } - glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); + gpu_glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); buffers->tot_tri = tottri; buffers->index_type = (use_short ? @@ -2336,7 +2350,7 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, } else { /* Memory map failed */ - glDeleteBuffersARB(1, &buffers->index_buf); + gpu_glDeleteBuffers(1, &buffers->index_buf); buffers->index_buf = 0; } } @@ -2348,8 +2362,8 @@ GPU_PBVH_Buffers *GPU_build_bmesh_pbvh_buffers(int smooth_shading) buffers = MEM_callocN(sizeof(GPU_PBVH_Buffers), "GPU_Buffers"); if (smooth_shading) - glGenBuffersARB(1, &buffers->index_buf); - glGenBuffersARB(1, &buffers->vert_buf); + gpu_glGenBuffers(1, &buffers->index_buf); + gpu_glGenBuffers(1, &buffers->vert_buf); buffers->use_bmesh = true; buffers->smooth = smooth_shading; buffers->show_diffuse_color = false; @@ -2419,7 +2433,7 @@ static void gpu_draw_buffers_legacy_mesh(GPU_PBVH_Buffers *buffers) fmask /= 3.0f; gpu_color_from_mask_set(fmask, diffuse_color); } - + for (j = 0; j < S; j++) glVertex3fv(mvert[fv[j]].co); } @@ -2457,8 +2471,8 @@ static void gpu_draw_buffers_legacy_grids(GPU_PBVH_Buffers *buffers) /* TODO: could use strips with hiding as well */ if (gh) { - glBegin(GL_QUADS); - + glBegin(GL_QUADS); // XXX jwilkins: replace with pairs of triangles + for (y = 0; y < gridsize - 1; y++) { for (x = 0; x < gridsize - 1; x++) { CCGElem *e[4] = { @@ -2504,7 +2518,7 @@ static void gpu_draw_buffers_legacy_grids(GPU_PBVH_Buffers *buffers) } else if (buffers->smooth) { for (y = 0; y < gridsize - 1; y++) { - glBegin(GL_QUAD_STRIP); + glBegin(GL_TRIANGLE_STRIP); // XXX jwilkins: was QUAD_STRIP, only difference should be which vertex is used for flat shading(?) for (x = 0; x < gridsize; x++) { CCGElem *a = CCG_grid_elem(key, grid, x, y); CCGElem *b = CCG_grid_elem(key, grid, x, y + 1); @@ -2525,7 +2539,7 @@ static void gpu_draw_buffers_legacy_grids(GPU_PBVH_Buffers *buffers) } else { for (y = 0; y < gridsize - 1; y++) { - glBegin(GL_QUAD_STRIP); + glBegin(GL_TRIANGLE_STRIP); // XXX jwilkins: was QUAD_STRIP, only difference should be which vertex is used for flat shading(?) for (x = 0; x < gridsize; x++) { CCGElem *a = CCG_grid_elem(key, grid, x, y); CCGElem *b = CCG_grid_elem(key, grid, x, y + 1); @@ -2591,10 +2605,10 @@ void GPU_draw_pbvh_buffers(GPU_PBVH_Buffers *buffers, DMSetMaterial setMaterial, gpu_colors_enable(VBO_ENABLED); } - glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); + gpu_glBindBuffer(GL_ARRAY_BUFFER, buffers->vert_buf); if (buffers->index_buf) - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers->index_buf); if (wireframe) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); @@ -2634,9 +2648,9 @@ void GPU_draw_pbvh_buffers(GPU_PBVH_Buffers *buffers, DMSetMaterial setMaterial, if (wireframe) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); if (buffers->index_buf) - glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDisableClientState(GL_VERTEX_ARRAY); if (!wireframe) { @@ -2711,10 +2725,10 @@ static void gpu_pbvh_buffer_free_intern(GLuint id) /* free the buffers immediately if we are on main thread */ if (BLI_thread_is_main()) { - glDeleteBuffersARB(1, &id); + gpu_glDeleteBuffers(1, &id); if (pool->totpbvhbufids > 0) { - glDeleteBuffersARB(pool->totpbvhbufids, pool->pbvhbufids); + gpu_glDeleteBuffers(pool->totpbvhbufids, pool->pbvhbufids); pool->totpbvhbufids = 0; } return; @@ -2797,7 +2811,7 @@ void GPU_init_draw_pbvh_BB(void) glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glEnable(GL_BLEND); - glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + gpu_glBindBuffer(GL_ARRAY_BUFFER, 0); } void GPU_end_draw_pbvh_BB(void) |