source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Material.cpp @ 3054

Revision 3054, 3.3 KB checked in by mattausch, 16 years ago (diff)

worked on render queue

RevLine 
[2747]1#include "common.h"
2#include "Material.h"
[2756]3#include "Texture.h"
4#include "glInterface.h"
[2769]5#include "RenderState.h"
[2747]6
[3045]7
[3034]8using namespace std;
[2756]9
[3034]10
[2776]11namespace CHCDemoEngine
[2751]12{
[2747]13
[2769]14RgbaColor RandomColor(float a, float b)
[2747]15{
[2769]16        return RgbaColor(a + Random(b), a + Random(b), a + Random(b), 1);
[2747]17}
18
19
[3047]20void Technique::Init()
[2756]21{
22        mTexture = NULL;
[2769]23        mAlphaTestEnabled = false;
[2844]24        mCullFaceEnabled = true;
[3034]25       
[3045]26        mVertexProgramParameters.Reset();
27        mFragmentProgramParameters.Reset();
28       
[3034]29        mVertexProgram = NULL;
30        mFragmentProgram = NULL;
[3047]31
[3050]32        // if this material can write colors
[3047]33        mColorWriteEnabled = true;
[3050]34        // if lighting is used
[3048]35        mLightingEnabled = true;
[3054]36        /// if depth write should be enabled
37        mDepthWriteEnabled = true;
[3050]38
[3054]39        mRenderQueueBucket = NULL;
[2756]40}
41
42
[3042]43Technique::Technique():
[3034]44mAmbientColor(RgbaColor(0.2f, 0.2f, 0.2f, 1.0f)),
45mDiffuseColor(RgbaColor(1.0f, 1.0f, 1.0f, 1.0f)),
46mSpecularColor(RgbaColor(.0f, .0f, .0f, 1.0f)),
47mEmmisiveColor(RgbaColor(.0f, .0f, .0f, 1.0f))
[2756]48{
[3047]49        Init();
[2756]50}
[2755]51
[2756]52
[3042]53Technique::Technique(const RgbaColor &color):
[2756]54mDiffuseColor(color),
[2755]55mAmbientColor(color),
[2795]56mSpecularColor(0, 0, 0, 1),
[2756]57mTexture(NULL)
[2755]58{
[3047]59        Init();
[2755]60}
61
[3054]62/*
[3050]63Technique::Technique(const Technique &tech)
64{
65        mAmbientColor = tech.mAmbientColor;
66        mDiffuseColor = tech.mDiffuseColor;
67        mSpecularColor = tech.mSpecularColor;
68        mEmmisiveColor = tech.mEmmisiveColor;
[3045]69
[3050]70        mVertexProgram = tech.mVertexProgram;
71        mFragmentProgram = tech.mFragmentProgram;
72
73        mAlphaTestEnabled = tech.mAlphaTestEnabled;
74        mCullFaceEnabled =tech.mCullFaceEnabled;
75
76        mTexture = tech.mTexture;
77
78        mVertexProgramParameters = tech.mVertexProgramParameters;
79        mFragmentProgramParameters = tech.mFragmentProgramParameters;
80
81        mColorWriteEnabled = tech.mColorWriteEnabled;
82        mLightingEnabled = tech.mLightingEnabled;
83        mDepthWriteEnabled = tech.mDepthWriteEnabled;
[3054]84}*/
[3050]85
86
[3045]87Technique::~Technique()
88{
89}
90
91
[3042]92void Technique::Render(RenderState *state)
[2747]93{
[2960]94        glMaterialfv(GL_FRONT, GL_AMBIENT, (float *)&mAmbientColor.r);
95        glMaterialfv(GL_FRONT, GL_DIFFUSE, (float *)&mDiffuseColor.r);
96        glMaterialfv(GL_FRONT, GL_EMISSION, (float *)&mEmmisiveColor.r);
97        glMaterialfv(GL_FRONT, GL_SPECULAR, (float *)&mSpecularColor.r);
[3039]98
99        state->SetState(this);
[2751]100}
[2756]101
102
[3042]103void Technique::SetFragmentProgram(ShaderProgram *p)
[3036]104{
105        mFragmentProgram = p;
106
[3045]107        mFragmentProgramParameters.Reset();
108        mFragmentProgramParameters.SetProgram(p);
[2756]109}
[3036]110       
111
[3042]112void Technique::SetVertexProgram(ShaderProgram *p)
[3036]113{
114        mVertexProgram = p;
115
[3045]116        mVertexProgramParameters.Reset();
117        mVertexProgramParameters.SetProgram(p);
[3036]118}
119
[3042]120
[3045]121/***********************************************/
122/*        class Material implementation        */
123/***********************************************/
124
125
[3042]126void Material::Render(RenderState *state)
127{
[3048]128        mTechniques[state->GetRenderTechnique()]->Render(state);
[3036]129}
[3042]130
131
132Technique *Material::GetDefaultTechnique() const
133{
134        return mTechniques[0];
135}
136
137
138Technique *Material::GetTechnique(int i) const
139{
140        return mTechniques[i];
141}
142
143
144Material::Material()
145{
146        Technique *tech = new Technique();
147
148        mTechniques.push_back(tech);
149}
150
151
152Material::~Material()
153{
154        CLEAR_CONTAINER(mTechniques);
155}
156
157
158int Material::GetNumTechniques() const
159{
160        return (int)mTechniques.size();
161}
162
163
[3045]164void Material::AddTechnique(Technique *tech)
165{
166        mTechniques.push_back(tech);
[3042]167}
[3045]168
169
170}
Note: See TracBrowser for help on using the repository browser.