Changeset 2976


Ignore:
Timestamp:
09/26/08 18:31:24 (16 years ago)
Author:
mattausch
Message:

cannot read mipmap, but stayed on gpu

Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src
Files:
8 edited

Legend:

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

    r2975 r2976  
    2828 
    2929static CGparameter sColorsTexDeferredParam; 
     30static CGparameter sOldColorsTexDeferredParam; 
     31 
    3032static CGparameter sPositionsTexDeferredParam; 
    3133static CGparameter sNormalsTexDeferredParam; 
     
    111113static CGparameter sIntensityTexDownSampleParam; 
    112114 
    113  
    114  
     115static unsigned int pbo[] = {0, 0}; 
     116 
     117static unsigned int sCurrentPBOIdx = 0; 
    115118//#define USE_3D_SSAO 
    116119 
     
    128131Sample2 pcfSamples[NUM_PCF_TABS]; 
    129132 
    130 static int colorBufferIdx = 0; 
     133int DeferredRenderer::colorBufferIdx = 0; 
    131134 
    132135static void PrintGLerror(char *msg) 
     
    141144        } 
    142145} 
     146 
     147static int computeSize(int level) 
     148{ 
     149        // Compute total image size. 
     150        float w = 1024; 
     151        float h = 768; 
     152 
     153        int mipmapSize = max(1, w / (1 << level) ) *  
     154                             max(1, h / (1 << level) ) * sizeof(float) * 4; 
     155 
     156        return mipmapSize; 
     157} 
     158 
    143159 
    144160 
     
    257273        mFbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_LINEAR); 
    258274        mFbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_LINEAR); 
     275 
     276        glGenBuffersARB(2, pbo); 
     277 
     278        int dataSize = 1024 * 1768 * 4 * sizeof(float); 
     279 
     280        glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo[0]); 
     281        glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, dataSize, 0, GL_STREAM_READ_ARB); 
     282        glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo[1]); 
     283        glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, dataSize, 0, GL_STREAM_READ_ARB); 
     284 
     285        glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); 
    259286} 
    260287 
     
    297324                sPositionsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "positions");   
    298325                sColorsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "colors");   
     326                sOldColorsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "oldColors"); 
    299327                sNormalsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "normals"); 
    300328                 
     
    521549 
    522550        mFboIndex = 2 - mFboIndex; 
    523         //swap(mNewFbo, mOldFbo);        
    524  
     551         
    525552        FrameBufferObject::Release(); 
    526553 
     
    537564        glPushMatrix(); 
    538565        glLoadIdentity(); 
    539  
    540         colorBufferIdx = 0; 
    541566 
    542567        const float offs = 0.5f; 
     
    551576        else 
    552577                FirstPass(fbo, light); 
    553  
    554578 
    555579        switch (mShadingMethod) 
     
    570594        float imageKey, whiteLum, middleGrey; 
    571595 
    572         // generate mip map levels of position texture 
     596        glPixelStorei(GL_PACK_ALIGNMENT, 1); 
     597        // generate mip map levels for average loglum and tone mapping  
    573598        glBindTexture(GL_TEXTURE_2D, fbo->GetColorBuffer(colorBufferIdx)->GetTexture()); 
    574599        glGenerateMipmapEXT(GL_TEXTURE_2D); 
    575  
     600         
    576601        ComputeToneParameters(fbo, light, imageKey, whiteLum, middleGrey); 
    577602        ToneMap(fbo, light, imageKey, whiteLum, middleGrey); 
     
    770795{ 
    771796        GLuint colorsTex = fbo->GetColorBuffer(colorBufferIdx)->GetTexture(); 
     797        GLuint oldColorsTex = fbo->GetColorBuffer(3 - colorBufferIdx)->GetTexture(); 
    772798        GLuint positionsTex = fbo->GetColorBuffer(1)->GetTexture(); 
    773799        GLuint normalsTex = fbo->GetColorBuffer(2)->GetTexture(); 
     
    786812        cgGLSetTextureParameter(sColorsTexDeferredParam, colorsTex); 
    787813        cgGLEnableTextureParameter(sColorsTexDeferredParam); 
     814 
     815        cgGLSetTextureParameter(sOldColorsTexDeferredParam, oldColorsTex); 
     816        cgGLEnableTextureParameter(sOldColorsTexDeferredParam); 
    788817 
    789818        cgGLSetTextureParameter(sPositionsTexDeferredParam, positionsTex); 
     
    811840 
    812841        cgGLDisableTextureParameter(sColorsTexDeferredParam); 
     842        cgGLDisableTextureParameter(sOldColorsTexDeferredParam); 
    813843        cgGLDisableTextureParameter(sPositionsTexDeferredParam); 
    814844        cgGLDisableTextureParameter(sNormalsTexDeferredParam); 
     
    11291159                                                                                         float &middleGrey) 
    11301160{ 
     1161        // read pixels from framebuffer to PBO 
     1162/*      glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo[sCurrentPBOIdx]); 
     1163         
     1164        glBindTexture(GL_TEXTURE_2D, fbo->GetColorBuffer(colorBufferIdx)->GetTexture()); 
     1165        glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, NULL); 
     1166 
     1167        ///////////// 
     1168        //-- map the PBO to process its data by CPU 
     1169 
     1170        sCurrentPBOIdx = 1 - sCurrentPBOIdx; 
     1171 
     1172        glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo[sCurrentPBOIdx]); 
     1173        GLfloat *ptr = (GLfloat *)glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB); 
     1174 
     1175        if (ptr) 
     1176        { 
     1177                float lumScaled = ptr[4 * 2 - 1]; 
     1178                float logLum = lumScaled * LOGLUM_RANGE + MINLOGLUM; 
     1179                imageKey = exp(logLum); 
     1180 
     1181                cout << "key: " << imageKey << " " << lumScaled << endl; 
     1182                glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); 
     1183        } 
     1184*/ 
     1185        float *pixels = (float *)fbo->GetColorBuffer(colorBufferIdx)->ReadTexture(); 
     1186 
     1187        float lumScaled = pixels[3];//4 * 2 - 1]; 
     1188         
     1189        float logLum = lumScaled * LOGLUM_RANGE + MINLOGLUM; 
     1190        imageKey = exp(logLum); 
     1191         
     1192        delete [] pixels; 
     1193        cout << "key: " << imageKey << " " << lumScaled << endl; 
     1194 
     1195        // back to conventional pixel operation 
     1196        glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); 
     1197 
     1198 
    11311199        // hack: estimate value where sky burns out 
    11321200        whiteLum = log(1e4f); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.h

    r2973 r2976  
    6161 
    6262        void SetShadingMethod(SHADING_METHOD s); 
     63        static int colorBufferIdx; 
    6364 
    6465protected: 
     
    112113 
    113114        bool mRegenerateSamples; 
     115 
    114116}; 
    115117 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/FrameBufferObject.cpp

    r2965 r2976  
    162162        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapParam); 
    163163 
    164         if (useMipMap) glGenerateMipmapEXT(GL_TEXTURE_2D); 
     164        if (useMipMap)  
     165        { 
     166                //glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE); 
     167                glGenerateMipmapEXT(GL_TEXTURE_2D); 
     168        } 
    165169 
    166170        // print status 
     
    186190        } 
    187191 
    188         unsigned char *data = new unsigned char[bytes * 4 * mWidth * mHeight]; 
    189  
     192        glBindTexture(GL_TEXTURE_2D, 0); 
     193        glFlush(); 
     194        glFinish(); 
    190195        glEnable(GL_TEXTURE_2D); 
    191196        glBindTexture(GL_TEXTURE_2D, mTexId); 
    192  
    193         glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, mGlFormat, data); 
     197        //glBindTexture(GL_TEXTURE_2D, mTexId); 
     198        GLint width, height; 
     199 
     200        glGetTexLevelParameteriv(GL_TEXTURE_2D, 1, GL_TEXTURE_WIDTH, &width); 
     201        glGetTexLevelParameteriv(GL_TEXTURE_2D, 1, GL_TEXTURE_HEIGHT, &height); 
     202 
     203        cout << "w: " << width << "h: " << height << endl; 
     204 
     205        /*glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); 
     206        glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); 
     207 
     208        cout << "w: " << width << "h: " << height << endl; 
     209*/ 
     210        unsigned char *data = new unsigned char[bytes * 4 * width * height]; 
     211 
     212 
     213        glGetTexImage(GL_TEXTURE_2D, 1, GL_RGBA, GL_FLOAT, data); 
     214        //glGetTexImage(GL_TEXTURE_RECTANGLE_EXT, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, (void *)data); 
    194215 
    195216        glBindTexture(GL_TEXTURE_2D, 0); 
    196217        glDisable(GL_TEXTURE_2D); 
    197218 
     219        float *d = (float *)data; 
     220 
     221        /*for (int i = 0; i < 10000; ++ i) 
     222        { 
     223                if (i % 100 == 0) 
     224                cout << "x: " << d[i]; 
     225        }*/ 
     226        //cout << endl << endl; 
    198227        return data; 
    199228} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2974 r2976  
    168168PerfTimer frameTimer, algTimer; 
    169169 
    170  
     170static int sCurrentMrtSet = 0; 
    171171 
    172172/// the used render type for this render pass 
     
    617617 
    618618        // the diffuse color buffer 
    619         fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, ColorBufferObject::FILTER_NEAREST); 
     619        fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_LINEAR, ColorBufferObject::FILTER_LINEAR); 
    620620 
    621621        // the positions buffer 
     
    626626 
    627627        // another color buffer 
    628         fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, ColorBufferObject::FILTER_NEAREST); 
     628        fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_LINEAR, ColorBufferObject::FILTER_LINEAR); 
    629629 
    630630        PrintGLerror("fbo"); 
     
    10531053                // draw to 3 color buffers 
    10541054                // a color, normal, and positions buffer 
    1055                 glDrawBuffers(4, mrt); 
     1055                if (sCurrentMrtSet == 0) 
     1056                { 
     1057                        DeferredRenderer::colorBufferIdx = 0; 
     1058                        glDrawBuffers(3, mrt); 
     1059                } 
     1060                else  
     1061                { 
     1062                        DeferredRenderer::colorBufferIdx = 3; 
     1063                        glDrawBuffers(3, mrt2); 
     1064                } 
     1065                sCurrentMrtSet = 1 - sCurrentMrtSet; 
    10561066 
    10571067                glEnableClientState(GL_NORMAL_ARRAY); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/glInterface.h

    r2899 r2976  
    2323#endif   
    2424 
    25 static GLenum mrt[] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT}; 
     25static GLenum mrt[] =  
     26{GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT}; 
     27 
     28static GLenum mrt2[] = 
     29{GL_COLOR_ATTACHMENT3_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT0_EXT}; 
    2630 
    2731 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/antialiasing.cg

    r2974 r2976  
    8787        float4 s3 = tex2Dlod(colors, float4(offset + IN.lb.xy * w, 0, 0)); 
    8888 
    89         float4 sc = tex2Dlod(colors, float4(IN.c.xy, 0, 0)); 
     89        float4 centerColor = tex2Dlod(colors, float4(IN.c.xy, 0, 0)); 
    9090 
    91         float4 col = (s0 + s1 + s2 + s3 + sc) * 0.2f; 
     91        float4 col = (s0 + s1 + s2 + s3 + centerColor) * 0.2f; 
    9292        //return (s0 + s1 + s2 + s3) * 0.25f; 
     93 
     94        col.w = centerColor.w; 
    9395 
    9496        return col; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg

    r2975 r2976  
    6464                   uniform sampler2D positions, 
    6565                   uniform sampler2D normals, 
    66                    uniform float3 lightDir 
     66                   uniform float3 lightDir, 
     67                   uniform sampler2D oldColors 
    6768                   ) 
    6869{ 
     
    8687        //-- write out logaritmic luminance for tone mapping 
    8788 
     89        float4 oldColor = tex2Dlod(colors, float4(IN.texCoord.xy, 0, 99)); 
     90 
    8891        const float3 w = float3(0.299f, 0.587f, 0.114f); 
    8992 
     
    9497        float logLumScaled = logLum * INV_LOGLUM_RANGE - logLumOffset; 
    9598 
    96         OUT.color.w = logLumScaled; 
     99        const static float factor = 0.2f; 
     100         
     101        OUT.color.w = lerp(oldColor.w, logLumScaled, factor); 
    97102 
    98103        return OUT; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg

    r2975 r2976  
    189189                // check if something changed in the surrounding area 
    190190                && (oldNumSamples > 0.2 * gi.ao.y) 
    191                 && (oldAvgDepth / newAvgDepth > 0.99) 
     191                //&& (oldAvgDepth / newAvgDepth > 0.99) 
    192192                ) 
    193193        { 
Note: See TracChangeset for help on using the changeset viewer.