1
// Copyright (C) 2002-2011 Nikolaus Gebhardt / Thomas Alten
2
// This file is part of the "Irrlicht Engine".
3
// For conditions of distribution and use, see copyright notice in irrlicht.h
5
#ifndef __I_BURNING_SHADER_H_INCLUDED__
6
#define __I_BURNING_SHADER_H_INCLUDED__
8
#include "SoftwareDriver2_compile_config.h"
9
#include "IReferenceCounted.h"
12
#include "S2DVertex.h"
14
#include "CDepthBuffer.h"
15
#include "S4DVertex.h"
18
#include "SMaterial.h"
28
struct SBurningShaderLight
35
f32 linearAttenuation;
36
f32 constantAttenuation;
37
f32 quadraticAttenuation;
43
sVec4 pos_objectspace;
53
VERTEXTRANSFORM = 0x20,
56
struct SBurningShaderLightSpace
61
Global_AmbientLight.set ( 0.f, 0.f, 0.f );
64
core::array<SBurningShaderLight> Light;
65
sVec3 Global_AmbientLight;
73
struct SBurningShaderMaterial
91
ETR_TEXTURE_FLAT_WIRE,
93
ETR_TEXTURE_GOURAUD_WIRE,
94
ETR_TEXTURE_GOURAUD_NOZ,
95
ETR_TEXTURE_GOURAUD_ADD,
96
ETR_TEXTURE_GOURAUD_ADD_NO_Z,
98
ETR_TEXTURE_GOURAUD_VERTEX_ALPHA,
100
ETR_TEXTURE_GOURAUD_LIGHTMAP_M1,
101
ETR_TEXTURE_GOURAUD_LIGHTMAP_M2,
102
ETR_TEXTURE_GOURAUD_LIGHTMAP_M4,
103
ETR_TEXTURE_LIGHTMAP_M4,
105
ETR_TEXTURE_GOURAUD_DETAIL_MAP,
106
ETR_TEXTURE_GOURAUD_LIGHTMAP_ADD,
109
ETR_GOURAUD_ALPHA_NOZ,
111
ETR_TEXTURE_GOURAUD_ALPHA,
112
ETR_TEXTURE_GOURAUD_ALPHA_NOZ,
114
ETR_NORMAL_MAP_SOLID,
125
class CBurningVideoDriver;
126
class IBurningShader : public virtual IReferenceCounted
129
IBurningShader(CBurningVideoDriver* driver);
132
virtual ~IBurningShader();
134
//! sets a render target
135
virtual void setRenderTarget(video::IImage* surface, const core::rect<s32>& viewPort);
138
virtual void setTextureParam( u32 stage, video::CSoftwareTexture2* texture, s32 lodLevel);
139
virtual void drawTriangle ( const s4DVertex *a,const s4DVertex *b,const s4DVertex *c ) = 0;
140
virtual void drawLine ( const s4DVertex *a,const s4DVertex *b) {};
142
virtual void setParam ( u32 index, f32 value) {};
143
virtual void setZCompareFunc ( u32 func) {};
145
virtual void setMaterial ( const SBurningShaderMaterial &material ) {};
149
CBurningVideoDriver *Driver;
151
video::CImage* RenderTarget;
152
CDepthBuffer* DepthBuffer;
153
CStencilBuffer * Stencil;
154
tVideoSample ColorMask;
156
sInternalTexture IT[ BURNING_MATERIAL_MAX_TEXTURES ];
158
static const tFixPointu dithermask[ 4 * 4];
162
IBurningShader* createTriangleRendererTextureGouraud2(CBurningVideoDriver* driver);
163
IBurningShader* createTriangleRendererTextureLightMap2_M1(CBurningVideoDriver* driver);
164
IBurningShader* createTriangleRendererTextureLightMap2_M2(CBurningVideoDriver* driver);
165
IBurningShader* createTriangleRendererTextureLightMap2_M4(CBurningVideoDriver* driver);
166
IBurningShader* createTriangleRendererGTextureLightMap2_M4(CBurningVideoDriver* driver);
167
IBurningShader* createTriangleRendererTextureLightMap2_Add(CBurningVideoDriver* driver);
168
IBurningShader* createTriangleRendererTextureDetailMap2(CBurningVideoDriver* driver);
169
IBurningShader* createTriangleRendererTextureVertexAlpha2(CBurningVideoDriver* driver);
172
IBurningShader* createTriangleRendererTextureGouraudWire2(CBurningVideoDriver* driver);
173
IBurningShader* createTriangleRendererGouraud2(CBurningVideoDriver* driver);
174
IBurningShader* createTriangleRendererGouraudAlpha2(CBurningVideoDriver* driver);
175
IBurningShader* createTRGouraudAlphaNoZ2(CBurningVideoDriver* driver);
176
IBurningShader* createTriangleRendererGouraudWire2(CBurningVideoDriver* driver);
177
IBurningShader* createTriangleRendererTextureFlat2(CBurningVideoDriver* driver);
178
IBurningShader* createTriangleRendererTextureFlatWire2(CBurningVideoDriver* driver);
179
IBurningShader* createTRFlat2(CBurningVideoDriver* driver);
180
IBurningShader* createTRFlatWire2(CBurningVideoDriver* driver);
181
IBurningShader* createTRTextureGouraudNoZ2(CBurningVideoDriver* driver);
182
IBurningShader* createTRTextureGouraudAdd2(CBurningVideoDriver* driver);
183
IBurningShader* createTRTextureGouraudAddNoZ2(CBurningVideoDriver* driver);
185
IBurningShader* createTRTextureGouraudAlpha(CBurningVideoDriver* driver);
186
IBurningShader* createTRTextureGouraudAlphaNoZ(CBurningVideoDriver* driver);
187
IBurningShader* createTRTextureBlend(CBurningVideoDriver* driver);
188
IBurningShader* createTRTextureInverseAlphaBlend(CBurningVideoDriver* driver);
190
IBurningShader* createTRNormalMap(CBurningVideoDriver* driver);
191
IBurningShader* createTRStencilShadow(CBurningVideoDriver* driver);
193
IBurningShader* createTriangleRendererReference(CBurningVideoDriver* driver);
197
} // end namespace video
198
} // end namespace irr