Changeset 2921 for trunk/packages


Ignore:
Timestamp:
Apr 1, 2012 5:28:45 PM (12 years ago)
Author:
ldelgass
Message:

Plug more GL state leaks

Location:
trunk/packages/vizservers/nanovis
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/NvParticleRenderer.cpp

    r2884 r2921  
    7373    glGenTextures(2, _psysTex);
    7474
     75    int fboOrig;
     76    glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fboOrig);
     77
    7578    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _psysFbo[0]);
    7679
     
    105108                              GL_TEXTURE_RECTANGLE_ARB, _psysTex[1], 0);
    106109 
    107     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     110    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboOrig);
    108111
    109112    glGenTextures(1, &_initPosTex);
     
    158161                switch (_sliceAxis) {
    159162                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);
    163166                    break;
    164167                case 1:
    165                     p[4*index]= j/float(_psysHeight);
     168                    p[4*index]   = j/float(_psysHeight);
    166169                    p[4*index+1] = _slicePos;
    167                     p[4*index+2]= i/float(_psysWidth);
     170                    p[4*index+2] = i/float(_psysWidth);
    168171                    break;
    169172                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);
    172175                    p[4*index+2] = _slicePos;
    173176                    break;
    174177                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;
    179182                }
    180183
    181184                //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;
    183186            } 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;
    188191            }
    189192        }
     
    194197{
    195198    initializeDataArray();
    196 
    197     //also store the data on main memory for next initialization
    198     //memcpy(data, p, psys_width*psys_height*sizeof(Particle));
    199199
    200200    glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _psysTex[0]);
     
    246246        reset();
    247247
     248    glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT);
     249
     250    int fboOrig;
     251    glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fboOrig);
     252
    248253    glDisable(GL_BLEND);
    249254    glDisable(GL_DEPTH_TEST);
    250255
     256    int fbo, tex;
    251257    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;
    272260    } 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);
    291284
    292285    _advectionShader->unbind();
     286
     287    glMatrixMode(GL_PROJECTION);
     288    glPopMatrix();
     289
     290    glMatrixMode(GL_MODELVIEW);
     291    glPopMatrix();
     292
     293    glDisable(GL_TEXTURE_RECTANGLE_ARB);
    293294
    294295    updateVertexBuffer();
     
    301302        //        _reborn = true;
    302303    }
    303     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
     304    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboOrig);
     305
     306    glPopAttrib();
    304307}
    305308
     
    307310NvParticleRenderer::updateVertexBuffer()
    308311{
    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??
    312315    //assert(glGetError()==0);
    313 }
    314 
    315 void
    316 NvParticleRenderer::render()
    317 {
    318     displayVertices();
    319316}
    320317
     
    325322                                    float line_width)
    326323{
    327     glPushMatrix();
     324    glPushAttrib(GL_ENABLE_BIT);
     325
    328326    glEnable(GL_DEPTH_TEST);
    329327    glDisable(GL_TEXTURE_2D);
     
    332330    glColor4d(r, g, b, 1.0);
    333331    glLineWidth(line_width);
    334    
     332
    335333    glBegin(GL_LINE_LOOP);
    336334    {
     
    341339    }
    342340    glEnd();
    343    
     341
    344342    glBegin(GL_LINE_LOOP);
    345343    {
     
    350348    }
    351349    glEnd();
    352    
     350
    353351    glBegin(GL_LINE_LOOP);
    354352    {
     
    359357    }
    360358    glEnd();
    361    
     359
    362360    glBegin(GL_LINE_LOOP);
    363361    {
     
    369367    glEnd();
    370368
    371     glPopMatrix();
    372     glDisable(GL_DEPTH_TEST);
    373     glDisable(GL_BLEND);
    374     glEnable(GL_TEXTURE_2D);
     369    glPopAttrib();
    375370}
    376371
    377372void
    378 NvParticleRenderer::displayVertices()
    379 {
     373NvParticleRenderer::render()
     374{
     375    glPushAttrib(GL_ENABLE_BIT);
    380376    glDisable(GL_TEXTURE_2D);
    381377    glDisable(GL_BLEND);
     
    384380    glEnable(GL_COLOR_MATERIAL);
    385381
     382    glMatrixMode(GL_MODELVIEW);
    386383    glPushMatrix();
    387384
     
    405402
    406403    glPointSize(_particleSize);
    407     //glColor4f(.2,.2,.8,1.);
    408404    glColor4f(_color.x, _color.y, _color.z, _color.w);
    409405    glEnableClientState(GL_VERTEX_ARRAY);
    410     _vertexArray->SetPointer(0);
     406    _vertexArray->setPointer(0);
    411407    glDrawArrays(GL_POINTS, 0, _psysWidth * _psysHeight);
    412408    glDisableClientState(GL_VERTEX_ARRAY);
     
    414410    glPopMatrix();
    415411
    416     glDisable(GL_DEPTH_TEST);
     412    glPopAttrib();
    417413
    418414    //assert(glGetError()==0);
  • trunk/packages/vizservers/nanovis/NvParticleRenderer.h

    r2883 r2921  
    5050    ~NvParticleRenderer();
    5151
    52     void setVectorField(unsigned int texID, const Vector3& ori,
     52    void setVectorField(unsigned int texID, const Vector3& origin,
    5353                        float scaleX, float scaleY, float scaleZ, float max);
    5454
     
    5858
    5959    void updateVertexBuffer();
    60 
    61     void displayVertices();
    6260
    6361    void reset();
  • trunk/packages/vizservers/nanovis/RenderVertexArray.cpp

    r2837 r2921  
    4444
    4545RenderVertexArray::RenderVertexArray(int nverts, GLint size, GLenum type) :
    46     _usage(GL_STREAM_COPY),
     46    _usage(GL_STREAM_COPY_ARB),
    4747    _nverts(nverts),
    4848    _size(size),
     
    5151    switch (_type) {
    5252    case GL_HALF_FLOAT_NV:
    53         _bytes_per_component = 2; break;
     53        _bytesPerComponent = 2; break;
    5454    case GL_FLOAT:
    55         _bytes_per_component = sizeof(float); break;
     55        _bytesPerComponent = sizeof(float); break;
    5656    default:
    5757        ERROR("unsupported RenderVertexArray type\n");
     
    6161    // create the buffer object
    6262    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);
    6768
    6869    // set equivalent image format
     
    8687
    8788void
    88 RenderVertexArray::LoadData(void *data)
     89RenderVertexArray::loadData(void *data)
    8990{
    9091    // 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);
    9597}
    9698
    9799void
    98 RenderVertexArray::Read(/*GLenum buffer,*/ int w, int h)
     100RenderVertexArray::read(int w, int h)
    99101{
    100102    // bind buffer object to pixel pack buffer
    101     glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, _buffer);
     103    glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, _buffer);
     104
    102105    // read from frame buffer to buffer object
    103     //glReadBuffer(buffer); //crash
    104106    glReadPixels(0, 0, w, h, _format, _type, 0);
    105107
    106     glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0);
     108    glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
    107109}
    108110
    109111void
    110 RenderVertexArray::SetPointer(GLuint index)
     112RenderVertexArray::setPointer(GLuint index)
    111113{
    112114    // bind buffer object to vertex array
    113     glBindBufferARB(GL_ARRAY_BUFFER, _buffer);
     115    glBindBufferARB(GL_ARRAY_BUFFER_ARB, _buffer);
    114116    //glVertexAttribPointerARB(index, _size, _type, GL_FALSE, 0, 0);          //doesn't work
    115117    glVertexPointer(_size, _type, 0, 0);
    116118
    117     glBindBufferARB(GL_ARRAY_BUFFER, 0);
     119    glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
    118120}
  • trunk/packages/vizservers/nanovis/RenderVertexArray.h

    r2837 r2921  
    2727    ~RenderVertexArray();
    2828
    29     void LoadData(void *data);  // load vertex data from memory
     29    void loadData(void *data);  // load vertex data from memory
    3030
    31     void Read(/*GLenum buffer,*/ int w, int h);   // read vertex data from
     31    void read(/*GLenum buffer,*/ int w, int h);   // read vertex data from
    3232                                                  // frame buffer
    33     void SetPointer(GLuint index);
     33    void setPointer(GLuint index);
    3434
    3535private:
     
    4141    GLenum _format;    // readpixels image format
    4242    GLenum _type;      // FLOAT or HALF_FLOAT
    43     int _bytes_per_component;
     43    int _bytesPerComponent;
    4444};
    4545
Note: See TracChangeset for help on using the changeset viewer.