Changeset 3025


Ignore:
Timestamp:
10/12/08 11:46:50 (16 years ago)
Author:
mattausch
Message:

worked on cg shader wrapper class

Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj

    r3021 r3025  
    244244                        </File> 
    245245                        <File 
     246                                RelativePath=".\src\ShaderProgram.cpp" 
     247                                > 
     248                        </File> 
     249                        <File 
    246250                                RelativePath=".\src\ShaderProgram.h" 
    247251                                > 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp

    r3021 r3025  
    6666static CGparameter sFilterOffsetsParam; 
    6767static CGparameter sFilterWeightsParam; 
     68static CGparameter sPCFFilterWeightsParam; 
    6869 
    6970static CGprogram sCgDownSampleProgram; 
     
    174175 
    175176int DeferredRenderer::colorBufferIdx = 0; 
     177 
     178 
     179 
     180static float GaussianDistribution(float x, float y, float rho) 
     181{ 
     182    float g = 1.0f / sqrtf(2.0f * M_PI * rho * rho); 
     183    g *= expf( -(x*x + y*y) / (2.0f * rho * rho)); 
     184 
     185    return g; 
     186} 
    176187 
    177188 
     
    380391        ShaderProgram *pr; 
    381392 
    382  
    383393        sCgDeferredProgram =  
    384394                cgCreateProgramFromFile(context,  
     
    583593                sEyePosShadowParam = cgGetNamedParameter(sCgDeferredShadowProgram, "eyePos"); 
    584594 
     595                float filterWeights[NUM_PCF_TABS]; 
     596 
     597                sPCFFilterWeightsParam = cgGetNamedParameter(sCgDeferredShadowProgram, "weights"); 
     598 
    585599                PoissonDiscSampleGenerator2 poisson(NUM_PCF_TABS, 1.0f); 
    586600                poisson.Generate((float *)pcfSamples); 
    587601 
     602                 
     603                for (int i = 0; i < NUM_PCF_TABS; ++ i) 
     604                { 
     605                        filterWeights[i] = GaussianDistribution(pcfSamples[i].x, pcfSamples[i].y, 1.0f); 
     606                } 
     607 
    588608                cgGLSetParameterArray2f(sSamplesShadowParam, 0, NUM_PCF_TABS, (const float *)pcfSamples); 
     609                cgGLSetParameterArray1f(sPCFFilterWeightsParam, 0, NUM_PCF_TABS, (const float *)filterWeights); 
    589610 
    590611                pr = new ShaderProgram(sCgDeferredShadowProgram); 
     
    777798#endif 
    778799 
    779  
    780800        cgGLSetMatrixParameterfc(sOldModelViewProjMatrixParam, (const float *)oldProjViewMatrix.x); 
    781801#if 0 
     
    11291149 
    11301150 
    1131 static float GaussianDistribution(float x, float y, float rho) 
    1132 { 
    1133     float g = 1.0f / sqrtf(2.0f * M_PI * rho * rho); 
    1134     g *= expf( -(x*x + y*y) / (2.0f * rho * rho)); 
    1135  
    1136     return g; 
    1137 } 
    1138  
    1139  
    11401151void DeferredRenderer::CombineSsao(FrameBufferObject *fbo) 
    11411152{ 
     
    12381249 
    12391250        cgGLSetParameter1f(sSampleWidthParam, 2.0f / shadowMap->GetSize()); 
    1240          
     1251 
    12411252          
    12421253        cgGLSetMatrixParameterfc(sShadowMatrixParam, (const float *)shadowMatrix.x); 
     
    14411452 
    14421453        fbo->Bind(); 
    1443 #if 1 
     1454         
    14441455        colorBufferIdx = 3 - colorBufferIdx; 
    14451456        glDrawBuffers(1, mrt + colorBufferIdx); 
     
    14681479 
    14691480        glEnd(); 
    1470 #endif 
    14711481 
    14721482        cgGLDisableTextureParameter(sColorsTexToneParam); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderProgram.h

    r3021 r3025  
    77#include <Cg/cg.h> 
    88#include <Cg/cgGL.h> 
     9#include <string> 
     10#include <map> 
    911 
    1012 
     
    1921class DirectionalLight; 
    2022 
     23typedef std::map<std::string, CGparameter> CGParameterMap; 
     24typedef std::vector<CGparameter> CGParameterArray; 
     25 
    2126 
    2227class ShaderProgram 
     
    2631        ShaderProgram(CGprogram program): mProgram(program) {} 
    2732 
    28         ~ShaderProgram() { cgDestroyProgram(mProgram); } 
     33        ShaderProgram(CGcontext context,  
     34                          const std::string &filename,  
     35                                  CGprofile profile, 
     36                                  const std::string &functionName); 
     37 
     38        ~ShaderProgram() { if (mProgram != NULL) cgDestroyProgram(mProgram); } 
     39 
     40        void SetValue1f(const std::string &name, float value); 
     41        void SetValue2f(const std::string &name, float val1, float val2); 
     42        void SetValue3f(const std::string &name, float val1, float val, float val3); 
     43 
     44        void SetArray1f(const std::string &name, float *vals, int numElements); 
     45        void SetArray2f(const std::string &name, float *vals, int numElements); 
     46        void SetArray3f(const std::string &name, float *vals, int numElements); 
     47 
     48        void SetMatrix(const std::string &name, const Matrix4x4 &mat); 
     49 
     50        void SetTexture(const std::string &name,  unsigned int tex); 
     51 
     52        void Release(); 
     53 
     54        void Bind(); 
     55 
     56        inline bool IsValid() { return mProgram != NULL; } 
     57 
     58 
     59protected: 
     60 
     61        CGparameter GetOrCreateParameter(const std::string &name); 
     62 
     63        CGParameterMap mParamHash; 
     64        //CGParameterArray mParameters; 
     65 
     66        CGParameterArray mTextureParams; 
    2967 
    3068        CGprogram mProgram; 
    3169}; 
     70 
    3271 
    3372typedef  std::vector<ShaderProgram *> ShaderContainer; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg

    r3024 r3025  
    9191float CalcShadowTerm(fragment IN, 
    9292                                         uniform sampler2D shadowMap, 
    93                                          uniform float w, 
     93                                         uniform float scale, 
    9494                                         uniform float2 lightSpacePos, 
    9595                                         uniform float depth, 
    9696                                         uniform float2 samples[NUM_PCF_TABS], 
     97                                         uniform float weights[NUM_PCF_TABS], 
    9798                                         uniform sampler2D noiseTexture 
    9899                                         ) 
     
    101102        //return step(depth, shadowDepth); 
    102103 
    103         float total_d = 0.0; 
    104          
     104        float total_d = .0f; 
     105        float total_w = .0f; 
     106 
    105107        for (int i = 0; i < NUM_PCF_TABS; ++ i)  
    106108        { 
    107109                const float2 offset = samples[i]; 
     110                const float w = weights[i]; 
    108111 
    109112#if 1 
     
    117120#endif 
    118121                // weight with projected coordinate to reach similar kernel size for near and far 
    119                 float2 texcoord = lightSpacePos + offsetTransformed * w; 
     122                float2 texcoord = lightSpacePos + offsetTransformed * scale; 
    120123 
    121124                float shadowDepth = tex2D(shadowMap, texcoord).x; 
    122125 
    123                 total_d += step(depth, shadowDepth); 
     126                total_d += w * step(depth, shadowDepth); 
     127                total_w += w; 
    124128        } 
    125129 
    126         total_d /= (float)NUM_PCF_TABS; 
     130        total_d /= (float)total_w; 
    127131 
    128132        return total_d; 
    129133} 
     134 
    130135 
    131136inline float3 Interpol(float2 w, float3 bl, float3 br, float3 tl, float3 tr) 
     
    195200 
    196201                float shadowTerm = CalcShadowTerm(IN, shadowMap, sampleWidth, lightSpacePos.xy, lightSpacePos.z, samples, weights, noiseTexture); 
     202                //float shadowTerm = CalcShadowTerm(IN, shadowMap, sampleWidth, lightSpacePos.xy, lightSpacePos.z, samples, noiseTexture); 
    197203 
    198204                diffuse *= shadowTerm; 
Note: See TracChangeset for help on using the changeset viewer.