aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h')
-rw-r--r--src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h b/src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h
new file mode 100644
index 0000000..8213f78
--- /dev/null
+++ b/src/others/irrlicht-1.8.1/source/Irrlicht/CCgMaterialRenderer.h
@@ -0,0 +1,176 @@
1// Copyright (C) 2012 Patryk Nadrowski
2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h
4
5#ifndef __C_CG_MATERIAL_RENDERER_H_INCLUDED__
6#define __C_CG_MATERIAL_RENDERER_H_INCLUDED__
7
8#include "IrrCompileConfig.h"
9#ifdef _IRR_COMPILE_WITH_CG_
10
11#include "IMaterialRenderer.h"
12#include "IMaterialRendererServices.h"
13#include "IShaderConstantSetCallBack.h"
14#include "IGPUProgrammingServices.h"
15#include "irrArray.h"
16#include "irrString.h"
17#include "IVideoDriver.h"
18#include "os.h"
19#include "Cg/cg.h"
20
21#ifdef _MSC_VER
22 #pragma comment(lib, "cg.lib")
23#endif
24
25namespace irr
26{
27namespace video
28{
29
30class CCgUniform
31{
32public:
33 CCgUniform(const CGparameter& parameter, bool global);
34
35 const core::stringc& getName() const;
36 const CGparameter& getParameter() const;
37 CGenum getSpace() const;
38 CGtype getType() const;
39
40 virtual void update(const void* data, const SMaterial& material) const = 0;
41
42protected:
43 core::stringc Name;
44 CGparameter Parameter;
45 CGenum Space;
46 CGtype Type;
47};
48
49class CCgUniform1f : public CCgUniform
50{
51public:
52 CCgUniform1f(const CGparameter& parameter, bool global);
53
54 void update(const void* data, const SMaterial& material) const;
55};
56
57class CCgUniform2f : public CCgUniform
58{
59public:
60 CCgUniform2f(const CGparameter& parameter, bool global);
61
62 void update(const void* data, const SMaterial& material) const;
63};
64
65class CCgUniform3f : public CCgUniform
66{
67public:
68 CCgUniform3f(const CGparameter& parameter, bool global);
69
70 void update(const void* data, const SMaterial& material) const;
71};
72
73class CCgUniform4f : public CCgUniform
74{
75public:
76 CCgUniform4f(const CGparameter& parameter, bool global);
77
78 void update(const void* data, const SMaterial& material) const;
79};
80
81class CCgUniform1i : public CCgUniform
82{
83public:
84 CCgUniform1i(const CGparameter& parameter, bool global);
85
86 void update(const void* data, const SMaterial& material) const;
87};
88
89class CCgUniform2i : public CCgUniform
90{
91public:
92 CCgUniform2i(const CGparameter& parameter, bool global);
93
94 void update(const void* data, const SMaterial& material) const;
95};
96
97class CCgUniform3i : public CCgUniform
98{
99public:
100 CCgUniform3i(const CGparameter& parameter, bool global);
101
102 void update(const void* data, const SMaterial& material) const;
103};
104
105class CCgUniform4i : public CCgUniform
106{
107public:
108 CCgUniform4i(const CGparameter& parameter, bool global);
109
110 void update(const void* data, const SMaterial& material) const;
111};
112
113class CCgUniform4x4f : public CCgUniform
114{
115public:
116 CCgUniform4x4f(const CGparameter& parameter, bool global);
117
118 void update(const void* data, const SMaterial& material) const;
119};
120
121class CCgUniformSampler2D : public CCgUniform
122{
123public:
124 CCgUniformSampler2D(const CGparameter& parameter, bool global);
125
126 void update(const void* data, const SMaterial& material) const;
127};
128
129class CCgMaterialRenderer : public IMaterialRenderer, public IMaterialRendererServices
130{
131public:
132 CCgMaterialRenderer(IShaderConstantSetCallBack* callback = 0, IMaterialRenderer* baseMaterial = 0, s32 userData = 0);
133 virtual ~CCgMaterialRenderer();
134
135 virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates, IMaterialRendererServices* services) = 0;
136 virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) = 0;
137 virtual void OnUnsetMaterial() = 0;
138
139 virtual bool isTransparent() const;
140
141 virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) = 0;
142 virtual bool setVertexShaderConstant(const c8* name, const f32* floats, int count);
143 virtual bool setVertexShaderConstant(const c8* name, const bool* bools, int count);
144 virtual bool setVertexShaderConstant(const c8* name, const s32* ints, int count);
145 virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);
146 virtual bool setPixelShaderConstant(const c8* name, const f32* floats, int count);
147 virtual bool setPixelShaderConstant(const c8* name, const bool* bools, int count);
148 virtual bool setPixelShaderConstant(const c8* name, const s32* ints, int count);
149 virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);
150 virtual IVideoDriver* getVideoDriver() = 0;
151
152protected:
153 void getUniformList();
154
155 IShaderConstantSetCallBack* CallBack;
156 IMaterialRenderer* BaseMaterial;
157 s32 UserData;
158
159 core::array<CCgUniform*> UniformInfo;
160
161 CGprogram VertexProgram;
162 CGprogram FragmentProgram;
163 CGprogram GeometryProgram;
164 CGprofile VertexProfile;
165 CGprofile FragmentProfile;
166 CGprofile GeometryProfile;
167
168 SMaterial Material;
169 CGerror Error;
170};
171
172}
173}
174
175#endif
176#endif