ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/material.C
(Generate patch)

Comparing libgender/material.C (file contents):
Revision 1.11 by root, Thu Oct 21 22:28:42 2004 UTC vs.
Revision 1.12 by root, Fri Oct 22 00:16:08 2004 UTC

14 if (refcnt) 14 if (refcnt)
15 abort (); 15 abort ();
16#endif 16#endif
17 } 17 }
18 18
19 const char str_float [] = "float"; 19 const char str_float [] = "float";
20 const char str_vec2 [] = "vec2";
21 const char str_vec3 [] = "vec3";
22 const char str_vec4 [] = "vec4";
20 const char str_float2 [] = "float2"; 23 const char str_mat2 [] = "mat2";
21 const char str_float3 [] = "float3"; 24 const char str_mat3 [] = "mat3";
22 const char str_float4 [] = "float4"; 25 const char str_mat4 [] = "mat4";
23 const char str_float4x4 [] = "float4x4";
24 26
25 const char str_sampler1d [] = "sampler1d"; 27 const char str_sampler_1d [] = "sampler1D";
28 const char str_sampler_1d_shadow [] = "sampler1DShadow";
26 const char str_sampler2d [] = "sampler2d"; 29 const char str_sampler_2d [] = "sampler2D";
30 const char str_sampler_2d_shadow [] = "sampler2DShadow";
31 const char str_sampler_2d_rect [] = "sampler2DRect";
32 const char str_sampler_2d_rect_shadow [] = "sampler2DRectShadow";
27 const char str_sampler3d [] = "sampler3d"; 33 const char str_sampler_3d [] = "sampler3D";
34 const char str_sampler_3d_rect [] = "sampler3DRect";
28 const char str_samplerCUBE [] = "samplerCUBE"; 35 const char str_sampler_cube [] = "samplerCube";
29 const char str_samplerRECT [] = "samplerRECT";
30 36
31 static CGcontext cg_context = cgCreateContext (); 37 static CGcontext cg_context = cgCreateContext ();
32 38
33 int var_i::next_name = 0; 39 int var_i::next_name = 0;
34 40
54 b << "uniform " << typestr << ' ' << "V" << name; 60 b << "uniform " << typestr << ' ' << "V" << name;
55 } 61 }
56 62
57 void stream_i::build_decl (ostringstream &b) 63 void stream_i::build_decl (ostringstream &b)
58 { 64 {
59 b << typestr << ' ' << "V" << name; 65 b << typestr << ' ' << binding;
60 b << " : " << binding;
61 } 66 }
62 67
63 void var_i::build (shader_builder &b) 68 void var_i::build (shader_builder &b)
64 { 69 {
65 b << "V" << name; 70 b << "V" << name;
73 b.refs.push_back (*this); 78 b.refs.push_back (*this);
74 } 79 }
75 80
76 void stream_i::build (shader_builder &b) 81 void stream_i::build (shader_builder &b)
77 { 82 {
78 var_i::build (b); 83 b << binding;
79 84
80 if (find (b.streams.begin (), b.streams.end (), var (*this)) == b.streams.end ()) 85 if (find (b.streams.begin (), b.streams.end (), var (*this)) == b.streams.end ())
81 b.streams.push_back (*this); 86 b.streams.push_back (*this);
82 } 87 }
83 88
95 } 100 }
96 101
97 struct vin vin; 102 struct vin vin;
98 103
99 // MUST update is-function below 104 // MUST update is-function below
100 varying_3f vin::position_3f ("POSITION"); 105 varying_3f vin::position_3f ("gl_Vertex");
101 varying_4f vin::position_4f ("POSITION"); 106 varying_4f vin::position_4f ("gl_Vertex");
102 varying_3f vin::normal_3f ("NORMAL"); 107 varying_3f vin::normal_3f ("gl_Normal");
103 varying_4f vin::normal_4f ("NORMAL");
104 varying_3f vin::color0_3f ("COLOR0"); 108 varying_3f vin::color_3f ("gl_Color");
105 varying_4f vin::color0_4f ("COLOR0"); 109 varying_4f vin::color_4f ("gl_Color");
106 varying_3f vin::color1_3f ("COLOR1"); 110 varying_3f vin::color2_3f ("gl_SecondaryColor");
107 varying_4f vin::color1_4f ("COLOR1"); 111 varying_4f vin::color2_4f ("gl_SecondaryColor");
108 varying_1f vin::texcoord_1f[8] = 112 varying_1f vin::texcoord_1f[8] =
109 { 113 {
110 varying_1f ("TEXCOORD0"), varying_1f ("TEXCOORD1"), varying_1f ("TEXCOORD2"), varying_1f ("TEXCOORD3"), 114 varying_1f ("gl_TexCoord[0]"), varying_1f ("gl_TexCoord[1]"), varying_1f ("gl_TexCoord[2]"), varying_1f ("gl_TexCoord[3]"),
111 varying_1f ("TEXCOORD4"), varying_1f ("TEXCOORD5"), varying_1f ("TEXCOORD6"), varying_1f ("TEXCOORD7"), 115 varying_1f ("gl_TexCoord[4]"), varying_1f ("gl_TexCoord[5]"), varying_1f ("gl_TexCoord[6]"), varying_1f ("gl_TexCoord[7]"),
112 }; 116 };
113 varying_2f vin::texcoord_2f[8] = 117 varying_2f vin::texcoord_2f[8] =
114 { 118 {
115 varying_2f ("TEXCOORD0"), varying_2f ("TEXCOORD1"), varying_2f ("TEXCOORD2"), varying_2f ("TEXCOORD3"), 119 varying_2f ("gl_TexCoord[0]"), varying_2f ("gl_TexCoord[1]"), varying_2f ("gl_TexCoord[2]"), varying_2f ("gl_TexCoord[3]"),
116 varying_2f ("TEXCOORD4"), varying_2f ("TEXCOORD5"), varying_2f ("TEXCOORD6"), varying_2f ("TEXCOORD7"), 120 varying_2f ("gl_TexCoord[4]"), varying_2f ("gl_TexCoord[5]"), varying_2f ("gl_TexCoord[6]"), varying_2f ("gl_TexCoord[7]"),
117 }; 121 };
118 varying_3f vin::texcoord_3f[8] = 122 varying_3f vin::texcoord_3f[8] =
119 { 123 {
120 varying_3f ("TEXCOORD0"), varying_3f ("TEXCOORD1"), varying_3f ("TEXCOORD2"), varying_3f ("TEXCOORD3"), 124 varying_3f ("gl_TexCoord[0]"), varying_3f ("gl_TexCoord[1]"), varying_3f ("gl_TexCoord[2]"), varying_3f ("gl_TexCoord[3]"),
121 varying_3f ("TEXCOORD4"), varying_3f ("TEXCOORD5"), varying_3f ("TEXCOORD6"), varying_3f ("TEXCOORD7"), 125 varying_3f ("gl_TexCoord[4]"), varying_3f ("gl_TexCoord[5]"), varying_3f ("gl_TexCoord[6]"), varying_3f ("gl_TexCoord[7]"),
122 }; 126 };
123 varying_4f vin::texcoord_4f[8] = 127 varying_4f vin::texcoord_4f[8] =
124 { 128 {
125 varying_4f ("TEXCOORD0"), varying_4f ("TEXCOORD1"), varying_4f ("TEXCOORD2"), varying_4f ("TEXCOORD3"), 129 varying_4f ("gl_TexCoord[0]"), varying_4f ("gl_TexCoord[1]"), varying_4f ("gl_TexCoord[2]"), varying_4f ("gl_TexCoord[3]"),
126 varying_4f ("TEXCOORD4"), varying_4f ("TEXCOORD5"), varying_4f ("TEXCOORD6"), varying_4f ("TEXCOORD7"), 130 varying_4f ("gl_TexCoord[4]"), varying_4f ("gl_TexCoord[5]"), varying_4f ("gl_TexCoord[6]"), varying_4f ("gl_TexCoord[7]"),
127 }; 131 };
128 varying_1f vin::psize_1f ("PSIZE"); 132 varying_1f vin::psize_1f ("PSIZE");
129 varying_1f vin::attr6_1f ("ATTR6");
130 varying_1f vin::attr7_1f ("ATTR7");
131 varying_2f vin::attr6_2f ("ATTR6");
132 varying_2f vin::attr7_2f ("ATTR7");
133 varying_3f vin::attr6_3f ("ATTR6");
134 varying_3f vin::attr7_3f ("ATTR7");
135 varying_4f vin::attr6_4f ("ATTR6");
136 varying_4f vin::attr7_4f ("ATTR7");
137 133
138 bool vin::is (const var &r) 134 bool vin::is (const var &r)
139 { 135 {
140 return r == vin::position_3f 136 return r == vin::position_3f
141 || r == vin::position_4f 137 || r == vin::position_4f
142 || r == vin::normal_3f 138 || r == vin::normal_3f
143 || r == vin::normal_4f
144 || r == vin::color0_3f 139 || r == vin::color_3f
145 || r == vin::color0_4f 140 || r == vin::color_4f
146 || r == vin::color1_3f 141 || r == vin::color2_3f
147 || r == vin::color1_4f 142 || r == vin::color2_4f
148 || r == vin::texcoord_1f[0] || r == vin::texcoord_1f[1] || r == vin::texcoord_1f[2] || r == vin::texcoord_1f[3] 143 || r == vin::texcoord_1f[0] || r == vin::texcoord_1f[1] || r == vin::texcoord_1f[2] || r == vin::texcoord_1f[3]
149 || r == vin::texcoord_1f[4] || r == vin::texcoord_1f[5] || r == vin::texcoord_1f[6] || r == vin::texcoord_1f[7] 144 || r == vin::texcoord_1f[4] || r == vin::texcoord_1f[5] || r == vin::texcoord_1f[6] || r == vin::texcoord_1f[7]
150 || r == vin::texcoord_2f[0] || r == vin::texcoord_2f[1] || r == vin::texcoord_2f[2] || r == vin::texcoord_2f[3] 145 || r == vin::texcoord_2f[0] || r == vin::texcoord_2f[1] || r == vin::texcoord_2f[2] || r == vin::texcoord_2f[3]
151 || r == vin::texcoord_2f[4] || r == vin::texcoord_2f[5] || r == vin::texcoord_2f[6] || r == vin::texcoord_2f[7] 146 || r == vin::texcoord_2f[4] || r == vin::texcoord_2f[5] || r == vin::texcoord_2f[6] || r == vin::texcoord_2f[7]
152 || r == vin::texcoord_3f[0] || r == vin::texcoord_3f[1] || r == vin::texcoord_3f[2] || r == vin::texcoord_3f[3] 147 || r == vin::texcoord_3f[0] || r == vin::texcoord_3f[1] || r == vin::texcoord_3f[2] || r == vin::texcoord_3f[3]
153 || r == vin::texcoord_3f[4] || r == vin::texcoord_3f[5] || r == vin::texcoord_3f[6] || r == vin::texcoord_3f[7] 148 || r == vin::texcoord_3f[4] || r == vin::texcoord_3f[5] || r == vin::texcoord_3f[6] || r == vin::texcoord_3f[7]
154 || r == vin::texcoord_4f[0] || r == vin::texcoord_4f[1] || r == vin::texcoord_4f[2] || r == vin::texcoord_4f[3] 149 || r == vin::texcoord_4f[0] || r == vin::texcoord_4f[1] || r == vin::texcoord_4f[2] || r == vin::texcoord_4f[3]
155 || r == vin::texcoord_4f[4] || r == vin::texcoord_4f[5] || r == vin::texcoord_4f[6] || r == vin::texcoord_4f[7] 150 || r == vin::texcoord_4f[4] || r == vin::texcoord_4f[5] || r == vin::texcoord_4f[6] || r == vin::texcoord_4f[7];
156 || r == vin::psize_1f
157 || r == vin::attr6_1f
158 || r == vin::attr7_1f
159 || r == vin::attr6_2f
160 || r == vin::attr7_2f
161 || r == vin::attr6_3f
162 || r == vin::attr7_3f
163 || r == vin::attr6_4f
164 || r == vin::attr7_4f;
165 } 151 }
166 152
167 struct fin fin; 153 struct fin fin;
168 struct fin &vout = fin; 154 struct fin &vout = fin;
169 155
170 // MUST update is-function below 156 // MUST update is-function below
171 varying_4f fin::position_4f ("HPOS"); 157 varying_4f fin::position_4f ("gl_Position");
172 varying_4f fin::color0_4f ("COLOR0"); 158 varying_4f fin::color_4f ("gl_Color");
173 varying_4f fin::color1_4f ("COLOR1"); 159 varying_4f fin::color2_4f ("gl_SecondaryColor");
174 varying_4f fin::texcoord_4f[8] = 160 varying_4f fin::texcoord_4f[8] =
175 { 161 {
176 varying_4f ("TEXCOORD0"), varying_4f ("TEXCOORD1"), varying_4f ("TEXCOORD2"), varying_4f ("TEXCOORD3"), 162 varying_4f ("gl_TexCoord[0]"), varying_4f ("gl_TexCoord[1]"), varying_4f ("gl_TexCoord[2]"), varying_4f ("gl_TexCoord[3]"),
177 varying_4f ("TEXCOORD4"), varying_4f ("TEXCOORD5"), varying_4f ("TEXCOORD6"), varying_4f ("TEXCOORD7"), 163 varying_4f ("gl_TexCoord[4]"), varying_4f ("gl_TexCoord[5]"), varying_4f ("gl_TexCoord[6]"), varying_4f ("gl_TexCoord[7]"),
178 }; 164 };
179 165
180 bool fin::is (const var &r) 166 bool fin::is (const var &r)
181 { 167 {
182 return r == fin::position_4f 168 return r == fin::position_4f
183 || r == fin::color0_4f 169 || r == fin::color_4f
184 || r == fin::color1_4f 170 || r == fin::color2_4f
185 || r == fin::texcoord_4f[0] 171 || r == fin::texcoord_4f[0]
186 || r == fin::texcoord_4f[1] 172 || r == fin::texcoord_4f[1]
187 || r == fin::texcoord_4f[2] 173 || r == fin::texcoord_4f[2]
188 || r == fin::texcoord_4f[3] 174 || r == fin::texcoord_4f[3]
189 || r == fin::texcoord_4f[4] 175 || r == fin::texcoord_4f[4]
193 } 179 }
194 180
195 struct fout fout; 181 struct fout fout;
196 182
197 // MUST update is-function below 183 // MUST update is-function below
198 varying_4f fout::color0_4f ("COLOR0"); 184 varying_4f fout::color_4f ("gl_FragColor");
199 varying_3f fout::color0_3f ("COLOR0");
200 varying_4f fout::color1_4f ("COLOR1");
201 varying_3f fout::color1_3f ("COLOR1");
202 varying_1f fout::depth_1f ("DEPTH"); 185 varying_1f fout::depth_1f ("gl_FragDepth");
203 186
204 bool fout::is (const var &r) 187 bool fout::is (const var &r)
205 { 188 {
206 return r == fout::color0_4f 189 return r == fout::color_4f
207 || r == fout::color0_3f
208 || r == fout::color1_4f
209 || r == fout::color1_3f
210 || r == fout::depth_1f; 190 || r == fout::depth_1f;
211 } 191 }
212 192
213 uniform_matrix_f mvp, mv, proj; 193 uniform_matrix_4f mvp, mv, proj;
214 194
215 void fragment_vector_i::build (shader_builder &b) 195 void fragment_vector_i::build (shader_builder &b)
216 { 196 {
217 for (vector<fragment>::iterator i = begin (); i != end (); i++) 197 for (vector<fragment>::iterator i = begin (); i != end (); i++)
218 (*i)->build (b); 198 (*i)->build (b);
222 { 202 {
223 shader_builder b; 203 shader_builder b;
224 build (b); 204 build (b);
225 ostringstream os; 205 ostringstream os;
226 206
227 os << "void main (\n"; 207 for (vector<uniform>::iterator i = b.refs.begin (); i != b.refs.end (); i++)
208 {
209 (*i)->build_decl (os);
210 os << ";\n";
211 }
212
213#if 0
214 // not neccessary right now, as GLSL is rich on predefinitions
228 for (vector<var>::iterator i = b.streams.begin (); i != b.streams.end (); i++) 215 for (vector<var>::iterator i = b.streams.begin (); i != b.streams.end (); i++)
229 { 216 {
217 if (vout.is (*i) || fout.is (*i))
230 os << " "; 218 os << "varying ";
231 219 else if (vin.is (*i))
232 if (is_vertex) 220 os << "attribute ";
233 {
234 if (vin.is (*i)) os << "in ";
235 if (vout.is (*i)) os << "out ";
236 }
237 else
238 {
239 if (fin.is (*i)) os << "in ";
240 if (fout.is (*i)) os << "out ";
241 }
242 221
243 (*i)->build_decl (os); 222 (*i)->build_decl (os);
244 os << ",\n"; 223 os << ";\n";
245 } 224 }
225#endif
246 226
247 for (vector<uniform>::iterator i = b.refs.begin (); i != b.refs.end (); i++) 227 os << "\nvoid main ()\n{\n";
248 {
249 os << " ";
250 (*i)->build_decl (os);
251 os << ",\n";
252 }
253
254 os << " uniform float unused_cg_broken_syntax\n";
255 os << ")\n{\n";
256 228
257 for (vector<var>::iterator i = b.temps.begin (); i != b.temps.end (); i++) 229 for (vector<var>::iterator i = b.temps.begin (); i != b.temps.end (); i++)
258 { 230 {
259 (*i)->build_decl (os); 231 (*i)->build_decl (os);
260 os << ";\n"; 232 os << ";\n";
270 242
271void debdebdebdebug ()//D 243void debdebdebdebug ()//D
272{ 244{
273 vertex_program p; 245 vertex_program p;
274 temp_4f t1, t2; 246 temp_4f t1, t2;
275 sampler2d s2d (1); 247 sampler_2d s2d (1);
276 248
277 p << t2 << " = tex2D (" << s2d << ", " << vin.position_4f << ".xy);\n"; 249 p << t2 << " = tex2D (" << s2d << ", " << vin.position_4f << ".xy);\n";
278 p << t1 << " = mul (" << vin.position_4f << "," << mvp << ");\n"; 250 p << t1 << " = mul (" << vin.position_4f << "," << mvp << ");\n";
279 p << vout.position_4f << " = " << t1 << ";\n"; 251 p << vout.position_4f << " = " << t1 << ";\n";
280 252
281 p.print (); 253 p.print ();
282 //exit (0); 254 exit (0);
283} 255}
284 256
285} 257}
286 258
287material::~material () 259material::~material ()

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines