Ignore:
Timestamp:
10/16/08 19:51:16 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r3033 r3034  
    4646void GPUProgramParameters::SetTexture(int idx, unsigned int tex) 
    4747{ 
     48        mTextures.push_back(IntParam(idx, tex)); 
    4849} 
    4950 
     
    5657void GPUProgramParameters::SetValue1f(const string &name, float val) 
    5758{ 
    58         SetValue1f(mProgram->GetParameter(name), val); 
    59 } 
    60  
    61  
    62 void ShaderProgram::SetValue2f(const string &name, float val1, float val2) 
    63 { 
    64         SetValue2f(mProgram->GetParameter(name), val1, val2); 
     59        SetValue1f(mProgram->GetParamIdxByName(name), val); 
     60} 
     61 
     62 
     63void GPUProgramParameters::SetValue2f(const string &name, float val1, float val2) 
     64{ 
     65        SetValue2f(mProgram->GetParamIdxByName(name), val1, val2); 
    6566} 
    6667 
     
    6869void GPUProgramParameters::SetValue3f(const string &name, float val1, float val2, float val3) 
    6970{ 
    70         SetValue3f(mProgram->GetParameter(name), val1, val2, val3); 
     71        SetValue3f(mProgram->GetParamIdxByName(name), val1, val2, val3); 
    7172} 
    7273 
     
    7475void GPUProgramParameters::SetArray1f(const string &name, float *vals, int numElements) 
    7576{ 
    76         SetArray1f(mProgram->GetParameter(name), numElements, (const float *)vals); 
    77 } 
    78  
    79  
    80 void GPUProgramParameters::GetParameter(const string &name, float *vals, int numElements) 
    81 { 
    82         SetArray2f(mProgram->GetParameter(name, numElements, (const float *)vals); 
     77        SetArray1f(mProgram->GetParamIdxByName(name), vals, numElements); 
     78} 
     79 
     80 
     81void GPUProgramParameters::SetArray2f(const string &name, float *vals, int numElements) 
     82{ 
     83        SetArray2f(mProgram->GetParamIdxByName(name), vals, numElements); 
    8384} 
    8485 
     
    8687void GPUProgramParameters::SetArray3f(const string &name, float *vals, int numElements) 
    8788{ 
    88         SetArray3f(mProgram->GetParameter(name), numElements, (const float *)vals); 
     89        SetArray3f(mProgram->GetParamIdxByName(name), vals, numElements); 
    8990} 
    9091 
     
    9293void GPUProgramParameters::SetMatrix(const string &name, Matrix4x4 *mat) 
    9394{ 
    94         SetMatrix(mProgram->GetParameter(name), mat); 
     95        SetMatrix(mProgram->GetParamIdxByName(name), mat); 
    9596} 
    9697 
     
    9899void GPUProgramParameters::SetTexture(const string &name, unsigned int tex) 
    99100{ 
    100         SetTexture(mProgram->GetOrCreateParameter(name), tex); 
    101 } 
     101        SetTexture(mProgram->GetParamIdxByName(name), tex); 
     102} 
     103 
     104 
     105void GPUProgramParameters::UpdateParameters() 
     106{ 
     107        for (size_t i = 0; i < mFloats.size(); ++ i) 
     108        { 
     109                const FloatParam &p = mFloats[i]; 
     110 
     111                switch (p.mNumComponents) 
     112                { 
     113                case 1: 
     114                        mProgram->SetValue1f(p.mIndex, p.mValues[0]); 
     115                        break; 
     116                case 2: 
     117                        mProgram->SetValue2f(p.mIndex, p.mValues[0], p.mValues[1]); 
     118                        break; 
     119                case 3: 
     120                        mProgram->SetValue3f(p.mIndex, p.mValues[0], p.mValues[1], p.mValues[2]); 
     121                        break; 
     122                default: 
     123                        mProgram->SetValue1f(p.mIndex, p.mValues[0]); 
     124                } 
     125        } 
     126 
     127        for (size_t i = 0; i < mTextures.size(); ++ i) 
     128        { 
     129                const IntParam &p = mTextures[i]; 
     130                mProgram->SetTexture(p.mIndex, p.mValue); 
     131        } 
     132 
     133        for (size_t i = 0; i < mMatrices.size(); ++ i) 
     134        { 
     135                const MatrixParam &p = mMatrices[i]; 
     136                mProgram->SetMatrix(p.mIndex, *p.mValue); 
     137        } 
     138} 
     139 
     140 
     141 
     142/********************************************************/ 
     143/*             ShaderProgram implementation             */ 
     144/********************************************************/ 
    102145 
    103146 
     
    116159        if (mProgram) cgGLLoadProgram(mProgram); 
    117160 
    118         mParameters.resize(64); 
    119  
    120         for (int i = 0; i < 64; ++ i) 
     161        const int maxParams = 64; 
     162        mParameters.resize(maxParams); 
     163 
     164        for (int i = 0; i < maxParams; ++ i) 
    121165        { 
    122166                mParameters[i] = NULL; 
     
    151195        CGparameter p = GetOrCreateParameter(name); 
    152196 
     197        mParamHash[name] = idx; 
    153198        mParameters[idx] = p; 
     199 
    154200        return p; 
    155201} 
     
    164210        { 
    165211                p = cgGetNamedParameter(mProgram, name.c_str()); 
    166                 mParamHash[name] = i; 
    167212        } 
    168213        else 
     
    178223CGparameter ShaderProgram::GetParameter(int idx) const 
    179224{ 
    180         CGparameter p = mParameters[idx]; 
    181         return p; 
     225        return mParameters[idx]; 
    182226} 
    183227 
     
    231275        cgGLSetTextureParameter(p, tex); 
    232276        cgGLEnableTextureParameter(p); 
     277} 
     278 
     279 
     280void ShaderProgram::SetValue1f(const string &name, float val) 
     281{ 
     282        cgGLSetParameter1f(GetOrCreateParameter(name), val); 
     283} 
     284 
     285 
     286void ShaderProgram::SetValue2f(const string &name, float val1, float val2) 
     287{ 
     288        cgGLSetParameter2f(GetOrCreateParameter(name), val1, val2); 
     289} 
     290 
     291 
     292void ShaderProgram::SetValue3f(const string &name, float val1, float val2, float val3) 
     293{ 
     294        cgGLSetParameter3f(GetOrCreateParameter(name), val1, val2, val3); 
     295} 
     296 
     297 
     298void ShaderProgram::SetArray1f(const string &name, float *vals, int numElements) 
     299{ 
     300        cgGLSetParameterArray1f(GetOrCreateParameter(name), 0, numElements, (const float *)vals); 
     301} 
     302 
     303 
     304void ShaderProgram::SetArray2f(const string &name, float *vals, int numElements) 
     305{ 
     306        cgGLSetParameterArray2f(GetOrCreateParameter(name), 0, numElements, (const float *)vals); 
     307} 
     308 
     309 
     310void ShaderProgram::SetArray3f(const string &name, float *vals, int numElements) 
     311{ 
     312        cgGLSetParameterArray3f(GetOrCreateParameter(name), 0, numElements, (const float *)vals); 
     313} 
     314 
     315 
     316void ShaderProgram::SetMatrix(const string &name, const Matrix4x4 &mat) 
     317{ 
     318        cgGLSetMatrixParameterfc(GetOrCreateParameter(name), (const float *)mat.x); 
     319} 
     320 
     321 
     322void ShaderProgram::SetTexture(const string &name, unsigned int tex) 
     323{ 
     324        CGparameter p = GetOrCreateParameter(name); 
     325 
     326        cgGLSetTextureParameter(p, tex); 
     327        cgGLEnableTextureParameter(p); 
    233328 
    234329        mTextureParams.push_back(p); 
     
    236331 
    237332 
    238 int ShaderProgram::GetParameter(const std::string &name) 
    239 { 
    240         return mParamHash[name]; 
     333int ShaderProgram::GetParamIdxByName(const std::string &name) const 
     334{ 
     335        CGParameterMap::const_iterator it = mParamHash.find(name); 
     336        return (*it).second; 
    241337} 
    242338 
Note: See TracChangeset for help on using the changeset viewer.