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

Revision 3047, 2.6 KB checked in by mattausch, 16 years ago (diff)

adding special technique for depth pass (not working yet)

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::Init()
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        /// if this material can write colors
33        mColorWriteEnabled = true;
34        /// if lighting is used
35        bool mLightingEnabled = true;
36}
37
38
39Technique::Technique():
40mAmbientColor(RgbaColor(0.2f, 0.2f, 0.2f, 1.0f)),
41mDiffuseColor(RgbaColor(1.0f, 1.0f, 1.0f, 1.0f)),
42mSpecularColor(RgbaColor(.0f, .0f, .0f, 1.0f)),
43mEmmisiveColor(RgbaColor(.0f, .0f, .0f, 1.0f))
44{
45        Init();
46}
47
48
49Technique::Technique(const RgbaColor &color):
50mDiffuseColor(color),
51mAmbientColor(color),
52mSpecularColor(0, 0, 0, 1),
53mTexture(NULL)
54{
55        Init();
56}
57
58
59
60Technique::~Technique()
61{
62}
63
64
65void Technique::Render(RenderState *state)
66{
67        glMaterialfv(GL_FRONT, GL_AMBIENT, (float *)&mAmbientColor.r);
68        glMaterialfv(GL_FRONT, GL_DIFFUSE, (float *)&mDiffuseColor.r);
69        glMaterialfv(GL_FRONT, GL_EMISSION, (float *)&mEmmisiveColor.r);
70        glMaterialfv(GL_FRONT, GL_SPECULAR, (float *)&mSpecularColor.r);
71
72        state->SetState(this);
73}
74
75
76void Technique::SetFragmentProgram(ShaderProgram *p)
77{
78        mFragmentProgram = p;
79
80        mFragmentProgramParameters.Reset();
81        mFragmentProgramParameters.SetProgram(p);
82}
83       
84
85void Technique::SetVertexProgram(ShaderProgram *p)
86{
87        mVertexProgram = p;
88
89        mVertexProgramParameters.Reset();
90        mVertexProgramParameters.SetProgram(p);
91}
92
93
94/***********************************************/
95/*        class Material implementation        */
96/***********************************************/
97
98
99void Material::Render(RenderState *state)
100{
101        if (state->GetRenderPassType() == RenderState::DEFERRED)
102                mTechniques[1]->Render(state);
103        else
104                mTechniques[0]->Render(state);
105}
106
107
108Technique *Material::GetDefaultTechnique() const
109{
110        return mTechniques[0];
111}
112
113
114Technique *Material::GetTechnique(int i) const
115{
116        return mTechniques[i];
117}
118
119
120Material::Material()
121{
122        Technique *tech = new Technique();
123
124        mTechniques.push_back(tech);
125}
126
127
128Material::~Material()
129{
130        CLEAR_CONTAINER(mTechniques);
131}
132
133
134int Material::GetNumTechniques() const
135{
136        return (int)mTechniques.size();
137}
138
139
140void Material::AddTechnique(Technique *tech)
141{
142        mTechniques.push_back(tech);
143}
144
145
146}
Note: See TracBrowser for help on using the repository browser.