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

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