aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 18:54:10 +1000
committerDavid Walter Seikel2013-01-13 18:54:10 +1000
commit959831f4ef5a3e797f576c3de08cd65032c997ad (patch)
treee7351908be5995f0b325b2ebeaa02d5a34b82583 /libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h
parentAdd info about changes to Irrlicht. (diff)
downloadSledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.zip
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.gz
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.bz2
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.xz
Remove damned ancient DOS line endings from Irrlicht. Hopefully I did not go overboard.
Diffstat (limited to 'libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h1512
1 files changed, 756 insertions, 756 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h
index ea84a54..1987e1f 100644
--- a/libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h
+++ b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLMaterialRenderer.h
@@ -1,756 +1,756 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt 1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine". 2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h 3// For conditions of distribution and use, see copyright notice in irrlicht.h
4 4
5#ifndef __C_OPENGL_MATERIAL_RENDERER_H_INCLUDED__ 5#ifndef __C_OPENGL_MATERIAL_RENDERER_H_INCLUDED__
6#define __C_OPENGL_MATERIAL_RENDERER_H_INCLUDED__ 6#define __C_OPENGL_MATERIAL_RENDERER_H_INCLUDED__
7 7
8#include "IrrCompileConfig.h" 8#include "IrrCompileConfig.h"
9#ifdef _IRR_COMPILE_WITH_OPENGL_ 9#ifdef _IRR_COMPILE_WITH_OPENGL_
10 10
11#include "COpenGLDriver.h" 11#include "COpenGLDriver.h"
12#include "IMaterialRenderer.h" 12#include "IMaterialRenderer.h"
13 13
14namespace irr 14namespace irr
15{ 15{
16namespace video 16namespace video
17{ 17{
18 18
19//! Base class for all internal OpenGL material renderers 19//! Base class for all internal OpenGL material renderers
20class COpenGLMaterialRenderer : public IMaterialRenderer 20class COpenGLMaterialRenderer : public IMaterialRenderer
21{ 21{
22public: 22public:
23 23
24 //! Constructor 24 //! Constructor
25 COpenGLMaterialRenderer(video::COpenGLDriver* driver) : Driver(driver) 25 COpenGLMaterialRenderer(video::COpenGLDriver* driver) : Driver(driver)
26 { 26 {
27 } 27 }
28 28
29protected: 29protected:
30 30
31 video::COpenGLDriver* Driver; 31 video::COpenGLDriver* Driver;
32}; 32};
33 33
34 34
35//! Solid material renderer 35//! Solid material renderer
36class COpenGLMaterialRenderer_SOLID : public COpenGLMaterialRenderer 36class COpenGLMaterialRenderer_SOLID : public COpenGLMaterialRenderer
37{ 37{
38public: 38public:
39 39
40 COpenGLMaterialRenderer_SOLID(video::COpenGLDriver* d) 40 COpenGLMaterialRenderer_SOLID(video::COpenGLDriver* d)
41 : COpenGLMaterialRenderer(d) {} 41 : COpenGLMaterialRenderer(d) {}
42 42
43 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 43 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
44 bool resetAllRenderstates, IMaterialRendererServices* services) 44 bool resetAllRenderstates, IMaterialRendererServices* services)
45 { 45 {
46 Driver->disableTextures(1); 46 Driver->disableTextures(1);
47 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 47 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
48 48
49 if (resetAllRenderstates || (material.MaterialType != lastMaterial.MaterialType)) 49 if (resetAllRenderstates || (material.MaterialType != lastMaterial.MaterialType))
50 { 50 {
51 // thanks to Murphy, the following line removed some 51 // thanks to Murphy, the following line removed some
52 // bugs with several OpenGL implementations. 52 // bugs with several OpenGL implementations.
53 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 53 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
54 } 54 }
55 } 55 }
56}; 56};
57 57
58 58
59//! Generic Texture Blend 59//! Generic Texture Blend
60class COpenGLMaterialRenderer_ONETEXTURE_BLEND : public COpenGLMaterialRenderer 60class COpenGLMaterialRenderer_ONETEXTURE_BLEND : public COpenGLMaterialRenderer
61{ 61{
62public: 62public:
63 63
64 COpenGLMaterialRenderer_ONETEXTURE_BLEND(video::COpenGLDriver* d) 64 COpenGLMaterialRenderer_ONETEXTURE_BLEND(video::COpenGLDriver* d)
65 : COpenGLMaterialRenderer(d) {} 65 : COpenGLMaterialRenderer(d) {}
66 66
67 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 67 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
68 bool resetAllRenderstates, IMaterialRendererServices* services) 68 bool resetAllRenderstates, IMaterialRendererServices* services)
69 { 69 {
70 Driver->disableTextures(1); 70 Driver->disableTextures(1);
71 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 71 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
72 72
73// if (material.MaterialType != lastMaterial.MaterialType || 73// if (material.MaterialType != lastMaterial.MaterialType ||
74// material.MaterialTypeParam != lastMaterial.MaterialTypeParam || 74// material.MaterialTypeParam != lastMaterial.MaterialTypeParam ||
75// resetAllRenderstates) 75// resetAllRenderstates)
76 { 76 {
77 E_BLEND_FACTOR srcFact,dstFact; 77 E_BLEND_FACTOR srcFact,dstFact;
78 E_MODULATE_FUNC modulate; 78 E_MODULATE_FUNC modulate;
79 u32 alphaSource; 79 u32 alphaSource;
80 unpack_textureBlendFunc(srcFact, dstFact, modulate, alphaSource, material.MaterialTypeParam); 80 unpack_textureBlendFunc(srcFact, dstFact, modulate, alphaSource, material.MaterialTypeParam);
81 81
82#ifdef GL_ARB_texture_env_combine 82#ifdef GL_ARB_texture_env_combine
83 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 83 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
84 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 84 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
85 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 85 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
86 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 86 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
87 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, (f32) modulate ); 87 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, (f32) modulate );
88#else 88#else
89 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 89 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
90 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 90 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
91 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 91 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
92 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 92 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
93 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, (f32) modulate ); 93 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, (f32) modulate );
94#endif 94#endif
95 95
96 glBlendFunc(Driver->getGLBlend(srcFact), Driver->getGLBlend(dstFact)); 96 glBlendFunc(Driver->getGLBlend(srcFact), Driver->getGLBlend(dstFact));
97 glEnable(GL_ALPHA_TEST); 97 glEnable(GL_ALPHA_TEST);
98 glAlphaFunc(GL_GREATER, 0.f); 98 glAlphaFunc(GL_GREATER, 0.f);
99 glEnable(GL_BLEND); 99 glEnable(GL_BLEND);
100 100
101 if ( textureBlendFunc_hasAlpha(srcFact) || textureBlendFunc_hasAlpha(dstFact) ) 101 if ( textureBlendFunc_hasAlpha(srcFact) || textureBlendFunc_hasAlpha(dstFact) )
102 { 102 {
103 if (alphaSource==EAS_VERTEX_COLOR) 103 if (alphaSource==EAS_VERTEX_COLOR)
104 { 104 {
105#ifdef GL_ARB_texture_env_combine 105#ifdef GL_ARB_texture_env_combine
106 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 106 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
107 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); 107 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
108#else 108#else
109 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 109 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
110 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT); 110 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT);
111#endif 111#endif
112 } 112 }
113 else if (alphaSource==EAS_TEXTURE) 113 else if (alphaSource==EAS_TEXTURE)
114 { 114 {
115#ifdef GL_ARB_texture_env_combine 115#ifdef GL_ARB_texture_env_combine
116 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 116 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
117 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); 117 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
118#else 118#else
119 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 119 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
120 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE); 120 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE);
121#endif 121#endif
122 } 122 }
123 else 123 else
124 { 124 {
125#ifdef GL_ARB_texture_env_combine 125#ifdef GL_ARB_texture_env_combine
126 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); 126 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
127 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); 127 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
128 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_TEXTURE); 128 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_TEXTURE);
129#else 129#else
130 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE); 130 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE);
131 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT); 131 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT);
132 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_TEXTURE); 132 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_TEXTURE);
133#endif 133#endif
134 } 134 }
135 } 135 }
136 } 136 }
137 } 137 }
138 138
139 virtual void OnUnsetMaterial() 139 virtual void OnUnsetMaterial()
140 { 140 {
141 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 141 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
142#ifdef GL_ARB_texture_env_combine 142#ifdef GL_ARB_texture_env_combine
143 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); 143 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
144 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.f ); 144 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.f );
145 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 145 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
146#else 146#else
147 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE); 147 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE);
148 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.f ); 148 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.f );
149 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 149 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
150#endif 150#endif
151 151
152 glDisable(GL_BLEND); 152 glDisable(GL_BLEND);
153 glDisable(GL_ALPHA_TEST); 153 glDisable(GL_ALPHA_TEST);
154 } 154 }
155 155
156 //! Returns if the material is transparent. 156 //! Returns if the material is transparent.
157 /** Is not always transparent, but mostly. */ 157 /** Is not always transparent, but mostly. */
158 virtual bool isTransparent() const 158 virtual bool isTransparent() const
159 { 159 {
160 return true; 160 return true;
161 } 161 }
162}; 162};
163 163
164 164
165//! Solid 2 layer material renderer 165//! Solid 2 layer material renderer
166class COpenGLMaterialRenderer_SOLID_2_LAYER : public COpenGLMaterialRenderer 166class COpenGLMaterialRenderer_SOLID_2_LAYER : public COpenGLMaterialRenderer
167{ 167{
168public: 168public:
169 169
170 COpenGLMaterialRenderer_SOLID_2_LAYER(video::COpenGLDriver* d) 170 COpenGLMaterialRenderer_SOLID_2_LAYER(video::COpenGLDriver* d)
171 : COpenGLMaterialRenderer(d) {} 171 : COpenGLMaterialRenderer(d) {}
172 172
173 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 173 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
174 bool resetAllRenderstates, IMaterialRendererServices* services) 174 bool resetAllRenderstates, IMaterialRendererServices* services)
175 { 175 {
176 Driver->disableTextures(2); 176 Driver->disableTextures(2);
177 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 177 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
178 178
179 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 179 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
180 { 180 {
181 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 181 if (Driver->queryFeature(EVDF_MULTITEXTURE))
182 { 182 {
183 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 183 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
184#ifdef GL_ARB_texture_env_combine 184#ifdef GL_ARB_texture_env_combine
185 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 185 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
186 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 186 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
187 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); 187 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
188 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE); 188 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
189 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 189 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
190 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 190 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
191 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR); 191 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR);
192 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA); 192 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
193#else 193#else
194 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 194 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
195 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 195 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
196 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT); 196 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT);
197 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE); 197 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE);
198 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 198 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
199 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 199 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
200 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR); 200 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR);
201 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA); 201 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_ALPHA);
202#endif 202#endif
203 } 203 }
204 } 204 }
205 } 205 }
206 206
207 virtual void OnUnsetMaterial() 207 virtual void OnUnsetMaterial()
208 { 208 {
209 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 209 if (Driver->queryFeature(EVDF_MULTITEXTURE))
210 { 210 {
211 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 211 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
212 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 212 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
213#ifdef GL_ARB_texture_env_combine 213#ifdef GL_ARB_texture_env_combine
214 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR); 214 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR);
215#else 215#else
216 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR); 216 glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
217#endif 217#endif
218 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 218 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
219 } 219 }
220 } 220 }
221}; 221};
222 222
223 223
224//! Transparent add color material renderer 224//! Transparent add color material renderer
225class COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR : public COpenGLMaterialRenderer 225class COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR : public COpenGLMaterialRenderer
226{ 226{
227public: 227public:
228 228
229 COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR(video::COpenGLDriver* d) 229 COpenGLMaterialRenderer_TRANSPARENT_ADD_COLOR(video::COpenGLDriver* d)
230 : COpenGLMaterialRenderer(d) {} 230 : COpenGLMaterialRenderer(d) {}
231 231
232 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 232 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
233 bool resetAllRenderstates, IMaterialRendererServices* services) 233 bool resetAllRenderstates, IMaterialRendererServices* services)
234 { 234 {
235 Driver->disableTextures(1); 235 Driver->disableTextures(1);
236 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 236 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
237 237
238 if ((material.MaterialType != lastMaterial.MaterialType) || resetAllRenderstates) 238 if ((material.MaterialType != lastMaterial.MaterialType) || resetAllRenderstates)
239 { 239 {
240 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); 240 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
241 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 241 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
242 glEnable(GL_BLEND); 242 glEnable(GL_BLEND);
243 } 243 }
244 } 244 }
245 245
246 virtual void OnUnsetMaterial() 246 virtual void OnUnsetMaterial()
247 { 247 {
248 glDisable(GL_BLEND); 248 glDisable(GL_BLEND);
249 } 249 }
250 250
251 //! Returns if the material is transparent. 251 //! Returns if the material is transparent.
252 virtual bool isTransparent() const 252 virtual bool isTransparent() const
253 { 253 {
254 return true; 254 return true;
255 } 255 }
256}; 256};
257 257
258 258
259//! Transparent vertex alpha material renderer 259//! Transparent vertex alpha material renderer
260class COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COpenGLMaterialRenderer 260class COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COpenGLMaterialRenderer
261{ 261{
262public: 262public:
263 263
264 COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA(video::COpenGLDriver* d) 264 COpenGLMaterialRenderer_TRANSPARENT_VERTEX_ALPHA(video::COpenGLDriver* d)
265 : COpenGLMaterialRenderer(d) {} 265 : COpenGLMaterialRenderer(d) {}
266 266
267 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 267 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
268 bool resetAllRenderstates, IMaterialRendererServices* services) 268 bool resetAllRenderstates, IMaterialRendererServices* services)
269 { 269 {
270 Driver->disableTextures(1); 270 Driver->disableTextures(1);
271 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 271 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
272 272
273 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 273 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
274 { 274 {
275#ifdef GL_ARB_texture_env_combine 275#ifdef GL_ARB_texture_env_combine
276 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 276 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
277 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 277 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
278 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB); 278 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
279 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 279 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
280 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 280 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
281 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 281 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
282#else 282#else
283 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 283 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
284 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 284 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
285 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT ); 285 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PRIMARY_COLOR_EXT );
286 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 286 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
287 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 287 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
288 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 288 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
289#endif 289#endif
290 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 290 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
291 glEnable(GL_BLEND); 291 glEnable(GL_BLEND);
292 } 292 }
293 } 293 }
294 294
295 virtual void OnUnsetMaterial() 295 virtual void OnUnsetMaterial()
296 { 296 {
297 // default values 297 // default values
298 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 298 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
299#ifdef GL_ARB_texture_env_combine 299#ifdef GL_ARB_texture_env_combine
300 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE ); 300 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE );
301 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE ); 301 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE );
302#else 302#else
303 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE ); 303 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE );
304 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE ); 304 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE );
305#endif 305#endif
306 glDisable(GL_BLEND); 306 glDisable(GL_BLEND);
307 } 307 }
308 308
309 //! Returns if the material is transparent. 309 //! Returns if the material is transparent.
310 virtual bool isTransparent() const 310 virtual bool isTransparent() const
311 { 311 {
312 return true; 312 return true;
313 } 313 }
314}; 314};
315 315
316 316
317//! Transparent alpha channel material renderer 317//! Transparent alpha channel material renderer
318class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL : public COpenGLMaterialRenderer 318class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL : public COpenGLMaterialRenderer
319{ 319{
320public: 320public:
321 321
322 COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(video::COpenGLDriver* d) 322 COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(video::COpenGLDriver* d)
323 : COpenGLMaterialRenderer(d) {} 323 : COpenGLMaterialRenderer(d) {}
324 324
325 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 325 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
326 bool resetAllRenderstates, IMaterialRendererServices* services) 326 bool resetAllRenderstates, IMaterialRendererServices* services)
327 { 327 {
328 Driver->disableTextures(1); 328 Driver->disableTextures(1);
329 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 329 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
330 330
331 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates 331 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates
332 || material.MaterialTypeParam != lastMaterial.MaterialTypeParam ) 332 || material.MaterialTypeParam != lastMaterial.MaterialTypeParam )
333 { 333 {
334#ifdef GL_ARB_texture_env_combine 334#ifdef GL_ARB_texture_env_combine
335 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 335 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
336 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 336 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
337 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 337 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
338 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 338 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
339 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 339 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
340 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); 340 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
341#else 341#else
342 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 342 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
343 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 343 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
344 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 344 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
345 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 345 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
346 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 346 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
347 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE); 347 glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE);
348#endif 348#endif
349 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 349 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
350 glEnable(GL_BLEND); 350 glEnable(GL_BLEND);
351 glEnable(GL_ALPHA_TEST); 351 glEnable(GL_ALPHA_TEST);
352 352
353 glAlphaFunc(GL_GREATER, material.MaterialTypeParam); 353 glAlphaFunc(GL_GREATER, material.MaterialTypeParam);
354 } 354 }
355 } 355 }
356 356
357 virtual void OnUnsetMaterial() 357 virtual void OnUnsetMaterial()
358 { 358 {
359 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 359 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
360#ifdef GL_ARB_texture_env_combine 360#ifdef GL_ARB_texture_env_combine
361 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE ); 361 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE );
362#else 362#else
363 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE ); 363 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE );
364#endif 364#endif
365 glDisable(GL_ALPHA_TEST); 365 glDisable(GL_ALPHA_TEST);
366 glDisable(GL_BLEND); 366 glDisable(GL_BLEND);
367 } 367 }
368 368
369 //! Returns if the material is transparent. 369 //! Returns if the material is transparent.
370 virtual bool isTransparent() const 370 virtual bool isTransparent() const
371 { 371 {
372 return true; 372 return true;
373 } 373 }
374}; 374};
375 375
376 376
377//! Transparent alpha channel material renderer 377//! Transparent alpha channel material renderer
378class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF : public COpenGLMaterialRenderer 378class COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF : public COpenGLMaterialRenderer
379{ 379{
380public: 380public:
381 381
382 COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(video::COpenGLDriver* d) 382 COpenGLMaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(video::COpenGLDriver* d)
383 : COpenGLMaterialRenderer(d) {} 383 : COpenGLMaterialRenderer(d) {}
384 384
385 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 385 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
386 bool resetAllRenderstates, IMaterialRendererServices* services) 386 bool resetAllRenderstates, IMaterialRendererServices* services)
387 { 387 {
388 Driver->disableTextures(1); 388 Driver->disableTextures(1);
389 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 389 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
390 390
391 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 391 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
392 { 392 {
393 glEnable(GL_ALPHA_TEST); 393 glEnable(GL_ALPHA_TEST);
394 glAlphaFunc(GL_GREATER, 0.5f); 394 glAlphaFunc(GL_GREATER, 0.5f);
395 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 395 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
396 } 396 }
397 } 397 }
398 398
399 virtual void OnUnsetMaterial() 399 virtual void OnUnsetMaterial()
400 { 400 {
401 glDisable(GL_ALPHA_TEST); 401 glDisable(GL_ALPHA_TEST);
402 } 402 }
403 403
404 //! Returns if the material is transparent. 404 //! Returns if the material is transparent.
405 virtual bool isTransparent() const 405 virtual bool isTransparent() const
406 { 406 {
407 return false; // this material is not really transparent because it does no blending. 407 return false; // this material is not really transparent because it does no blending.
408 } 408 }
409}; 409};
410 410
411 411
412//! material renderer for all kinds of lightmaps 412//! material renderer for all kinds of lightmaps
413class COpenGLMaterialRenderer_LIGHTMAP : public COpenGLMaterialRenderer 413class COpenGLMaterialRenderer_LIGHTMAP : public COpenGLMaterialRenderer
414{ 414{
415public: 415public:
416 416
417 COpenGLMaterialRenderer_LIGHTMAP(video::COpenGLDriver* d) 417 COpenGLMaterialRenderer_LIGHTMAP(video::COpenGLDriver* d)
418 : COpenGLMaterialRenderer(d) {} 418 : COpenGLMaterialRenderer(d) {}
419 419
420 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 420 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
421 bool resetAllRenderstates, IMaterialRendererServices* services) 421 bool resetAllRenderstates, IMaterialRendererServices* services)
422 { 422 {
423 Driver->disableTextures(2); 423 Driver->disableTextures(2);
424 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 424 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
425 425
426 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 426 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
427 { 427 {
428 // diffuse map 428 // diffuse map
429 429
430 switch (material.MaterialType) 430 switch (material.MaterialType)
431 { 431 {
432 case EMT_LIGHTMAP_LIGHTING: 432 case EMT_LIGHTMAP_LIGHTING:
433 case EMT_LIGHTMAP_LIGHTING_M2: 433 case EMT_LIGHTMAP_LIGHTING_M2:
434 case EMT_LIGHTMAP_LIGHTING_M4: 434 case EMT_LIGHTMAP_LIGHTING_M4:
435 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 435 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
436 break; 436 break;
437 case EMT_LIGHTMAP_ADD: 437 case EMT_LIGHTMAP_ADD:
438 case EMT_LIGHTMAP: 438 case EMT_LIGHTMAP:
439 case EMT_LIGHTMAP_M2: 439 case EMT_LIGHTMAP_M2:
440 case EMT_LIGHTMAP_M4: 440 case EMT_LIGHTMAP_M4:
441 default: 441 default:
442 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 442 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
443 break; 443 break;
444 } 444 }
445 445
446 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 446 if (Driver->queryFeature(EVDF_MULTITEXTURE))
447 { 447 {
448 // lightmap 448 // lightmap
449 449
450 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 450 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
451#ifdef GL_ARB_texture_env_combine 451#ifdef GL_ARB_texture_env_combine
452 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 452 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
453 453
454 if (material.MaterialType == EMT_LIGHTMAP_ADD) 454 if (material.MaterialType == EMT_LIGHTMAP_ADD)
455 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD); 455 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
456 else 456 else
457 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 457 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
458 458
459 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 459 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
460 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 460 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
461 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE); 461 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
462 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); 462 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
463 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB); 463 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB);
464#else 464#else
465 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 465 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
466 466
467 if (material.MaterialType == EMT_LIGHTMAP_ADD) 467 if (material.MaterialType == EMT_LIGHTMAP_ADD)
468 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD); 468 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD);
469 else 469 else
470 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 470 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
471 471
472 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 472 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
473 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 473 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
474 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE); 474 glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE);
475 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE); 475 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_TEXTURE);
476 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PREVIOUS_EXT); 476 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, GL_PREVIOUS_EXT);
477#endif 477#endif
478 478
479 switch (material.MaterialType) 479 switch (material.MaterialType)
480 { 480 {
481 case EMT_LIGHTMAP_M4: 481 case EMT_LIGHTMAP_M4:
482 case EMT_LIGHTMAP_LIGHTING_M4: 482 case EMT_LIGHTMAP_LIGHTING_M4:
483#ifdef GL_ARB_texture_env_combine 483#ifdef GL_ARB_texture_env_combine
484 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 4.0f); 484 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 4.0f);
485#else 485#else
486 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 4.0f); 486 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 4.0f);
487#endif 487#endif
488 break; 488 break;
489 case EMT_LIGHTMAP_M2: 489 case EMT_LIGHTMAP_M2:
490 case EMT_LIGHTMAP_LIGHTING_M2: 490 case EMT_LIGHTMAP_LIGHTING_M2:
491#ifdef GL_ARB_texture_env_combine 491#ifdef GL_ARB_texture_env_combine
492 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0f); 492 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0f);
493#else 493#else
494 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 2.0f); 494 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 2.0f);
495#endif 495#endif
496 break; 496 break;
497 default: 497 default:
498#ifdef GL_ARB_texture_env_combine 498#ifdef GL_ARB_texture_env_combine
499 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0f); 499 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0f);
500#else 500#else
501 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.0f); 501 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.0f);
502#endif 502#endif
503 } 503 }
504 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 504 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
505 } 505 }
506 } 506 }
507 } 507 }
508 508
509 virtual void OnUnsetMaterial() 509 virtual void OnUnsetMaterial()
510 { 510 {
511 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 511 if (Driver->queryFeature(EVDF_MULTITEXTURE))
512 { 512 {
513 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 513 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
514#ifdef GL_ARB_texture_env_combine 514#ifdef GL_ARB_texture_env_combine
515 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.f ); 515 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.f );
516#else 516#else
517 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.f ); 517 glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, 1.f );
518#endif 518#endif
519 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 519 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
520 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 520 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
521 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 521 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
522 } 522 }
523 } 523 }
524}; 524};
525 525
526 526
527 527
528//! detail map material renderer 528//! detail map material renderer
529class COpenGLMaterialRenderer_DETAIL_MAP : public COpenGLMaterialRenderer 529class COpenGLMaterialRenderer_DETAIL_MAP : public COpenGLMaterialRenderer
530{ 530{
531public: 531public:
532 532
533 COpenGLMaterialRenderer_DETAIL_MAP(video::COpenGLDriver* d) 533 COpenGLMaterialRenderer_DETAIL_MAP(video::COpenGLDriver* d)
534 : COpenGLMaterialRenderer(d) {} 534 : COpenGLMaterialRenderer(d) {}
535 535
536 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 536 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
537 bool resetAllRenderstates, IMaterialRendererServices* services) 537 bool resetAllRenderstates, IMaterialRendererServices* services)
538 { 538 {
539 Driver->disableTextures(2); 539 Driver->disableTextures(2);
540 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 540 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
541 541
542 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 542 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
543 { 543 {
544 // diffuse map is default modulated 544 // diffuse map is default modulated
545 545
546 // detail map on second layer 546 // detail map on second layer
547 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 547 if (Driver->queryFeature(EVDF_MULTITEXTURE))
548 { 548 {
549 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 549 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
550#ifdef GL_ARB_texture_env_combine 550#ifdef GL_ARB_texture_env_combine
551 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 551 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
552 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); 552 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB);
553 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 553 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
554 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 554 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
555#else 555#else
556 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 556 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
557 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD_SIGNED_EXT); 557 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_ADD_SIGNED_EXT);
558 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 558 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
559 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 559 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
560#endif 560#endif
561 } 561 }
562 } 562 }
563 } 563 }
564 564
565 virtual void OnUnsetMaterial() 565 virtual void OnUnsetMaterial()
566 { 566 {
567 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 567 if (Driver->queryFeature(EVDF_MULTITEXTURE))
568 { 568 {
569 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 569 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
570 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 570 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
571 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 571 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
572 } 572 }
573 } 573 }
574}; 574};
575 575
576 576
577//! sphere map material renderer 577//! sphere map material renderer
578class COpenGLMaterialRenderer_SPHERE_MAP : public COpenGLMaterialRenderer 578class COpenGLMaterialRenderer_SPHERE_MAP : public COpenGLMaterialRenderer
579{ 579{
580public: 580public:
581 581
582 COpenGLMaterialRenderer_SPHERE_MAP(video::COpenGLDriver* d) 582 COpenGLMaterialRenderer_SPHERE_MAP(video::COpenGLDriver* d)
583 : COpenGLMaterialRenderer(d) {} 583 : COpenGLMaterialRenderer(d) {}
584 584
585 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 585 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
586 bool resetAllRenderstates, IMaterialRendererServices* services) 586 bool resetAllRenderstates, IMaterialRendererServices* services)
587 { 587 {
588 Driver->disableTextures(1); 588 Driver->disableTextures(1);
589 // texture needs to be flipped for OpenGL 589 // texture needs to be flipped for OpenGL
590 core::matrix4 tmp = Driver->getTransform(ETS_TEXTURE_0); 590 core::matrix4 tmp = Driver->getTransform(ETS_TEXTURE_0);
591 tmp[5]*=-1; 591 tmp[5]*=-1;
592 Driver->setTransform(ETS_TEXTURE_0, tmp); 592 Driver->setTransform(ETS_TEXTURE_0, tmp);
593 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 593 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
594 594
595 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 595 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
596 { 596 {
597 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 597 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
598 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 598 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
599 599
600 glEnable(GL_TEXTURE_GEN_S); 600 glEnable(GL_TEXTURE_GEN_S);
601 glEnable(GL_TEXTURE_GEN_T); 601 glEnable(GL_TEXTURE_GEN_T);
602 } 602 }
603 } 603 }
604 604
605 virtual void OnUnsetMaterial() 605 virtual void OnUnsetMaterial()
606 { 606 {
607 glDisable(GL_TEXTURE_GEN_S); 607 glDisable(GL_TEXTURE_GEN_S);
608 glDisable(GL_TEXTURE_GEN_T); 608 glDisable(GL_TEXTURE_GEN_T);
609 } 609 }
610}; 610};
611 611
612 612
613//! reflection 2 layer material renderer 613//! reflection 2 layer material renderer
614class COpenGLMaterialRenderer_REFLECTION_2_LAYER : public COpenGLMaterialRenderer 614class COpenGLMaterialRenderer_REFLECTION_2_LAYER : public COpenGLMaterialRenderer
615{ 615{
616public: 616public:
617 617
618 COpenGLMaterialRenderer_REFLECTION_2_LAYER(video::COpenGLDriver* d) 618 COpenGLMaterialRenderer_REFLECTION_2_LAYER(video::COpenGLDriver* d)
619 : COpenGLMaterialRenderer(d) {} 619 : COpenGLMaterialRenderer(d) {}
620 620
621 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 621 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
622 bool resetAllRenderstates, IMaterialRendererServices* services) 622 bool resetAllRenderstates, IMaterialRendererServices* services)
623 { 623 {
624 Driver->disableTextures(2); 624 Driver->disableTextures(2);
625 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 625 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
626 626
627 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 627 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
628 { 628 {
629 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 629 if (Driver->queryFeature(EVDF_MULTITEXTURE))
630 { 630 {
631 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 631 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
632#ifdef GL_ARB_texture_env_combine 632#ifdef GL_ARB_texture_env_combine
633 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 633 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
634 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 634 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
635 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 635 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
636 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 636 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
637#else 637#else
638 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 638 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
639 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 639 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
640 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 640 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
641 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 641 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
642#endif 642#endif
643 } 643 }
644 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 644 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
645 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 645 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
646 glEnable(GL_TEXTURE_GEN_S); 646 glEnable(GL_TEXTURE_GEN_S);
647 glEnable(GL_TEXTURE_GEN_T); 647 glEnable(GL_TEXTURE_GEN_T);
648 } 648 }
649 } 649 }
650 650
651 virtual void OnUnsetMaterial() 651 virtual void OnUnsetMaterial()
652 { 652 {
653 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 653 if (Driver->queryFeature(EVDF_MULTITEXTURE))
654 { 654 {
655 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 655 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
656 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 656 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
657 } 657 }
658 glDisable(GL_TEXTURE_GEN_S); 658 glDisable(GL_TEXTURE_GEN_S);
659 glDisable(GL_TEXTURE_GEN_T); 659 glDisable(GL_TEXTURE_GEN_T);
660 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 660 if (Driver->queryFeature(EVDF_MULTITEXTURE))
661 { 661 {
662 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 662 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
663 } 663 }
664 } 664 }
665}; 665};
666 666
667 667
668//! reflection 2 layer material renderer 668//! reflection 2 layer material renderer
669class COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER : public COpenGLMaterialRenderer 669class COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER : public COpenGLMaterialRenderer
670{ 670{
671public: 671public:
672 672
673 COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(video::COpenGLDriver* d) 673 COpenGLMaterialRenderer_TRANSPARENT_REFLECTION_2_LAYER(video::COpenGLDriver* d)
674 : COpenGLMaterialRenderer(d) {} 674 : COpenGLMaterialRenderer(d) {}
675 675
676 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, 676 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
677 bool resetAllRenderstates, IMaterialRendererServices* services) 677 bool resetAllRenderstates, IMaterialRendererServices* services)
678 { 678 {
679 Driver->disableTextures(2); 679 Driver->disableTextures(2);
680 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); 680 Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
681 681
682 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) 682 if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
683 { 683 {
684#ifdef GL_ARB_texture_env_combine 684#ifdef GL_ARB_texture_env_combine
685 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 685 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
686 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 686 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
687 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 687 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
688 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 688 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
689 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 689 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
690 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); 690 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
691#else 691#else
692 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 692 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
693 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 693 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
694 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 694 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
695 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 695 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
696 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 696 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
697 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB); 697 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB);
698#endif 698#endif
699 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 699 if (Driver->queryFeature(EVDF_MULTITEXTURE))
700 { 700 {
701 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 701 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
702#ifdef GL_ARB_texture_env_combine 702#ifdef GL_ARB_texture_env_combine
703 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 703 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
704 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 704 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
705 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 705 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
706 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB); 706 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
707 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 707 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
708 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); 708 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
709#else 709#else
710 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); 710 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
711 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE); 711 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE);
712 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE); 712 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE);
713 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT); 713 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
714 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE); 714 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_REPLACE);
715 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB); 715 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, GL_PREVIOUS_ARB);
716#endif 716#endif
717 } 717 }
718 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 718 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
719 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 719 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
720 glEnable(GL_TEXTURE_GEN_S); 720 glEnable(GL_TEXTURE_GEN_S);
721 glEnable(GL_TEXTURE_GEN_T); 721 glEnable(GL_TEXTURE_GEN_T);
722 722
723 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 723 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
724 glEnable(GL_BLEND); 724 glEnable(GL_BLEND);
725 } 725 }
726 } 726 }
727 727
728 virtual void OnUnsetMaterial() 728 virtual void OnUnsetMaterial()
729 { 729 {
730 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 730 if (Driver->queryFeature(EVDF_MULTITEXTURE))
731 { 731 {
732 Driver->extGlActiveTexture(GL_TEXTURE1_ARB); 732 Driver->extGlActiveTexture(GL_TEXTURE1_ARB);
733 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 733 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
734 } 734 }
735 glDisable(GL_TEXTURE_GEN_S); 735 glDisable(GL_TEXTURE_GEN_S);
736 glDisable(GL_TEXTURE_GEN_T); 736 glDisable(GL_TEXTURE_GEN_T);
737 if (Driver->queryFeature(EVDF_MULTITEXTURE)) 737 if (Driver->queryFeature(EVDF_MULTITEXTURE))
738 { 738 {
739 Driver->extGlActiveTexture(GL_TEXTURE0_ARB); 739 Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
740 } 740 }
741 glDisable(GL_BLEND); 741 glDisable(GL_BLEND);
742 } 742 }
743 743
744 //! Returns if the material is transparent. 744 //! Returns if the material is transparent.
745 virtual bool isTransparent() const 745 virtual bool isTransparent() const
746 { 746 {
747 return true; 747 return true;
748 } 748 }
749}; 749};
750 750
751} // end namespace video 751} // end namespace video
752} // end namespace irr 752} // end namespace irr
753 753
754#endif 754#endif
755#endif 755#endif
756 756