Ignore:
Timestamp:
Apr 9, 2012 7:39:27 PM (12 years ago)
Author:
ldelgass
Message:

Add parameter management and methods for setting parameters to NvShader?. This
will allow removing all Cg code from renderers and into the NvShader? wrapper.
This paves the way to converting shaders to GLSL and removing the Cg dependency.

Location:
trunk/packages/vizservers/nanovis
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/NvShader.cpp

    r2911 r2954  
    9090    TRACE("In ~NvShader");
    9191    if (_cgContext == NULL) {
    92         TRACE("Lost Cg context");
     92        TRACE("Lost Cg context: vp: %s, fp: %s", _vpFile.c_str(), _fpFile.c_str());
    9393    } else {
    9494        resetPrograms();
     
    103103    _cgVP = loadCgSourceProgram(_cgContext, fileName,
    104104                                _vertexProfile, entryPoint);
     105    _vpFile = fileName;
    105106}
    106107
     
    112113    _cgFP = loadCgSourceProgram(_cgContext, fileName,
    113114                                _fragmentProfile, entryPoint);
     115    _fpFile = fileName;
    114116}
    115117
     
    117119{
    118120    if (_cgVP != NULL) {
     121        TRACE("Destroying vertex program: %s\n", _vpFile.c_str());
    119122        cgDestroyProgram(_cgVP);
    120123    }
    121124
    122125    if (_cgFP != NULL) {
     126        TRACE("Destroying fragment program: %s\n", _fpFile.c_str());
    123127        cgDestroyProgram(_cgFP);
    124128    }
  • trunk/packages/vizservers/nanovis/NvShader.h

    r2913 r2954  
    33#define NV_SHADER_H
    44
     5#include <string>
     6#include <tr1/unordered_map>
     7
    58#include <GL/glew.h>
    69#include <Cg/cg.h>
     
    1619{
    1720public:
     21    enum NvGLMatrix {
     22        MODELVIEW_MATRIX = CG_GL_MODELVIEW_MATRIX,
     23        PROJECTION_MATRIX = CG_GL_PROJECTION_MATRIX,
     24        MODELVIEW_PROJECTION_MATRIX = CG_GL_MODELVIEW_PROJECTION_MATRIX
     25    };
     26    enum NvGLMatrixType {
     27        MATRIX_IDENTITY = CG_GL_MATRIX_IDENTITY,
     28        MATRIX_INVERSE = CG_GL_MATRIX_INVERSE
     29    };
     30
    1831    typedef void NvCgCallbackFunction(void);
    1932
     
    4154            return cgGetNamedParameter(_cgFP, paramName);
    4255        }
     56        ERROR("Unknown fragment program parameter: %s\n", paramName);
    4357        return 0;
    4458    }
     
    4963            return cgGetNamedParameter(_cgVP, paramName);
    5064        }
     65        ERROR("Unknown vertex program parameter: %s\n", paramName);
    5166        return 0;
    5267    }
    5368
    54     void setTextureParameter(CGparameter param, GLuint texobj)
    55     {
     69    void setVPParameter1f(const char *name, float val)
     70    {
     71        CGparameter param = getVPParam(name);
     72        if (param == NULL)
     73            return;
     74        cgSetParameter1f(param, val);
     75    }
     76
     77    void setFPParameter1f(const char *name, float val)
     78    {
     79        CGparameter param = getFPParam(name);
     80        if (param == NULL)
     81            return;
     82        cgSetParameter1f(param, val);
     83    }
     84
     85    void setVPParameter2f(const char *name, float val1, float val2)
     86    {
     87        CGparameter param = getVPParam(name);
     88        if (param == NULL)
     89            return;
     90        cgSetParameter2f(param, val1, val2);
     91    }
     92
     93    void setFPParameter2f(const char *name, float val1, float val2)
     94    {
     95        CGparameter param = getFPParam(name);
     96        if (param == NULL)
     97            return;
     98        cgSetParameter2f(param, val1, val2);
     99    }
     100
     101    void setVPParameter3f(const char *name, float val1, float val2, float val3)
     102    {
     103        CGparameter param = getVPParam(name);
     104        if (param == NULL)
     105            return;
     106        cgSetParameter3f(param, val1, val2, val3);
     107    }
     108
     109    void setFPParameter3f(const char *name, float val1, float val2, float val3)
     110    {
     111        CGparameter param = getFPParam(name);
     112        if (param == NULL)
     113            return;
     114        cgSetParameter3f(param, val1, val2, val3);
     115    }
     116
     117    void setVPParameter4f(const char *name, float val1, float val2, float val3, float val4)
     118    {
     119        CGparameter param = getVPParam(name);
     120        if (param == NULL)
     121            return;
     122        cgSetParameter4f(param, val1, val2, val3, val4);
     123    }
     124
     125    void setFPParameter4f(const char *name, float val1, float val2, float val3, float val4)
     126    {
     127        CGparameter param = getFPParam(name);
     128        if (param == NULL)
     129            return;
     130        cgSetParameter4f(param, val1, val2, val3, val4);
     131    }
     132
     133    void setVPTextureParameter(const char *name, GLuint texobj, bool enable = true)
     134    {
     135        CGparameter param = getVPParam(name);
     136        if (param == NULL)
     137            return;
    56138        cgGLSetTextureParameter(param, texobj);
    57     }
    58 
    59     CGprogram getVP() const
    60     {
    61         return _cgVP;
    62     }
    63 
    64     CGprogram getFP() const
    65     {
    66         return _cgFP;
     139        if (enable)
     140            cgGLEnableTextureParameter(param);
     141    }
     142
     143    void setFPTextureParameter(const char *name, GLuint texobj, bool enable = true)
     144    {
     145        CGparameter param = getFPParam(name);
     146        if (param == NULL)
     147            return;
     148        ParameterHashmap::iterator itr = _fpParams.find(name);
     149        cgGLSetTextureParameter(param, texobj);
     150        if (enable)
     151            cgGLEnableTextureParameter(param);
     152    }
     153
     154    void enableVPTextureParameter(const char *name)
     155    {
     156        CGparameter param = getVPParam(name);
     157        if (param == NULL)
     158            return;
     159        cgGLEnableTextureParameter(param);
     160    }
     161
     162    void enaableFPTextureParameter(const char *name)
     163    {
     164        CGparameter param = getFPParam(name);
     165        if (param == NULL)
     166            return;
     167        cgGLEnableTextureParameter(param);
     168    }
     169
     170    void disableVPTextureParameter(const char *name)
     171    {
     172        CGparameter param = getVPParam(name);
     173        if (param == NULL)
     174            return;
     175        cgGLDisableTextureParameter(param);
     176    }
     177
     178    void disableFPTextureParameter(const char *name)
     179    {
     180        CGparameter param = getFPParam(name);
     181        if (param == NULL)
     182            return;
     183        cgGLDisableTextureParameter(param);
     184    }
     185
     186    void setGLStateMatrixVPParameter(const char *name, NvGLMatrix matrix, NvGLMatrixType type)
     187    {
     188        CGparameter param = getVPParam(name);
     189        if (param == NULL)
     190            return;
     191        cgGLSetStateMatrixParameter(param, (CGGLenum)matrix, (CGGLenum)type);
     192    }
     193
     194    void setGLStateMatrixFPParameter(const char *name, NvGLMatrix matrix, NvGLMatrixType type)
     195    {
     196        CGparameter param = getFPParam(name);
     197        if (param == NULL)
     198            return;
     199        cgGLSetStateMatrixParameter(param, (CGGLenum)matrix, (CGGLenum)type);
    67200    }
    68201
     
    126259
    127260protected:
     261    typedef std::tr1::unordered_map<std::string, CGparameter> ParameterHashmap;
     262
     263    CGprogram getVP()
     264    {
     265        return _cgVP;
     266    }
     267
     268    CGprogram getFP()
     269    {
     270        return _cgFP;
     271    }
     272
     273    CGparameter getVPParam(const char *name)
     274    {
     275        CGparameter param;
     276        ParameterHashmap::iterator itr = _vpParams.find(name);
     277        if (itr == _vpParams.end()) {
     278            param = getNamedParameterFromVP(name);
     279            if (param != NULL)
     280                _vpParams[name] = param;
     281            else
     282                ERROR("Unknown vertex program parameter: %s\n", name);
     283        } else {
     284            param = itr->second;
     285        }
     286        return param;
     287    }
     288
     289    CGparameter getFPParam(const char *name)
     290    {
     291        CGparameter param;
     292        ParameterHashmap::iterator itr = _fpParams.find(name);
     293        if (itr == _fpParams.end()) {
     294            param = getNamedParameterFromFP(name);
     295            if (param != NULL)
     296                _fpParams[name] = param;
     297            else
     298                ERROR("Unknown fragment program parameter: %s\n", name);
     299        } else {
     300            param = itr->second;
     301        }
     302        return param;
     303    }
     304
    128305    void resetPrograms();
    129306
    130307    CGprofile _vertexProfile;
    131308    CGprofile _fragmentProfile;
     309    std::string _vpFile;
    132310    CGprogram _cgVP;
     311    std::string _fpFile;
    133312    CGprogram _cgFP;
     313    ParameterHashmap _vpParams;
     314    ParameterHashmap _fpParams;
    134315
    135316    static CGprofile _defaultVertexProfile;
Note: See TracChangeset for help on using the changeset viewer.