History

add support for use of Byte normals

ZappoMan committed 13 years ago

Commit 2487a551 parent 0fbabe95 files · +72 −20Browse files

Showing the changes to interface/src/VoxelSystem.cpp (1 of 5 files). Show all

Unified · Split

interface/src/VoxelSystem.cpp+63−19
@@ -37,7 +37,7 @@ float identityVertices[] = { 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0, · 36 unmodified lines
37 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0,1,1,37 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0,1,1,
38 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0,1,1 };38 0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1, 1,0,1, 1,1,1, 0,1,1 };
39 39
40GLfloat identityNormals[] = { 0,0,-1, 0,0,-1, 0,0,-1, 0,0,-1,40GLbyte identityNormals[] = { 0,0,-1, 0,0,-1, 0,0,-1, 0,0,-1,
41 0,0,+1, 0,0,+1, 0,0,+1, 0,0,+1,41 0,0,+1, 0,0,+1, 0,0,+1, 0,0,+1,
42 0,-1,0, 0,-1,0, 0,+1,0, 0,+1,0,42 0,-1,0, 0,-1,0, 0,+1,0, 0,+1,0,
43 0,-1,0, 0,-1,0, 0,+1,0, 0,+1,0,43 0,-1,0, 0,-1,0, 0,+1,0, 0,+1,0,
@@ -75,7 +75,9 @@ VoxelSystem::VoxelSystem(float treeScale, int maxVoxels) · 31 unmodified lines
75 connect(_tree, SIGNAL(importSize(float,float,float)), SIGNAL(importSize(float,float,float)));75 connect(_tree, SIGNAL(importSize(float,float,float)), SIGNAL(importSize(float,float,float)));
76 connect(_tree, SIGNAL(importProgress(int)), SIGNAL(importProgress(int)));76 connect(_tree, SIGNAL(importProgress(int)), SIGNAL(importProgress(int)));
77 77
78 _useVoxelShader = false; 78 _useVoxelShader = false;
79 _useByteNormals = false;
80
79 _writeVoxelShaderData = NULL;81 _writeVoxelShaderData = NULL;
80 _readVoxelShaderData = NULL;82 _readVoxelShaderData = NULL;
81 83
@@ -139,6 +141,20 @@ VoxelSystem::~VoxelSystem() { · 57 unmodified lines
139 VoxelNode::removeDeleteHook(this);141 VoxelNode::removeDeleteHook(this);
140}142}
141 143
144void VoxelSystem::setUseByteNormals(bool useByteNormals) {
145 pthread_mutex_lock(&_bufferWriteLock);
146 bool wasInitialized = _initialized;
147 if (wasInitialized) {
148 cleanupVoxelMemory();
149 }
150 _useByteNormals = useByteNormals;
151 if (wasInitialized) {
152 init();
153 }
154 pthread_mutex_unlock(&_bufferWriteLock);
155}
156
157
142void VoxelSystem::setMaxVoxels(int maxVoxels) {158void VoxelSystem::setMaxVoxels(int maxVoxels) {
143 pthread_mutex_lock(&_bufferWriteLock);159 pthread_mutex_lock(&_bufferWriteLock);
144 bool wasInitialized = _initialized;160 bool wasInitialized = _initialized;
@@ -194,6 +210,7 @@ void VoxelSystem::cleanupVoxelMemory() { · 49 unmodified lines
194 210
195void VoxelSystem::initVoxelMemory() {211void VoxelSystem::initVoxelMemory() {
196 if (_useVoxelShader) {212 if (_useVoxelShader) {
213 qDebug("Using Voxel Shader...\n");
197 GLuint* indicesArray = new GLuint[_maxVoxels];214 GLuint* indicesArray = new GLuint[_maxVoxels];
198 215
199 // populate the indicesArray216 // populate the indicesArray
@@ -241,27 +258,55 @@ void VoxelSystem::initVoxelMemory() { · 41 unmodified lines
241 }258 }
242 }259 }
243 260
244 GLfloat* normalsArray = new GLfloat[VERTEX_POINTS_PER_VOXEL * _maxVoxels];261 if (_useByteNormals) {
245 GLfloat* normalsArrayEndPointer = normalsArray;262 qDebug("Using Byte Normals...\n");
263 GLbyte* normalsArray = new GLbyte[VERTEX_POINTS_PER_VOXEL * _maxVoxels];
264 GLbyte* normalsArrayEndPointer = normalsArray;
246 265
247 // populate the normalsArray266 // populate the normalsArray
248 for (int n = 0; n < _maxVoxels; n++) {267 for (int n = 0; n < _maxVoxels; n++) {
249 for (int i = 0; i < VERTEX_POINTS_PER_VOXEL; i++) {268 for (int i = 0; i < VERTEX_POINTS_PER_VOXEL; i++) {
250 *(normalsArrayEndPointer++) = identityNormals[i];269 *(normalsArrayEndPointer++) = identityNormals[i];
270 }
271 }
272
273 // VBO for the normalsArray
274 glGenBuffers(1, &_vboNormalsID);
275 glBindBuffer(GL_ARRAY_BUFFER, _vboNormalsID);
276 glBufferData(GL_ARRAY_BUFFER,
277 VERTEX_POINTS_PER_VOXEL * sizeof(GLbyte) * _maxVoxels,
278 normalsArray, GL_STATIC_DRAW);
279
280 // delete the indices and normals arrays that are no longer needed
281 delete[] normalsArray;
282 } else {
283 qDebug("Using Float Normals...\n");
284 GLfloat* normalsArray = new GLfloat[VERTEX_POINTS_PER_VOXEL * _maxVoxels];
285 GLfloat* normalsArrayEndPointer = normalsArray;
286
287 // populate the normalsArray
288 for (int n = 0; n < _maxVoxels; n++) {
289 for (int i = 0; i < VERTEX_POINTS_PER_VOXEL; i++) {
290 *(normalsArrayEndPointer++) = identityNormals[i];
291 }
251 }292 }
293
294 // VBO for the normalsArray
295 glGenBuffers(1, &_vboNormalsID);
296 glBindBuffer(GL_ARRAY_BUFFER, _vboNormalsID);
297 glBufferData(GL_ARRAY_BUFFER,
298 VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * _maxVoxels,
299 normalsArray, GL_STATIC_DRAW);
300
301 // delete the indices and normals arrays that are no longer needed
302 delete[] normalsArray;
252 }303 }
253 304
305
254 glGenBuffers(1, &_vboVerticesID);306 glGenBuffers(1, &_vboVerticesID);
255 glBindBuffer(GL_ARRAY_BUFFER, _vboVerticesID);307 glBindBuffer(GL_ARRAY_BUFFER, _vboVerticesID);
256 glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * _maxVoxels, NULL, GL_DYNAMIC_DRAW);308 glBufferData(GL_ARRAY_BUFFER, VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * _maxVoxels, NULL, GL_DYNAMIC_DRAW);
257 309
258 // VBO for the normalsArray
259 glGenBuffers(1, &_vboNormalsID);
260 glBindBuffer(GL_ARRAY_BUFFER, _vboNormalsID);
261 glBufferData(GL_ARRAY_BUFFER,
262 VERTEX_POINTS_PER_VOXEL * sizeof(GLfloat) * _maxVoxels,
263 normalsArray, GL_STATIC_DRAW);
264
265 // VBO for colorsArray310 // VBO for colorsArray
266 glGenBuffers(1, &_vboColorsID);311 glGenBuffers(1, &_vboColorsID);
267 glBindBuffer(GL_ARRAY_BUFFER, _vboColorsID);312 glBindBuffer(GL_ARRAY_BUFFER, _vboColorsID);
@@ -276,7 +321,6 @@ void VoxelSystem::initVoxelMemory() { · 8 unmodified lines
276 321
277 // delete the indices and normals arrays that are no longer needed322 // delete the indices and normals arrays that are no longer needed
278 delete[] indicesArray;323 delete[] indicesArray;
279 delete[] normalsArray;
280 324
281 325
282 // we will track individual dirty sections with these arrays of bools326 // we will track individual dirty sections with these arrays of bools
@@ -890,7 +934,7 @@ void VoxelSystem::render(bool texture) { · 607 unmodified lines
890 glVertexPointer(3, GL_FLOAT, 0, 0);934 glVertexPointer(3, GL_FLOAT, 0, 0);
891 935
892 glBindBuffer(GL_ARRAY_BUFFER, _vboNormalsID);936 glBindBuffer(GL_ARRAY_BUFFER, _vboNormalsID);
893 glNormalPointer(GL_FLOAT, 0, 0);937 glNormalPointer((_useByteNormals ? GL_BYTE : GL_FLOAT), 0, 0);
894 938
895 glBindBuffer(GL_ARRAY_BUFFER, _vboColorsID);939 glBindBuffer(GL_ARRAY_BUFFER, _vboColorsID);
896 glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0);940 glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0);
@@ -1769,7 +1813,7 @@ void VoxelSystem::falseColorizeOccludedV2() { · 872 unmodified lines
1769void VoxelSystem::nodeAdded(Node* node) {1813void VoxelSystem::nodeAdded(Node* node) {
1770 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {1814 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {
1771 uint16_t nodeID = node->getNodeID();1815 uint16_t nodeID = node->getNodeID();
1772 printf("VoxelSystem... voxel server %u added...\n", nodeID);1816 qDebug("VoxelSystem... voxel server %u added...\n", nodeID);
1773 _voxelServerCount++;1817 _voxelServerCount++;
1774 }1818 }
1775}1819}
@@ -1792,7 +1836,7 @@ void VoxelSystem::nodeKilled(Node* node) { · 16 unmodified lines
1792 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {1836 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {
1793 _voxelServerCount--;1837 _voxelServerCount--;
1794 uint16_t nodeID = node->getNodeID();1838 uint16_t nodeID = node->getNodeID();
1795 printf("VoxelSystem... voxel server %u removed...\n", nodeID);1839 qDebug("VoxelSystem... voxel server %u removed...\n", nodeID);
1796 1840
1797 if (_voxelServerCount > 0) {1841 if (_voxelServerCount > 0) {
1798 // Kill any voxels from the local tree that match this nodeID1842 // Kill any voxels from the local tree that match this nodeID

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t