Changeset 2921
- Timestamp:
- Apr 1, 2012, 5:28:45 PM (12 years ago)
- Location:
- trunk/packages/vizservers/nanovis
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/NvParticleRenderer.cpp
r2884 r2921 73 73 glGenTextures(2, _psysTex); 74 74 75 int fboOrig; 76 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fboOrig); 77 75 78 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _psysFbo[0]); 76 79 … … 105 108 GL_TEXTURE_RECTANGLE_ARB, _psysTex[1], 0); 106 109 107 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);110 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboOrig); 108 111 109 112 glGenTextures(1, &_initPosTex); … … 158 161 switch (_sliceAxis) { 159 162 case 0: 160 p[4*index] = _slicePos;161 p[4*index+1] = j/float(_psysHeight);162 p[4*index+2] = i/float(_psysWidth);163 p[4*index] = _slicePos; 164 p[4*index+1] = j/float(_psysHeight); 165 p[4*index+2] = i/float(_psysWidth); 163 166 break; 164 167 case 1: 165 p[4*index] = j/float(_psysHeight);168 p[4*index] = j/float(_psysHeight); 166 169 p[4*index+1] = _slicePos; 167 p[4*index+2] = i/float(_psysWidth);170 p[4*index+2] = i/float(_psysWidth); 168 171 break; 169 172 case 2: 170 p[4*index] = j/float(_psysHeight);171 p[4*index+1] = i/float(_psysWidth);173 p[4*index] = j/float(_psysHeight); 174 p[4*index+1] = i/float(_psysWidth); 172 175 p[4*index+2] = _slicePos; 173 176 break; 174 177 default: 175 p[4*index] = 0;176 p[4*index+1] = 0;177 p[4*index+2] = 0;178 p[4*index+3] = 0;178 p[4*index] = 0; 179 p[4*index+1] = 0; 180 p[4*index+2] = 0; 181 p[4*index+3] = 0; 179 182 } 180 183 181 184 //shorter life span, quicker iterations 182 p[4*index+3] = rand() / ((float) RAND_MAX) * 0.5 + 0.5f;185 p[4*index+3] = rand() / ((float) RAND_MAX) * 0.5 + 0.5f; 183 186 } else { 184 p[4*index] = 0;185 p[4*index+1] = 0;186 p[4*index+2] = 0;187 p[4*index+3] = 0;187 p[4*index] = 0; 188 p[4*index+1] = 0; 189 p[4*index+2] = 0; 190 p[4*index+3] = 0; 188 191 } 189 192 } … … 194 197 { 195 198 initializeDataArray(); 196 197 //also store the data on main memory for next initialization198 //memcpy(data, p, psys_width*psys_height*sizeof(Particle));199 199 200 200 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _psysTex[0]); … … 246 246 reset(); 247 247 248 glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT); 249 250 int fboOrig; 251 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fboOrig); 252 248 253 glDisable(GL_BLEND); 249 254 glDisable(GL_DEPTH_TEST); 250 255 256 int fbo, tex; 251 257 if (_flip) { 252 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _psysFbo[1]); 253 glEnable(GL_TEXTURE_RECTANGLE_ARB); 254 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _psysTex[0]); 255 256 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 257 //glClear(GL_COLOR_BUFFER_BIT); 258 259 glViewport(0, 0, _psysWidth, _psysHeight); 260 glMatrixMode(GL_PROJECTION); 261 glLoadIdentity(); 262 //gluOrtho2D(0, _psysWidth, 0, _psysHeight); 263 glOrtho(0, _psysWidth, 0, _psysHeight, -10.0f, 10.0f); 264 glMatrixMode(GL_MODELVIEW); 265 glLoadIdentity(); 266 267 _advectionShader->bind(_psysTex[0], _initPosTex); 268 269 draw_quad(_psysWidth, _psysHeight, _psysWidth, _psysHeight); 270 271 glDisable(GL_TEXTURE_RECTANGLE_ARB); 258 fbo = 1; 259 tex = 0; 272 260 } else { 273 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _psysFbo[0]); 274 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _psysTex[1]); 275 276 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 277 //glClear(GL_COLOR_BUFFER_BIT); 278 279 glViewport(0, 0, _psysWidth, _psysHeight); 280 glMatrixMode(GL_PROJECTION); 281 glLoadIdentity(); 282 //gluOrtho2D(0, _psysWidth, 0, _psysHeight); 283 glOrtho(0, _psysWidth, 0, _psysHeight, -10.0f, 10.0f); 284 glMatrixMode(GL_MODELVIEW); 285 glLoadIdentity(); 286 287 _advectionShader->bind(_psysTex[1], _initPosTex); 288 289 draw_quad(_psysWidth, _psysHeight, _psysWidth, _psysHeight); 290 } 261 fbo = 0; 262 tex = 1; 263 } 264 265 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _psysFbo[fbo]); 266 glEnable(GL_TEXTURE_RECTANGLE_ARB); 267 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _psysTex[tex]); 268 269 glClear(GL_COLOR_BUFFER_BIT); 270 271 glViewport(0, 0, _psysWidth, _psysHeight); 272 glMatrixMode(GL_PROJECTION); 273 glPushMatrix(); 274 glLoadIdentity(); 275 //gluOrtho2D(0, _psysWidth, 0, _psysHeight); 276 glOrtho(0, _psysWidth, 0, _psysHeight, -10.0f, 10.0f); 277 glMatrixMode(GL_MODELVIEW); 278 glPushMatrix(); 279 glLoadIdentity(); 280 281 _advectionShader->bind(_psysTex[tex], _initPosTex); 282 283 draw_quad(_psysWidth, _psysHeight, _psysWidth, _psysHeight); 291 284 292 285 _advectionShader->unbind(); 286 287 glMatrixMode(GL_PROJECTION); 288 glPopMatrix(); 289 290 glMatrixMode(GL_MODELVIEW); 291 glPopMatrix(); 292 293 glDisable(GL_TEXTURE_RECTANGLE_ARB); 293 294 294 295 updateVertexBuffer(); … … 301 302 // _reborn = true; 302 303 } 303 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 304 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboOrig); 305 306 glPopAttrib(); 304 307 } 305 308 … … 307 310 NvParticleRenderer::updateVertexBuffer() 308 311 { 309 _vertexArray-> Read(_psysWidth, _psysHeight);310 311 //_vertexArray-> LoadData(vert); //does not work??312 _vertexArray->read(_psysWidth, _psysHeight); 313 314 //_vertexArray->loadData(vert); //does not work?? 312 315 //assert(glGetError()==0); 313 }314 315 void316 NvParticleRenderer::render()317 {318 displayVertices();319 316 } 320 317 … … 325 322 float line_width) 326 323 { 327 glPushMatrix(); 324 glPushAttrib(GL_ENABLE_BIT); 325 328 326 glEnable(GL_DEPTH_TEST); 329 327 glDisable(GL_TEXTURE_2D); … … 332 330 glColor4d(r, g, b, 1.0); 333 331 glLineWidth(line_width); 334 332 335 333 glBegin(GL_LINE_LOOP); 336 334 { … … 341 339 } 342 340 glEnd(); 343 341 344 342 glBegin(GL_LINE_LOOP); 345 343 { … … 350 348 } 351 349 glEnd(); 352 350 353 351 glBegin(GL_LINE_LOOP); 354 352 { … … 359 357 } 360 358 glEnd(); 361 359 362 360 glBegin(GL_LINE_LOOP); 363 361 { … … 369 367 glEnd(); 370 368 371 glPopMatrix(); 372 glDisable(GL_DEPTH_TEST); 373 glDisable(GL_BLEND); 374 glEnable(GL_TEXTURE_2D); 369 glPopAttrib(); 375 370 } 376 371 377 372 void 378 NvParticleRenderer::displayVertices() 379 { 373 NvParticleRenderer::render() 374 { 375 glPushAttrib(GL_ENABLE_BIT); 380 376 glDisable(GL_TEXTURE_2D); 381 377 glDisable(GL_BLEND); … … 384 380 glEnable(GL_COLOR_MATERIAL); 385 381 382 glMatrixMode(GL_MODELVIEW); 386 383 glPushMatrix(); 387 384 … … 405 402 406 403 glPointSize(_particleSize); 407 //glColor4f(.2,.2,.8,1.);408 404 glColor4f(_color.x, _color.y, _color.z, _color.w); 409 405 glEnableClientState(GL_VERTEX_ARRAY); 410 _vertexArray-> SetPointer(0);406 _vertexArray->setPointer(0); 411 407 glDrawArrays(GL_POINTS, 0, _psysWidth * _psysHeight); 412 408 glDisableClientState(GL_VERTEX_ARRAY); … … 414 410 glPopMatrix(); 415 411 416 gl Disable(GL_DEPTH_TEST);412 glPopAttrib(); 417 413 418 414 //assert(glGetError()==0); -
trunk/packages/vizservers/nanovis/NvParticleRenderer.h
r2883 r2921 50 50 ~NvParticleRenderer(); 51 51 52 void setVectorField(unsigned int texID, const Vector3& ori ,52 void setVectorField(unsigned int texID, const Vector3& origin, 53 53 float scaleX, float scaleY, float scaleZ, float max); 54 54 … … 58 58 59 59 void updateVertexBuffer(); 60 61 void displayVertices();62 60 63 61 void reset(); -
trunk/packages/vizservers/nanovis/RenderVertexArray.cpp
r2837 r2921 44 44 45 45 RenderVertexArray::RenderVertexArray(int nverts, GLint size, GLenum type) : 46 _usage(GL_STREAM_COPY ),46 _usage(GL_STREAM_COPY_ARB), 47 47 _nverts(nverts), 48 48 _size(size), … … 51 51 switch (_type) { 52 52 case GL_HALF_FLOAT_NV: 53 _bytes _per_component = 2; break;53 _bytesPerComponent = 2; break; 54 54 case GL_FLOAT: 55 _bytes _per_component = sizeof(float); break;55 _bytesPerComponent = sizeof(float); break; 56 56 default: 57 57 ERROR("unsupported RenderVertexArray type\n"); … … 61 61 // create the buffer object 62 62 glGenBuffersARB(1, &_buffer); 63 glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, _buffer); 64 glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT, 65 _nverts*_size*_bytes_per_component, 0, _usage); // undefined data 66 glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0); 63 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, _buffer); 64 glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, 65 _nverts*_size*_bytesPerComponent, 66 0, _usage); // undefined data 67 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); 67 68 68 69 // set equivalent image format … … 86 87 87 88 void 88 RenderVertexArray:: LoadData(void *data)89 RenderVertexArray::loadData(void *data) 89 90 { 90 91 // load data to buffer object 91 glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, _buffer); 92 glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT, 93 _nverts*_size*_bytes_per_component, data, _usage); 94 glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0); 92 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, _buffer); 93 glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, 94 _nverts*_size*_bytesPerComponent, 95 data, _usage); 96 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); 95 97 } 96 98 97 99 void 98 RenderVertexArray:: Read(/*GLenum buffer,*/int w, int h)100 RenderVertexArray::read(int w, int h) 99 101 { 100 102 // bind buffer object to pixel pack buffer 101 glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, _buffer); 103 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, _buffer); 104 102 105 // read from frame buffer to buffer object 103 //glReadBuffer(buffer); //crash104 106 glReadPixels(0, 0, w, h, _format, _type, 0); 105 107 106 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ EXT, 0);108 glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); 107 109 } 108 110 109 111 void 110 RenderVertexArray:: SetPointer(GLuint index)112 RenderVertexArray::setPointer(GLuint index) 111 113 { 112 114 // bind buffer object to vertex array 113 glBindBufferARB(GL_ARRAY_BUFFER , _buffer);115 glBindBufferARB(GL_ARRAY_BUFFER_ARB, _buffer); 114 116 //glVertexAttribPointerARB(index, _size, _type, GL_FALSE, 0, 0); //doesn't work 115 117 glVertexPointer(_size, _type, 0, 0); 116 118 117 glBindBufferARB(GL_ARRAY_BUFFER , 0);119 glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); 118 120 } -
trunk/packages/vizservers/nanovis/RenderVertexArray.h
r2837 r2921 27 27 ~RenderVertexArray(); 28 28 29 void LoadData(void *data); // load vertex data from memory29 void loadData(void *data); // load vertex data from memory 30 30 31 void Read(/*GLenum buffer,*/ int w, int h); // read vertex data from31 void read(/*GLenum buffer,*/ int w, int h); // read vertex data from 32 32 // frame buffer 33 void SetPointer(GLuint index);33 void setPointer(GLuint index); 34 34 35 35 private: … … 41 41 GLenum _format; // readpixels image format 42 42 GLenum _type; // FLOAT or HALF_FLOAT 43 int _bytes _per_component;43 int _bytesPerComponent; 44 44 }; 45 45
Note: See TracChangeset
for help on using the changeset viewer.