Ignore:
Timestamp:
10/21/08 18:10:50 (16 years ago)
Author:
mattausch
Message:

added a shader manager

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

Legend:

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

    r3038 r3057  
    99#include "ShadowMapping.h" 
    1010#include "Light.h" 
    11 #include "ResourceManager.h" 
    12  
     11#include "ShaderManager.h" 
    1312 
    1413#include <IL/il.h> 
     
    283282void DeferredRenderer::InitCg() 
    284283{        
    285         ResourceManager *rm = ResourceManager::GetSingleton(); 
    286  
    287         sCgDeferredProgram = rm->CreateFragmentProgram("deferred", "main"); 
    288         sCgDeferredShadowProgram = rm->CreateFragmentProgram("deferred", "main_shadow"); 
    289         sCgSsaoProgram = rm->CreateFragmentProgram("ssao", "main"); 
    290         sCgGiProgram = rm->CreateFragmentProgram("globillum", "main"); 
    291         sCgCombineIllumProgram = rm->CreateFragmentProgram("globillum", "combine"); 
    292         sCgCombineSsaoProgram = rm->CreateFragmentProgram("ssao", "combine"); 
    293         sCgAntiAliasingProgram = rm->CreateFragmentProgram("antialiasing", "main"); 
    294         sCgToneProgram = rm->CreateFragmentProgram("tonemap", "ToneMap"); 
    295         sCgDownSampleProgram = rm->CreateFragmentProgram("tonemap", "DownSample"); 
    296         sCgToneProgram = rm->CreateFragmentProgram("tonemap", "ToneMap"); 
    297         sCgLogLumProgram = rm->CreateFragmentProgram("tonemap", "CalcAvgLogLum"); 
     284        ShaderManager *sm = ShaderManager::GetSingleton(); 
     285 
     286        sCgDeferredProgram = sm->CreateFragmentProgram("deferred", "main", "deferredFrag"); 
     287        sCgDeferredShadowProgram = sm->CreateFragmentProgram("deferred", "main_shadow", "deferredFragShader"); 
     288        sCgSsaoProgram = sm->CreateFragmentProgram("ssao", "main", "ssaoFrag"); 
     289        sCgGiProgram = sm->CreateFragmentProgram("globillum", "main", "giFrag"); 
     290        sCgCombineIllumProgram = sm->CreateFragmentProgram("globillum", "combine", "combineGi"); 
     291        sCgCombineSsaoProgram = sm->CreateFragmentProgram("ssao", "combine", "combineSsao"); 
     292        sCgAntiAliasingProgram = sm->CreateFragmentProgram("antialiasing", "main", "antiAliasing"); 
     293        sCgToneProgram = sm->CreateFragmentProgram("tonemap", "ToneMap", "toneMap"); 
     294        sCgDownSampleProgram = sm->CreateFragmentProgram("tonemap", "DownSample", "downSample"); 
     295        sCgLogLumProgram = sm->CreateFragmentProgram("tonemap", "CalcAvgLogLum", "avgLogLum"); 
    298296 
    299297        int i; 
     
    403401         
    404402 
    405         ResourceManager::GetSingleton()->EnableFragmentProfile(); 
     403        ShaderManager::GetSingleton()->EnableFragmentProfile(); 
    406404 
    407405        glDisable(GL_ALPHA_TEST); 
     
    475473 
    476474        FrameBufferObject::Release(); 
    477         ResourceManager::GetSingleton()->DisableFragmentProfile(); 
     475        ShaderManager::GetSingleton()->DisableFragmentProfile(); 
    478476} 
    479477 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.cpp

    r3050 r3057  
    44#include "ShaderProgram.h" 
    55#include "Texture.h" 
    6 #include "ResourceManager.h" 
     6#include "ShaderManager.h" 
    77 
    88 
     
    6767        glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    6868 
    69         ResourceManager::GetSingleton()->DisableFragmentProfile(); 
    70         ResourceManager::GetSingleton()->DisableVertexProfile(); 
     69        ShaderManager::GetSingleton()->DisableFragmentProfile(); 
     70        ShaderManager::GetSingleton()->DisableVertexProfile(); 
    7171 
    7272        mFragmentProgramEnabled = false; 
     
    219219                { 
    220220                        mFragmentProgramEnabled = true; 
    221                         ResourceManager::GetSingleton()->EnableFragmentProfile(); 
     221                        ShaderManager::GetSingleton()->EnableFragmentProfile(); 
    222222                } 
    223223 
     
    235235                { 
    236236                        mFragmentProgramEnabled = false; 
    237                         ResourceManager::GetSingleton()->DisableFragmentProfile(); 
     237                        ShaderManager::GetSingleton()->DisableFragmentProfile(); 
    238238                } 
    239239        } 
     
    246246                { 
    247247                        mVertexProgramEnabled = true; 
    248                         ResourceManager::GetSingleton()->EnableVertexProfile(); 
     248                        ShaderManager::GetSingleton()->EnableVertexProfile(); 
    249249                } 
    250250 
     
    262262                { 
    263263                        mVertexProgramEnabled = false; 
    264                         ResourceManager::GetSingleton()->DisableVertexProfile(); 
     264                        ShaderManager::GetSingleton()->DisableVertexProfile(); 
    265265                } 
    266266        } 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp

    r3055 r3057  
    1212#include "RenderState.h" 
    1313#include "ShaderProgram.h" 
    14 #include <Cg/cg.h> 
    15 #include <Cg/cgGL.h> 
     14#include "ShaderManager.h" 
    1615 
    1716 
     
    3433 
    3534 
    36 ///////// 
    37 //-- cg stuff 
    38  
    39 static CGcontext sCgContext = NULL; 
    40  
    41 static CGprofile sCgFragmentProfile; 
    42 static CGprofile sCgVertexProfile;  
    43  
    44 static ShaderProgram *sTreeAnimationProgramMrt; 
    45 static ShaderProgram *sTreeAnimationProgram; 
    46  
    47  
    4835// only instance of the resource manager 
    4936ResourceManager *ResourceManager::sResourceManager = NULL; 
    5037 
    5138 
    52 static void cgErrorCallback() 
    53 { 
    54         CGerror lastError = cgGetError(); 
    55  
    56         if(lastError) 
    57         { 
    58                 printf("%s\n\n", cgGetErrorString(lastError)); 
    59                 printf("%s\n", cgGetLastListing(sCgContext)); 
    60                  
    61                 printf("Cg error, exiting...\n"); 
    62  
    63                 exit(0); 
    64         } 
    65 } 
    66  
    67  
    6839ResourceManager::ResourceManager() 
    6940{  
    70         InitCg();  
    7141} 
    7242 
     
    8252        CLEAR_CONTAINER(mShapes); 
    8353        CLEAR_CONTAINER(mLODs); 
    84         CLEAR_CONTAINER(mGPUParameters); 
    85         CLEAR_CONTAINER(mShaders); 
    86          
    87         if (sCgContext) 
    88                 cgDestroyContext(sCgContext); 
    8954} 
    9055 
     
    160125                sceneGeom->AddLODLevel(lodLevel); 
    161126        } 
     127 
     128        static ShaderProgram *sTreeAnimationProgram = ShaderManager::GetSingleton()->GetShaderProgram("treeAnimation"); 
     129        static ShaderProgram *sTreeAnimationProgramMrt = ShaderManager::GetSingleton()->GetShaderProgram("treeAnimationMrt"); 
    162130 
    163131        /////////// 
     
    310278        //-- add technique for deferred shading 
    311279 
     280        static ShaderProgram *sDefaultFragmentProgramMrt = ShaderManager::GetSingleton()->GetShaderProgram("defaultFragmentMrt"); 
     281        static ShaderProgram *sDefaultFragmentTexProgramMrt = ShaderManager::GetSingleton()->GetShaderProgram("defaultFragmentTexMrt"); 
     282        static ShaderProgram *sDefaultVertexProgramMrt = ShaderManager::GetSingleton()->GetShaderProgram("defaultVertexMrt"); 
     283 
    312284        Technique *deferred = new Technique(*tech); 
    313285 
    314286        if (deferred->GetTexture()) 
    315287        { 
    316                 deferred->SetFragmentProgram(mMrtDefaultFragmentTexProgram); 
     288                deferred->SetFragmentProgram(sDefaultFragmentTexProgramMrt); 
    317289                deferred->GetFragmentProgramParameters()->SetViewMatrixParam(0); 
    318290                deferred->GetFragmentProgramParameters()->SetTexture(1, tech->GetTexture()->GetId()); 
     
    320292        else 
    321293        { 
    322                 deferred->SetFragmentProgram(mMrtDefaultFragmentProgram); 
     294                deferred->SetFragmentProgram(sDefaultFragmentTexProgramMrt); 
    323295                deferred->GetFragmentProgramParameters()->SetViewMatrixParam(0); 
    324296        } 
    325297 
    326         deferred->SetVertexProgram(mMrtDefaultVertexProgram); 
     298        deferred->SetVertexProgram(sDefaultVertexProgramMrt); 
    327299        mat->AddTechnique(deferred); 
    328300         
     
    435407} 
    436408 
    437  
    438 ShaderProgram *ResourceManager::CreateFragmentProgram(const std::string &filename,  
    439                                                                                                           const std::string &funcName) 
    440 { 
    441         const string fullName = "src/shaders/" + filename + ".cg"; 
    442  
    443         ShaderProgram *p = new ShaderProgram(sCgContext, fullName, sCgFragmentProfile, funcName); 
    444         mShaders.push_back(p); 
    445  
    446         if (!p->IsValid()) 
    447         { 
    448                 DEL_PTR(p); 
    449                 cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl; 
    450         } 
    451          
    452         cout << "Program " << funcName << " in " << fullName << " loaded" << endl; 
    453  
    454         return p; 
    455 } 
    456  
    457  
    458 ShaderProgram *ResourceManager::CreateVertexProgram(const std::string &filename, const std::string &funcName) 
    459 { 
    460         const string fullName = "src/shaders/" + filename + ".cg"; 
    461          
    462         ShaderProgram *p = new ShaderProgram(sCgContext, fullName, sCgVertexProfile, funcName); 
    463         mShaders.push_back(p); 
    464  
    465         if (!p->IsValid()) 
    466         { 
    467                 DEL_PTR(p); 
    468                 cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl; 
    469         } 
    470         else 
    471                 cout << "Program " << funcName << " in " << fullName << " loaded" << endl; 
    472  
    473         return p; 
    474 } 
    475  
    476  
    477 void ResourceManager::InitCg()  
    478 { 
    479         // setup cg 
    480         cgSetErrorCallback(cgErrorCallback); 
    481         // create context. 
    482         sCgContext = cgCreateContext(); 
    483         // get the optimal fragment profile 
    484         sCgFragmentProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); 
    485         cgGLSetOptimalOptions(sCgFragmentProfile); 
    486         // get the optimal vertex profile 
    487         sCgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX); 
    488         cgGLSetOptimalOptions(sCgVertexProfile); 
    489  
    490         // set textures to auto load 
    491         cgGLSetManageTextureParameters(sCgContext, false); 
    492  
    493         mMrtDefaultVertexProgram = CreateVertexProgram("mrt", "vtx"); 
    494         mMrtDefaultFragmentProgram = CreateFragmentProgram("mrt", "frag"); 
    495         mMrtDefaultFragmentTexProgram = CreateFragmentProgram("mrt", "fragtex"); 
    496  
    497         // provide the current view matrix 
    498         mMrtDefaultFragmentProgram->AddParameter("viewMatrix", 0); 
    499         mMrtDefaultFragmentTexProgram->AddParameter("viewMatrix", 0); 
    500         // add a texture parameter 
    501         mMrtDefaultFragmentTexProgram->AddParameter("tex", 1); 
    502  
    503  
    504         //////////// 
    505         //-- hack: apply hardcoded tree animation (should be provided with a material script!) 
    506  
    507         sTreeAnimationProgram = CreateVertexProgram("treeanimation", "animateVtx"); 
    508         sTreeAnimationProgramMrt = CreateVertexProgram("treeanimation", "animateVtxMrt"); 
    509  
    510         sTreeAnimationProgram->AddParameter("timer", 0); 
    511         sTreeAnimationProgram->AddParameter("windDir", 1); 
    512         sTreeAnimationProgram->AddParameter("windStrength", 2); 
    513         sTreeAnimationProgram->AddParameter("minMaxPos", 3); 
    514         sTreeAnimationProgram->AddParameter("frequency", 4); 
    515         sTreeAnimationProgram->AddParameter("lightDir", 5); 
    516  
    517         sTreeAnimationProgramMrt->AddParameter("timer", 0); 
    518         sTreeAnimationProgramMrt->AddParameter("windDir", 1); 
    519         sTreeAnimationProgramMrt->AddParameter("windStrength", 2); 
    520         sTreeAnimationProgramMrt->AddParameter("minMaxPos", 3); 
    521         sTreeAnimationProgramMrt->AddParameter("frequency", 4); 
    522  
    523         cout << "cg initialization successful" << endl; 
    524 } 
    525  
    526  
    527 void ResourceManager::EnableFragmentProfile() 
    528 { 
    529         cgGLEnableProfile(sCgFragmentProfile); 
    530 } 
    531  
    532  
    533 void ResourceManager::EnableVertexProfile() 
    534 { 
    535         cgGLEnableProfile(sCgVertexProfile); 
    536 } 
    537  
    538  
    539 void ResourceManager::DisableFragmentProfile() 
    540 { 
    541         cgGLDisableProfile(sCgFragmentProfile); 
    542 } 
    543  
    544  
    545 void ResourceManager::DisableVertexProfile() 
    546 { 
    547         cgGLDisableProfile(sCgVertexProfile); 
    548          
    549 } 
    550  
    551  
    552 } 
    553  
     409} 
     410 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.h

    r3054 r3057  
    1 #ifndef __ResourceManager_H__ 
    2 #define __ResourceManager_H__ 
     1#ifndef __RESOURCEMANAGER_H__ 
     2#define __RESOURCEMANAGER_H__ 
    33 
    44 
     
    3838        */ 
    3939        int GetNumEntities() const { return (int)mSceneEntities.size(); } 
    40         /** Creates new gpu program parameters. 
    41         */ 
    42         GPUProgramParameters *CreateGPUProgramParameters(ShaderProgram *p); 
    43         /** Creates a new shader program. 
    44         */ 
    45         ShaderProgram *CreateFragmentProgram(const std::string &filename, const std::string &funcName); 
    46         ShaderProgram *CreateVertexProgram(const std::string &filename, const std::string &funcName); 
    47  
    48         void EnableFragmentProfile(); 
    49         void EnableVertexProfile(); 
    50  
    51         void DisableFragmentProfile(); 
    52         void DisableVertexProfile(); 
    5340        /** Returns pointer to shape container. 
    5441        */ 
     
    5744        */ 
    5845        const SceneEntityContainer * const GetSceneEntities() const { return &mSceneEntities; } 
    59  
    6046        /** Returns the resource manager as a singleton. 
    6147        */ 
     
    7460 
    7561        ~ResourceManager(); 
    76  
    77  
    78         void InitCg(); 
    7962 
    8063        void LoadTextures(igzstream &str); 
     
    9982        GeometryContainer mGeometry; 
    10083        TransformContainer mTrafos; 
    101         GPUParamContainer mGPUParameters; 
    102         ShaderContainer mShaders; 
    10384        ShapeContainer mShapes; 
    10485        LODContainer mLODs; 
    10586        /// the scene entities 
    10687        SceneEntityContainer mSceneEntities; 
    107  
    108  
    109         //////////// 
    110         //-- default shader programs 
    111  
    112         ShaderProgram *mMrtDefaultVertexProgram; 
    113         ShaderProgram *mMrtDefaultFragmentProgram; 
    114         ShaderProgram *mMrtDefaultFragmentTexProgram; 
    115  
    11688 
    11789private: 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.cpp

    r3056 r3057  
    179179                                  isFragment ? sCgFragmentProfile : sCgVertexProfile, funcName); 
    180180 
    181         ShaderMap::const_iterator it = mShaderMap.find(name); 
    182  
    183         if (it == mShaderMap.end()) 
     181        if (GetShaderProgram(name)) 
    184182        { 
     183                cerr << "Program name " << name << "already chosen" << endl; 
     184 
    185185                DEL_PTR(p); 
    186  
    187                 cerr << "Program name " << name << "already chosen" << endl; 
    188186                return p; 
    189187        } 
     
    191189        if (!p->IsValid()) 
    192190        { 
     191                cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl; 
     192 
    193193                DEL_PTR(p); 
    194                 cerr << "Program " << funcName << " in " << fullName << " failed to load" << endl; 
    195194                return p; 
    196195        } 
    197196 
     197         
     198        // everything ok 
    198199        cout << "Program " << funcName << " in " << fullName << " loaded" << endl; 
    199200                 
     
    205206 
    206207 
    207 } 
    208  
     208ShaderProgram *ShaderManager::GetShaderProgram(const std::string &name) 
     209{ 
     210        ShaderMap::const_iterator it = mShaderMap.find(name); 
     211 
     212        if (it == mShaderMap.end()) 
     213                return NULL; 
     214         
     215        return (*it).second; 
     216} 
     217 
     218 
     219} 
     220 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ShaderManager.h

    r3056 r3057  
    2727        /** Returns the resource manager as a singleton. 
    2828        */ 
    29         static ShaderManager *GetSingleton(); 
     29        inline static ShaderManager *GetSingleton(); 
    3030        /** We also want full control over the delete. 
    3131        */ 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SkyPreetham.cpp

    r3054 r3057  
    99#include "Shape.h" 
    1010#include "Material.h" 
    11 #include "ResourceManager.h" 
     11#include "ShaderManager.h" 
    1212 
    1313 
     
    4646{        
    4747        mSkyVtxProgram =  
    48                 ResourceManager::GetSingleton()->CreateVertexProgram("sky_preetham", "default_vs"); 
     48                ShaderManager::GetSingleton()->CreateVertexProgram("sky_preetham", "default_vs", "skyVtx"); 
    4949                 
    5050        if (mSkyVtxProgram->IsValid()) 
     
    6464 
    6565        mSkyFragProgram =  
    66                 ResourceManager::GetSingleton()->CreateFragmentProgram("sky_preetham", "frag_skydome"); 
     66                ShaderManager::GetSingleton()->CreateFragmentProgram("sky_preetham", "frag_skydome", "skyFragMrt"); 
    6767} 
    6868 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r3054 r3057  
    5353#include "SkyPreetham.h" 
    5454#include "Texture.h" 
    55 #include "EntityMerger.h" 
     55//#include "EntityMerger.h" 
     56#include "ShaderManager.h" 
    5657 
    5758using namespace std; 
     
    7576/// handles scene loading 
    7677ResourceManager *loader = NULL; 
     78/// handles scene loading 
     79ShaderManager *shaderManager = NULL; 
    7780/// the scene camera 
    7881Camera *camera = NULL; 
     
    419422 
    420423        loader = ResourceManager::GetSingleton(); 
     424        shaderManager = ShaderManager::GetSingleton(); 
    421425 
    422426        const string filename = string(model_path + "city.dem"); 
     
    829833        state.SetRenderTechnique(RenderState::DEFERRED); 
    830834 
    831         loader->EnableVertexProfile(); 
    832         loader->EnableFragmentProfile(); 
     835        shaderManager->EnableVertexProfile(); 
     836        shaderManager->EnableFragmentProfile(); 
    833837 
    834838        const Vector3 pos = camera->GetPosition(); 
     
    16551659 
    16561660        ResourceManager::DelSingleton(); 
     1661        ShaderManager::DelSingleton(); 
     1662 
    16571663        loader = NULL; 
     1664        shaderManager = NULL; 
    16581665} 
    16591666 
     
    19551962void RenderShadowMap(float newfar) 
    19561963{ 
    1957         loader->DisableVertexProfile(); 
    1958         loader->DisableFragmentProfile(); 
     1964        shaderManager->DisableVertexProfile(); 
     1965        shaderManager->DisableFragmentProfile(); 
    19591966 
    19601967        glDisableClientState(GL_NORMAL_ARRAY); 
Note: See TracChangeset for help on using the changeset viewer.