This reverts commit b5d1ae1a36b9451f64358558eb3db0a02b3d0831.
Showing the changes to interface/src/VoxelSystem.cpp (1 of 1 file). Show all
Unified · Split
| @@ -107,7 +107,7 @@ void VoxelSystem::setupNewVoxelsForDrawing() { · 106 unmodified lines | |||
| 107 | 107 | ||
| 108 | void VoxelSystem::copyWrittenDataToReadArrays() { | 108 | void VoxelSystem::copyWrittenDataToReadArrays() { |
| 109 | // lock on the buffer write lock so we can't modify the data when the GPU is reading it | 109 | // lock on the buffer write lock so we can't modify the data when the GPU is reading it |
| 110 | 110 | pthread_mutex_lock(&bufferWriteLock); | |
| 111 | // store a pointer to the current end so it doesn't change during copy | 111 | // store a pointer to the current end so it doesn't change during copy |
| 112 | GLfloat *endOfCurrentVerticesData = writeVerticesEndPointer; | 112 | GLfloat *endOfCurrentVerticesData = writeVerticesEndPointer; |
| 113 | // copy the vertices and colors | 113 | // copy the vertices and colors |
| @@ -116,6 +116,7 @@ void VoxelSystem::copyWrittenDataToReadArrays() { · 2 unmodified lines | |||
| 116 | 116 | ||
| 117 | // set the read vertices end pointer to the correct spot so the GPU knows how much to pull | 117 | // set the read vertices end pointer to the correct spot so the GPU knows how much to pull |
| 118 | readVerticesEndPointer = readVerticesArray + (endOfCurrentVerticesData - writeVerticesArray); | 118 | readVerticesEndPointer = readVerticesArray + (endOfCurrentVerticesData - writeVerticesArray); |
| 119 | pthread_mutex_unlock(&bufferWriteLock); | ||
| 119 | } | 120 | } |
| 120 | 121 | ||
| 121 | int VoxelSystem::treeToArrays(VoxelNode *currentNode, float nodePosition[3]) { | 122 | int VoxelSystem::treeToArrays(VoxelNode *currentNode, float nodePosition[3]) { |
| @@ -232,16 +233,22 @@ void VoxelSystem::render() { · 110 unmodified lines | |||
| 232 | 233 | ||
| 233 | 234 | ||
| 234 | if (readVerticesEndPointer != readVerticesArray) { | 235 | if (readVerticesEndPointer != readVerticesArray) { |
| 235 | 236 | // try to lock on the buffer write | |
| 236 | glBindBuffer(GL_ARRAY_BUFFER, vboVerticesID); | 237 | // just avoid pulling new data if it is currently being written |
| 237 | glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); | 238 | if (pthread_mutex_trylock(&bufferWriteLock) == 0) { |
| 238 | glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLfloat), readVerticesArray); | 239 | |
| 239 | 240 | glBindBuffer(GL_ARRAY_BUFFER, vboVerticesID); | |
| 240 | glBindBuffer(GL_ARRAY_BUFFER, vboColorsID); | 241 | glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); |
| 241 | glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLubyte) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); | 242 | glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLfloat), readVerticesArray); |
| 242 | glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLubyte), readColorsArray); | 243 | |
| 243 | 244 | glBindBuffer(GL_ARRAY_BUFFER, vboColorsID); | |
| 244 | readVerticesEndPointer = readVerticesArray; | 245 | glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLubyte) * MAX_VOXELS_PER_SYSTEM, NULL, GL_DYNAMIC_DRAW); |
| 246 | glBufferSubData(GL_ARRAY_BUFFER, 0, (readVerticesEndPointer - readVerticesArray) * sizeof(GLubyte), readColorsArray); | ||
| 247 | |||
| 248 | readVerticesEndPointer = readVerticesArray; | ||
| 249 | |||
| 250 | pthread_mutex_unlock(&bufferWriteLock); | ||
| 251 | } | ||
| 245 | } | 252 | } |
| 246 | 253 | ||
| 247 | // tell OpenGL where to find vertex and color information | 254 | // tell OpenGL where to find vertex and color information |