Changeset 3042


Ignore:
Timestamp:
10/19/08 01:33:16 (16 years ago)
Author:
mattausch
Message:

added technique

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

Legend:

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

    r3021 r3042  
    10811081 
    10821082        // hack: for deferred shading we have to define a material 
    1083         static Material boxMat; 
     1083        static Technique boxMat; 
    10841084        boxMat.SetEmmisive(RgbaColor(1.0f, 1.0f, 1.0f, 1.0f)); 
    10851085 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Material.cpp

    r3039 r3042  
    1818 
    1919 
    20 void Material::InitMaterial() 
     20void Technique::InitMaterial() 
    2121{ 
    2222        mTexture = NULL; 
     
    3232 
    3333 
    34 Material::Material(): 
     34Technique::Technique(): 
    3535mAmbientColor(RgbaColor(0.2f, 0.2f, 0.2f, 1.0f)), 
    3636mDiffuseColor(RgbaColor(1.0f, 1.0f, 1.0f, 1.0f)), 
     
    4242 
    4343 
    44 Material::~Material() 
     44Technique::~Technique() 
    4545{ 
    4646        //DEL_PTR(mGPUFragmentParameters); 
     
    4949 
    5050 
    51 Material::Material(const RgbaColor &color): 
     51Technique::Technique(const RgbaColor &color): 
    5252mDiffuseColor(color), 
    5353mAmbientColor(color), 
     
    5959 
    6060 
    61 Material RandomMaterial() 
    62 { 
    63         float a = 0.1f; 
    64         float b = 0.9f; 
    65  
    66         Material m; 
    67         m.mDiffuseColor = RandomColor(a, b); 
    68  
    69         return m; 
    70 } 
    71  
    72  
    73 void Material::Render(RenderState *state) 
     61void Technique::Render(RenderState *state) 
    7462{ 
    7563        glMaterialfv(GL_FRONT, GL_AMBIENT, (float *)&mAmbientColor.r); 
     
    8270 
    8371 
    84 void Material::SetFragmentProgram(ShaderProgram *p)  
     72void Technique::SetFragmentProgram(ShaderProgram *p)  
    8573{  
    8674        mFragmentProgram = p;  
     
    9179         
    9280 
    93 void Material::SetVertexProgram(ShaderProgram *p)  
     81void Technique::SetVertexProgram(ShaderProgram *p)  
    9482{  
    9583        mVertexProgram = p;  
     
    9987} 
    10088 
     89 
     90void Material::Render(RenderState *state) 
     91{ 
     92        mTechniques[0]->Render(state); 
    10193} 
     94 
     95 
     96Technique *Material::GetDefaultTechnique() const 
     97{ 
     98        return mTechniques[0]; 
     99} 
     100 
     101 
     102Technique *Material::GetTechnique(int i) const 
     103{ 
     104        return mTechniques[i]; 
     105} 
     106 
     107 
     108Material::Material() 
     109{ 
     110        Technique *tech = new Technique(); 
     111 
     112        mTechniques.push_back(tech); 
     113} 
     114 
     115 
     116Material::~Material() 
     117{ 
     118        CLEAR_CONTAINER(mTechniques); 
     119} 
     120 
     121 
     122int Material::GetNumTechniques() const 
     123{ 
     124        return (int)mTechniques.size(); 
     125} 
     126 
     127 
     128} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Material.h

    r3036 r3042  
    1515 
    1616 
     17/** Class representing an rgba color vector. 
     18*/ 
    1719class RgbaColor  
    1820{ 
     
    3638 
    3739 
    38  
    39 class Material  
     40/** This class represents a certain rendering technique of a shape. 
     41        A material consists of one or more techniques 
     42*/ 
     43class Technique  
    4044{ 
    4145friend class ResourceManager; 
     
    4549        /** Sets default material (ambient intensity 0.2f, diffuse intensity 1.0f) 
    4650        */ 
    47         Material(); 
     51        Technique(); 
    4852 
    49         ~Material(); 
     53        ~Technique(); 
    5054        /** Sets ambient and diffuse color to color 
    5155        */ 
    52         Material(const RgbaColor &color); 
    53  
    54         friend Material RandomMaterial(); 
     56        Technique(const RgbaColor &color); 
    5557 
    5658        inline Texture *GetTexture() const { return mTexture; } 
     
    7375        inline bool IsAlphaTestEnabled() const { return mAlphaTestEnabled; }  
    7476        inline bool IsCullFaceEnabled() const { return mCullFaceEnabled; }  
    75         /** Renders this material. 
     77        /** Renders this technique. 
    7678        */ 
    7779        void Render(RenderState *state); 
     
    115117 
    116118 
    117 extern Material RandomMaterial(); 
     119/** A material consists of one or more techniques. 
     120*/ 
     121class Material 
     122{ 
     123public: 
     124        /** Default constructor creating one default technique. 
     125        */ 
     126        Material(); 
     127 
     128        ~Material(); 
     129        /** Renders this material. 
     130        */ 
     131        void Render(RenderState *state); 
     132 
     133        void AddTechnique(Technique *t); 
     134 
     135        Technique *GetDefaultTechnique() const; 
     136 
     137        Technique *GetTechnique(int i) const; 
     138 
     139        int GetNumTechniques() const; 
     140 
     141 
     142 
     143protected: 
     144 
     145        TechniqueContainer mTechniques; 
     146}; 
    118147 
    119148} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp

    r2848 r3042  
    5151bool RenderQueue::FitsInBucket(Shape *shape, size_t idx) const 
    5252{ 
    53         Material *mat = shape->GetMaterial(); 
     53        Technique *tech = shape->GetMaterial()->GetDefaultTechnique(); 
    5454 
    5555        // test if entity belongs to this bucket 
    5656        // note: rather slows down the application for some reason!! 
    57         if (mat->IsAlphaTestEnabled() != mBuckets[idx]->mAlphaTestEnabled) 
     57        if (tech->IsAlphaTestEnabled() != mBuckets[idx]->mAlphaTestEnabled) 
    5858                return false; 
    5959 
    60         if (mat->IsCullFaceEnabled() != mBuckets[idx]->mCullFaceEnabled) 
     60        if (tech->IsCullFaceEnabled() != mBuckets[idx]->mCullFaceEnabled) 
    6161                return false; 
    6262 
    63         const bool hasTexture = (mat->GetTexture() != NULL); 
     63        const bool hasTexture = (tech->GetTexture() != NULL); 
    6464 
    6565        if (hasTexture != mBuckets[idx]->mHasTexture) 
     
    6868        if (hasTexture) 
    6969        { 
    70                 if (mat->GetTexture()->GetWidth() != mBuckets[idx]->mTexWidth) 
     70                if (tech->GetTexture()->GetWidth() != mBuckets[idx]->mTexWidth) 
    7171                        return false; 
    7272 
    73                 if (mat->GetTexture()->GetHeight() != mBuckets[idx]->mTexHeight) 
     73                if (tech->GetTexture()->GetHeight() != mBuckets[idx]->mTexHeight) 
    7474                        return false; 
    7575        } 
     
    119119                        bucket->mMinDistance = -1; 
    120120 
    121                         Material *mat = shape->GetMaterial(); 
    122  
    123                         bucket->mAlphaTestEnabled = mat->IsAlphaTestEnabled(); 
    124                         bucket->mCullFaceEnabled = mat->IsCullFaceEnabled(); 
    125  
    126                         const bool hasTexture = (mat->GetTexture() != NULL); 
     121                        Technique *tech = shape->GetMaterial()->GetDefaultTechnique(); 
     122 
     123                        bucket->mAlphaTestEnabled = tech->IsAlphaTestEnabled(); 
     124                        bucket->mCullFaceEnabled = tech->IsCullFaceEnabled(); 
     125 
     126                        const bool hasTexture = (tech->GetTexture() != NULL); 
    127127 
    128128                        bucket->mHasTexture = hasTexture;  
    129129 
    130                         bucket->mTexWidth = hasTexture ? mat->GetTexture()->GetWidth() : 0; 
    131                         bucket->mTexHeight = hasTexture ? mat->GetTexture()->GetHeight() : 0; 
     130                        bucket->mTexWidth = hasTexture ? tech->GetTexture()->GetWidth() : 0; 
     131                        bucket->mTexHeight = hasTexture ? tech->GetTexture()->GetHeight() : 0; 
    132132 
    133133                        mBuckets.push_back(bucket); 
     
    204204                        Shape *shape = *sit; 
    205205                         
    206                         Material *mat = shape->GetMaterial(); 
    207                         int tsize = mat->GetTexture() ? mat->GetTexture()->GetByteSize() : 0; 
     206                        Technique *tech = shape->GetMaterial()->GetDefaultTechnique(); 
     207                        int tsize = tech->GetTexture() ? tech->GetTexture()->GetByteSize() : 0; 
    208208                         
    209209                        float dist = SqrMagnitude(shape->GetBoundingBox().Center() - mCamera->GetPosition()); 
    210210                         
    211                         Debug << "e: " << shape << " a: " << mat->IsAlphaTestEnabled() << " s: " << tsize << " d: " << dist << " " << endl; 
     211                        Debug << "e: " << shape << " a: " << tech->IsAlphaTestEnabled() << " s: " << tsize << " d: " << dist << " " << endl; 
    212212                } 
    213213        } 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.cpp

    r3039 r3042  
    9595                glDepthMask(GL_FALSE); 
    9696 
    97                 static Material defaultMat; 
    98                 SetState(&defaultMat); 
     97                static Technique defaultTech; 
     98                SetState(&defaultTech); 
    9999        } 
    100100        else // mode returns to render 
     
    122122 
    123123         
    124 void RenderState::SetState(Material *mat) 
    125 { 
    126         Texture *tex = mat->GetTexture(); 
     124void RenderState::SetState(Technique *tech) 
     125{ 
     126        Texture *tex = tech->GetTexture(); 
    127127 
    128128        const bool texturing = (tex != NULL); 
    129129 
    130         bool alphaTest = mat->IsAlphaTestEnabled(); 
    131         bool cullFace = mat->IsCullFaceEnabled(); 
     130        bool alphaTest = tech->IsAlphaTestEnabled(); 
     131        bool cullFace = tech->IsCullFaceEnabled(); 
    132132 
    133133        if (!mLockCullFaceEnabled) 
     
    189189        if (mRenderType == DEFERRED) 
    190190        { 
    191                 if (mat->GetFragmentProgram()) 
    192                 { 
    193                         if (mat->GetFragmentProgram() != mCurrentFragmentProgram) 
     191                ShaderProgram *frag = tech->GetFragmentProgram(); 
     192 
     193                if (frag) 
     194                { 
     195                        if (frag != mCurrentFragmentProgram) 
    194196                        {                        
    195                                 mCurrentFragmentProgram = mat->GetFragmentProgram(); 
     197                                mCurrentFragmentProgram = frag; 
    196198                                mCurrentFragmentProgram->Bind();                         
    197199                        } 
    198200                         
    199                         mat->GetFragmentProgramParameters()->UpdateParameters(); 
    200  
    201                 } 
    202          
    203                 if (mat->GetVertexProgram()) 
    204                 { 
    205                         if (mat->GetVertexProgram() != mCurrentVertexProgram) 
    206                         { 
    207                                 mCurrentVertexProgram = mat->GetVertexProgram(); 
     201                        tech->GetFragmentProgramParameters()->UpdateParameters(); 
     202 
     203                } 
     204 
     205                ShaderProgram *vert = tech->GetVertexProgram(); 
     206 
     207                if (vert) 
     208                { 
     209                        if (vert != mCurrentVertexProgram) 
     210                        { 
     211                                mCurrentVertexProgram = vert; 
    208212                                mCurrentVertexProgram->Bind(); 
    209213                        } 
    210214                 
    211                         mat->GetVertexProgramParameters()->UpdateParameters(); 
     215                        tech->GetVertexProgramParameters()->UpdateParameters(); 
    212216                } 
    213217        } 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.h

    r3038 r3042  
    4545        /** Sets the current render state. 
    4646        */ 
    47         void SetState(Material *mat); 
     47        void SetState(Technique *tech); 
    4848        /** Returns either query or render mode 
    4949        */ 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp

    r3041 r3042  
    166166                                Shape *shape = *it; 
    167167                                Material *mat = shape->GetMaterial(); 
    168                                 mat->SetVertexProgram(sTreeAnimation); 
    169  
    170                                 GPUProgramParameters *vtxParams = mat->GetVertexProgramParameters(); 
     168                                Technique *tech = mat->GetDefaultTechnique(); 
     169                                 
     170                                tech->SetVertexProgram(sTreeAnimation); 
     171 
     172                                GPUProgramParameters *vtxParams = tech->GetVertexProgramParameters(); 
    171173 
    172174                                vtxParams->SetTimerParam(0); 
     
    251253        Material *mat = new Material(); 
    252254         
     255        // set default fragment + vertex programs 
     256        Technique *tech = mat->GetDefaultTechnique(); 
     257 
    253258        // texture 
    254259        int texId; 
     
    256261 
    257262        if (texId >= 0) 
    258                 mat->SetTexture(mTextureTable[texId]); 
    259          
    260         str.read(reinterpret_cast<char *>(&mat->mAlphaTestEnabled), sizeof(bool)); 
    261         str.read(reinterpret_cast<char *>(&mat->mCullFaceEnabled), sizeof(bool)); 
     263                tech->SetTexture(mTextureTable[texId]); 
     264         
     265        str.read(reinterpret_cast<char *>(&tech->mAlphaTestEnabled), sizeof(bool)); 
     266        str.read(reinterpret_cast<char *>(&tech->mCullFaceEnabled), sizeof(bool)); 
    262267 
    263268        // gl material 
    264269        bool hasGlMaterial; 
    265270        str.read(reinterpret_cast<char *>(&hasGlMaterial), sizeof(bool)); 
    266          
     271 
    267272        if (hasGlMaterial) 
    268273        { 
    269274                // only write rgb part of the material 
    270                 str.read(reinterpret_cast<char *>(&mat->mAmbientColor), sizeof(Vector3)); 
    271                 str.read(reinterpret_cast<char *>(&mat->mDiffuseColor), sizeof(Vector3)); 
    272                 str.read(reinterpret_cast<char *>(&mat->mEmmisiveColor), sizeof(Vector3)); 
    273                 str.read(reinterpret_cast<char *>(&mat->mSpecularColor), sizeof(Vector3)); 
    274         } 
    275  
    276         if (mat->GetTexture()) 
    277         { 
    278                 mat->mFragmentProgram = mMrtDefaultFragmentTexProgram; 
    279  
    280                 mat->mGPUFragmentParameters = CreateGPUProgramParameters(mat->mFragmentProgram); 
    281                 mat->mGPUFragmentParameters->SetTexture(0, mat->GetTexture()->GetId()); 
     275                str.read(reinterpret_cast<char *>(&tech->mAmbientColor), sizeof(Vector3)); 
     276                str.read(reinterpret_cast<char *>(&tech->mDiffuseColor), sizeof(Vector3)); 
     277                str.read(reinterpret_cast<char *>(&tech->mEmmisiveColor), sizeof(Vector3)); 
     278                str.read(reinterpret_cast<char *>(&tech->mSpecularColor), sizeof(Vector3)); 
     279        } 
     280 
     281        if (tech->GetTexture()) 
     282        { 
     283                tech->mFragmentProgram = mMrtDefaultFragmentTexProgram; 
     284 
     285                tech->mGPUFragmentParameters = CreateGPUProgramParameters(tech->mFragmentProgram); 
     286                tech->mGPUFragmentParameters->SetTexture(0, tech->GetTexture()->GetId()); 
    282287        }        
    283288        else 
    284289        { 
    285                 mat->mFragmentProgram = mMrtDefaultFragmentProgram; 
    286                 mat->mGPUFragmentParameters = CreateGPUProgramParameters(mat->mFragmentProgram); 
    287         } 
    288  
    289         mat->mVertexProgram = mMrtDefaultVertexProgram; 
    290         mat->mGPUVertexParameters = CreateGPUProgramParameters(mat->mVertexProgram); 
     290                tech->mFragmentProgram = mMrtDefaultFragmentProgram; 
     291                tech->mGPUFragmentParameters = CreateGPUProgramParameters(tech->mFragmentProgram); 
     292        } 
     293 
     294        tech->mVertexProgram = mMrtDefaultVertexProgram; 
     295        tech->mGPUVertexParameters = CreateGPUProgramParameters(tech->mVertexProgram); 
    291296         
    292297        return mat; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h

    r2980 r3042  
    3535        SceneEntity(Transform3 *trafo); 
    3636 
    37         ~SceneEntity(); 
     37        virtual ~SceneEntity(); 
    3838        /** Renders this node. 
    3939        */ 
    40         void Render(RenderState *state);         
     40        virtual void Render(RenderState *state);         
    4141        /** Set pointer to the shape 
    4242        */ 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SkyPreetham.cpp

    r3041 r3042  
    8080        Material *mat = shape->GetMaterial(); 
    8181 
    82         mat->SetFragmentProgram(mSkyFragProgram); 
    83         mat->SetVertexProgram(mSkyVtxProgram); 
     82        mat->GetDefaultTechnique()->SetFragmentProgram(mSkyFragProgram); 
     83        mat->GetDefaultTechnique()->SetVertexProgram(mSkyVtxProgram); 
    8484} 
    8585 
     
    114114        mSkyDome->GetTransform()->SetMatrix(s * m); 
    115115         
    116         GPUProgramParameters *vtxParams = mSkyDome->GetShape(0)->GetMaterial()->GetVertexProgramParameters(); 
     116        Material *mat = mSkyDome->GetShape(0)->GetMaterial(); 
     117        Technique *tech = mat->GetDefaultTechnique(); 
     118 
     119        GPUProgramParameters *vtxParams = tech->GetVertexProgramParameters(); 
    117120 
    118121        vtxParams->SetValue3f(0, sunDir.x, sunDir.y, sunDir.z); 
     
    138141        } 
    139142 
    140         mSkyDome->GetShape(0)->GetMaterial()->GetVertexProgramParameters()->UpdateParameters(); 
    141         mSkyDome->GetShape(0)->GetMaterial()->GetVertexProgram()->Bind(); 
    142  
    143         mSkyDome->GetShape(0)->GetMaterial()->GetFragmentProgramParameters()->UpdateParameters(); 
    144         mSkyDome->GetShape(0)->GetMaterial()->GetFragmentProgram()->Bind(); 
     143        tech->GetVertexProgramParameters()->UpdateParameters(); 
     144        tech->GetVertexProgram()->Bind(); 
     145 
     146        tech->GetFragmentProgramParameters()->UpdateParameters(); 
     147        tech->GetFragmentProgram()->Bind(); 
    145148 
    146149        // Render sky dome. 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/common.h

    r3038 r3042  
    3737class ShaderProgram; 
    3838class FrameBufferObject; 
     39class Technique; 
    3940 
    4041struct LODLevel; 
     
    501502typedef std::vector<Material *> MaterialContainer; 
    502503typedef std::vector<GPUProgramParameters *> GPUParamContainer; 
    503 typedef  std::vector<FrameBufferObject *> FBOContainer; 
    504 typedef  std::vector<ShaderProgram *> ShaderContainer; 
    505  
     504typedef std::vector<FrameBufferObject *> FBOContainer; 
     505typedef std::vector<ShaderProgram *> ShaderContainer; 
     506typedef std::vector<Technique *> TechniqueContainer; 
    506507typedef std::vector<Vector3> VertexArray; 
     508 
    507509 
    508510typedef std::pair<float, float> Texcoord2; 
Note: See TracChangeset for help on using the changeset viewer.