From b5d1ae1a36b9451f64358558eb3db0a02b3d0831 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 29 Mar 2013 15:18:34 -0700 Subject: [PATCH] allow the bad triangles to render --- interface/src/VoxelSystem.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 6f859e2c8a..1b2cbfb511 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -107,7 +107,7 @@ void VoxelSystem::setupNewVoxelsForDrawing() { void VoxelSystem::copyWrittenDataToReadArrays() { // lock on the buffer write lock so we can't modify the data when the GPU is reading it - pthread_mutex_lock(&bufferWriteLock); + // store a pointer to the current end so it doesn't change during copy GLfloat *endOfCurrentVerticesData = writeVerticesEndPointer; // copy the vertices and colors @@ -116,7 +116,6 @@ void VoxelSystem::copyWrittenDataToReadArrays() { // set the read vertices end pointer to the correct spot so the GPU knows how much to pull readVerticesEndPointer = readVerticesArray + (endOfCurrentVerticesData - writeVerticesArray); - pthread_mutex_unlock(&bufferWriteLock); } int VoxelSystem::treeToArrays(VoxelNode *currentNode, float nodePosition[3]) { @@ -233,22 +232,16 @@ void VoxelSystem::render() { if (readVerticesEndPointer != readVerticesArray) { - // try to lock on the buffer write - // just avoid pulling new data if it is currently being written - if (pthread_mutex_trylock(&bufferWriteLock) == 0) { - - glBindBuffer(GL_ARRAY_BUFFER, vboVerticesID); - glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); - glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLfloat), readVerticesArray); - - glBindBuffer(GL_ARRAY_BUFFER, vboColorsID); - glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLubyte) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); - glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLubyte), readColorsArray); - - readVerticesEndPointer = readVerticesArray; - - pthread_mutex_unlock(&bufferWriteLock); - } + + glBindBuffer(GL_ARRAY_BUFFER, vboVerticesID); + glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); + glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLfloat), readVerticesArray); + + glBindBuffer(GL_ARRAY_BUFFER, vboColorsID); + glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLubyte) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); + glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLubyte), readColorsArray); + + readVerticesEndPointer = readVerticesArray; } // tell OpenGL where to find vertex and color information