Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/gpu/intern/gpu_buffers.c')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c252
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)