GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
ShaderExpr.hh
Go to the documentation of this file.
1
2#include "VectorTools.hh"
3#include "Effect.hh"
4
5
7{
8 int face;
9 int point;
10};
12{
13};
14
16{
17public:
18 void SetVertex(ChooseVertex v) { vertex = v; }
19 void SetFragment(ChooseFragment f) { fragment = f; }
20 ChooseVertex GetVertex() const { return vertex; }
21 ChooseFragment GetFragment() const { return fragment; }
22
23 int GetFace() const { return vertex.face; }
24 int GetPoint() const { return vertex.point; }
25
26
27 std::string uniquename() const
28 {
29 std::stringstream ss;
30 ss << "v" << unique;
31 unique++;
32 return ss.str();
33 }
34private:
35 ChooseVertex vertex;
36 ChooseFragment fragment;
37
38 static int unique;
39};
40
41//
42// Shader expressions
43//
44class FloatShader : public ShaderExpr
45{
46public:
47 virtual std::string Context() const=0;
48 virtual float Value() const=0;
49 virtual std::string Expr(std::string varname) const=0;
50 virtual void CollectIds(std::vector<int> &vec) const=0;
51};
52
53class ColorShader : public ShaderExpr
54{
55public:
56 virtual std::string Context() const=0;
57 virtual Color Value() const=0;
58 virtual std::string Expr(std::string varname) const=0;
59 virtual void CollectIds(std::vector<int> &vec) const=0;
60};
61
63{
64public:
65 virtual std::string Context() const=0;
66 virtual Vector2d Value() const=0;
67 virtual std::string Expr(std::string varname) const=0;
68 virtual void CollectIds(std::vector<int> &vec) const=0;
69};
70
72{
73public:
74 virtual std::string Context() const=0;
75 virtual Point2d Value() const=0;
76 virtual std::string Expr(std::string varname) const=0;
77 virtual void CollectIds(std::vector<int> &vec) const=0;
78};
79
81{
82public:
83 virtual std::string Context() const=0;
84 virtual Vector Value() const=0;
85 virtual std::string Expr(std::string varname) const=0;
86 virtual void CollectIds(std::vector<int> &vec) const=0;
87};
88
90{
91public:
92 virtual std::string Context() const=0;
93 virtual Point Value() const=0;
94 virtual std::string Expr(std::string varname) const=0;
95 virtual void CollectIds(std::vector<int> &vec) const=0;
96};
97
99{
100public:
101 FloatAttribute(FaceCollection *coll, int id, std::string name) : coll(coll),id(id), name(name) { }
102 std::string Context() const { return "attribute float "+name+";\n"; }
103 float Value() const { return coll->Attrib(GetFace(), GetPoint(), id); }
104 std::string Expr(std::string varname) const
105 {
106 return varname + "=" + name + ";\n";
107 }
108 virtual void CollectIds(std::vector<int> &vec) const
109 {
110 vec.push_back(id);
111 }
112private:
113 FaceCollection *coll;
114 int id;
115 std::string name;
116};
118{
119public:
120 PointAttribute(FaceCollection *coll, int id_x, int id_y, int id_z, std::string name) : x(coll,id_x,name+"x"), y(coll,id_y, name+"y"), z(coll, id_z, name+"z"), name(name) { }
121 std::string Context() const { return x.Context()+y.Context()+z.Context(); }
122 Point Value() const { return Point(x.Value(),y.Value(),z.Value()); }
123 std::string Expr(std::string varname) const
124 {
125 std::string s1 = varname + ".x = " + name + "x;\n";
126 std::string s2 = varname + ".y = " + name + "y;\n";
127 std::string s3 = varname + ".z = " + name + "z;\n";
128 return s1+s2+s3;
129 }
130
131 virtual void CollectIds(std::vector<int> &vec) const
132 {
133 x.CollectIds(vec);
134 y.CollectIds(vec);
135 z.CollectIds(vec);
136 }
137private:
138 FloatAttribute x,y,z;
139 std::string name;
140};
141
142#if 0
143class Vertex : public Point3Shader
144{
145public:
146 Vertex(FaceCollection *coll) : coll(coll) { }
147 std::string Context() const { return ""; }
148 Point Value() const
149 {
150 return coll->FacePoint(GetFace(), GetPoint());
151 }
152 std::string Expr(std::string varname) const
153 {
154 return varname + "= gl_Vertex.xyz;";
155 }
156 virtual void CollectIds(std::vector<int> &vec) const { }
157private:
158 FaceCollection *coll;
159};
160
161#endif
162
164{
165public:
166 UniformFloat(std::string name, float &val) : name(name), val(val) { }
167 std::string Context() const
168 {
169 return "uniform float " + name + ";\n";
170 }
171 float Value() const
172 {
173 return val;
174 }
175 std::string Expr(std::string varname) const
176 {
177 return varname + "=" + name + ";\n";
178 }
179 virtual void CollectIds(std::vector<int> &vec) const { }
180private:
181 std::string name;
182 float &val;
183};
184
185class MixPoint : public Point3Shader
186{
187public:
188 MixPoint(Point3Shader &p1, Point3Shader &p2, std::string uniform_name, float &uniform_value) : p1(p1), p2(p2), uni(uniform_name, uniform_value), uniform_name(uniform_name) { }
189
190 std::string Context() const
191 {
192 return p1.Context() + p2.Context() + uni.Context();
193 }
194 Point Value() const
195 {
196 p1.SetVertex(GetVertex());
197 p1.SetFragment(GetFragment());
198 Point pp1 = p1.Value();
199 p2.SetVertex(GetVertex());
200 p2.SetFragment(GetFragment());
201 Point pp2 = p2.Value();
202 return Vector(pp1)*(1.0-uni.Value()) + Vector(pp2)*uni.Value();
203 }
204 std::string Expr(std::string varname) const
205 {
206 std::string n1 = uniquename();
207 std::string n2 = uniquename();
208 std::string e1 = p1.Expr(n1);
209 std::string e2 = p2.Expr(n2);
210 return "vec3 " + n1 + ";\nvec3 " + n2 + ";\n" + e1 + e2 + varname + "= mix(" + n1 + "," + n2 + "," + uniform_name + ");\n";
211 }
212 virtual void CollectIds(std::vector<int> &vec) const
213 {
214 p1.CollectIds(vec);
215 p2.CollectIds(vec);
216 }
217
218private:
219 Point3Shader &p1, &p2;
220 UniformFloat uni;
221 std::string uniform_name;
222};
223
void testshader()
Definition ShaderExpr.hh:54
virtual void CollectIds(std::vector< int > &vec) const =0
virtual Color Value() const =0
virtual std::string Expr(std::string varname) const =0
virtual std::string Context() const =0
Definition VectorTools.hh:380
Definition EffectI.hh:212
virtual Point FacePoint(int face, int point) const =0
Definition ShaderExpr.hh:99
std::string Context() const
Definition ShaderExpr.hh:102
std::string Expr(std::string varname) const
Definition ShaderExpr.hh:104
float Value() const
Definition ShaderExpr.hh:103
virtual void CollectIds(std::vector< int > &vec) const
Definition ShaderExpr.hh:108
FloatAttribute(FaceCollection *coll, int id, std::string name)
Definition ShaderExpr.hh:101
Definition ShaderExpr.hh:45
virtual std::string Expr(std::string varname) const =0
virtual float Value() const =0
virtual std::string Context() const =0
virtual void CollectIds(std::vector< int > &vec) const =0
std::string Expr(std::string varname) const
Definition ShaderExpr.hh:204
std::string Context() const
Definition ShaderExpr.hh:190
Point Value() const
Definition ShaderExpr.hh:194
virtual void CollectIds(std::vector< int > &vec) const
Definition ShaderExpr.hh:212
MixPoint(Point3Shader &p1, Point3Shader &p2, std::string uniform_name, float &uniform_value)
Definition ShaderExpr.hh:188
Definition ShaderExpr.hh:72
virtual Point2d Value() const =0
virtual std::string Expr(std::string varname) const =0
virtual std::string Context() const =0
virtual void CollectIds(std::vector< int > &vec) const =0
Definition ShaderExpr.hh:90
virtual std::string Expr(std::string varname) const =0
virtual std::string Context() const =0
virtual Point Value() const =0
virtual void CollectIds(std::vector< int > &vec) const =0
Point Value() const
Definition ShaderExpr.hh:122
std::string Context() const
Definition ShaderExpr.hh:121
PointAttribute(FaceCollection *coll, int id_x, int id_y, int id_z, std::string name)
Definition ShaderExpr.hh:120
virtual void CollectIds(std::vector< int > &vec) const
Definition ShaderExpr.hh:131
std::string Expr(std::string varname) const
Definition ShaderExpr.hh:123
Definition ShaderExpr.hh:16
ChooseVertex GetVertex() const
Definition ShaderExpr.hh:20
int GetPoint() const
Definition ShaderExpr.hh:24
int GetFace() const
Definition ShaderExpr.hh:23
std::string uniquename() const
Definition ShaderExpr.hh:27
void SetFragment(ChooseFragment f)
Definition ShaderExpr.hh:19
void SetVertex(ChooseVertex v)
Definition ShaderExpr.hh:18
ChooseFragment GetFragment() const
Definition ShaderExpr.hh:21
Definition ShaderExpr.hh:164
std::string Context() const
Definition ShaderExpr.hh:167
virtual void CollectIds(std::vector< int > &vec) const
Definition ShaderExpr.hh:179
UniformFloat(std::string name, float &val)
Definition ShaderExpr.hh:166
float Value() const
Definition ShaderExpr.hh:171
std::string Expr(std::string varname) const
Definition ShaderExpr.hh:175
Definition ShaderExpr.hh:63
virtual Vector2d Value() const =0
virtual std::string Expr(std::string varname) const =0
virtual void CollectIds(std::vector< int > &vec) const =0
virtual std::string Context() const =0
Definition ShaderExpr.hh:81
virtual std::string Context() const =0
virtual std::string Expr(std::string varname) const =0
virtual Vector Value() const =0
virtual void CollectIds(std::vector< int > &vec) const =0
Definition VectorTools.hh:125
iVBORw0KGgoAAAANSUhEUgAAANcAAAB5CAMAAACdtUQZAAAA51BMVEX</div ></div >< div style="padding: 0px 0px; width: 1324px;">< div style="height: 400px; width: 1324px;"></div >< div itemscope itemtype="https: </div><div itemscope itemtype="https:</div >< div itemscope itemtype="https: </div></div><p><div style="padding:0px 0px;width:1324px;"><div></div><div itemscope itemtype="https:< ul >< li >< b > Application name
8AkrcAgqgAs9wqQ0ey2tkAo8gAuuQfeI4hPUH09fXHy8z4+fng4uNKXF/Lz9BzfoAcgpkQMTUAKjAbOT4Qr9AXhJ8Rl7ktMCwTosA...
Definition meshpage.php:1610
double f(const std::string &, double, bool) noexcept
Definition profile_cpp_calls_2.cpp:4
Definition ShaderExpr.hh:12
Definition ShaderExpr.hh:7
int point
Definition ShaderExpr.hh:9
int face
Definition ShaderExpr.hh:8
Definition VectorTools.hh:910
Definition Parser.cc:60
Definition VectorTools.hh:972
Definition GraphI.hh:2847