Ignore:
Timestamp:
08/22/08 13:20:06 (16 years ago)
Author:
mattausch
Message:

cleaned up code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/FrameBufferObject.cpp

    r2859 r2861  
    99{ 
    1010 
     11GLenum color_attachment[] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT}; 
    1112 
    1213void PrintFBOStatus(GLenum status) 
     
    1516        { 
    1617        case GL_FRAMEBUFFER_COMPLETE_EXT: 
    17                 cout << "frame buffer object created successfully" << endl; 
     18                cout << "frame buffer object complete" << endl; 
    1819                break; 
    1920        case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: 
     
    4546 
    4647ColorBufferObject::ColorBufferObject(int w, int h,  
    47                                                                          FORMAT c,  
     48                                                                         FORMAT format,  
    4849                                                                         WRAP_TYPE wrapType,  
    4950                                                                         FILTER_TYPE filterType,  
    5051                                                                         bool useMipMap,  
    51                                                                          bool useMultiSampling) 
     52                                                                         bool useMultiSampling, 
     53                                                                         int attachment_idx) 
    5254{ 
     55        GLuint glformat, internalFormat; 
     56 
     57 
     58        switch (format) 
     59        { 
     60        case BUFFER_UBYTE: 
     61                glformat = GL_UNSIGNED_BYTE; internalFormat = GL_RGBA8; break; 
     62        case BUFFER_FLOAT_16: 
     63                glformat = GL_FLOAT; internalFormat = GL_RGBA16F_ARB; break; 
     64        case BUFFER_FLOAT_32:  
     65                glformat = GL_FLOAT; internalFormat = GL_RGBA32F_ARB; break; 
     66        default: 
     67                glformat = GL_UNSIGNED_BYTE; internalFormat = GL_RGBA8; 
     68                cerr << "should not come here" << endl; 
     69        } 
     70 
    5371        glGenRenderbuffersEXT(1, &mId); 
    5472        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mId); 
    55         glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, w, h); 
     73        glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, internalFormat, w, h); 
    5674         
    57         glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_RENDERBUFFER_EXT, mId); 
     75        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, color_attachment[attachment_idx], GL_RENDERBUFFER_EXT, mId); 
    5876 
    5977        glGenTextures(1, &mTexId); 
    6078        glBindTexture(GL_TEXTURE_2D, mTexId); 
    61         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
    62         glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, mTexId, 0); 
     79        //glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, w, h, 0, GL_RGBA, glformat, NULL); 
     80        glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, w, h, 0, GL_RGBA, glformat, NULL); 
     81        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, color_attachment[attachment_idx], GL_TEXTURE_2D, mTexId, 0); 
    6382 
    6483        GLuint filterParam; 
     
    7291        case FILTER_MIPMAP_LINEAR:  
    7392                filterParam = GL_LINEAR_MIPMAP_LINEAR; break; 
     93        default: 
     94                filterParam = GL_NEAREST; 
     95                cerr << "should not come here" << endl; 
    7496        } 
    7597 
     
    96118 
    97119 
    98 FrameBufferObject::FrameBufferObject(int w, int h, bool useDepth, DEPTH_FORMAT d) 
     120FrameBufferObject::FrameBufferObject(int w, int h, DEPTH_FORMAT d) 
    99121: mWidth(w), mHeight(h) 
    100122{ 
     
    102124        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mId); 
    103125 
    104          
     126        cout << "creating fbo" << endl; 
     127 
    105128        /////////// 
    106129        //-- create depth buffer 
    107130 
    108         if (useDepth) 
     131        if (d != DEPTH_NONE) 
    109132        { 
    110133                glGenRenderbuffersEXT(1, &mDepthId);     
    111134                glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mDepthId); 
     135 
     136                cout << "adding depth buffer" << endl; 
    112137 
    113138                GLuint depthFormat; 
     
    121146                case DEPTH_32:  
    122147                        depthFormat = GL_DEPTH_COMPONENT32; break; 
     148                default:         
     149                        cerr << "should not come here" << endl; 
    123150                } 
    124151 
     
    126153                glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mDepthId); 
    127154        } 
    128  
    129         // print status 
    130         PrintFBOStatus(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)); 
    131155} 
    132156 
     
    138162                                                                          bool useMultiSampling) 
    139163{ 
     164        cout << "adding color buffer" << endl; 
     165 
     166        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mId); 
     167 
     168        int idx = (int)mColorBuffers.size(); 
    140169        ColorBufferObject *colorBuf =  
    141                 new ColorBufferObject(mWidth, mHeight, col, wrapType, filterType, useMipMap, useMultiSampling); 
     170                new ColorBufferObject(mWidth, mHeight, col, wrapType, filterType, useMipMap, useMultiSampling, idx); 
     171 
    142172        mColorBuffers.push_back(colorBuf); 
    143173 
    144         return (int)mColorBuffers.size() - 1; 
     174        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 
     175 
     176        return idx; 
     177} 
     178 
     179 
     180void FrameBufferObject::Bind() const 
     181{ 
     182        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mId); 
     183} 
     184 
     185 
     186void FrameBufferObject::Release() 
     187{ 
     188        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 
    145189} 
    146190 
Note: See TracChangeset for help on using the changeset viewer.