ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/shader.C
Revision: 1.5
Committed: Sat Oct 23 23:01:18 2004 UTC (19 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.4: +141 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #include "shader.h"
2     #include "shader_vars.h"
3    
4     namespace shader {
5    
6     refcounted::~refcounted ()
7     {
8     #if 0
9     if (refcnt)
10     abort ();
11     #endif
12     }
13    
14     const char str_float [] = "float";
15     const char str_vec2 [] = "vec2";
16     const char str_vec3 [] = "vec3";
17     const char str_vec4 [] = "vec4";
18     const char str_mat2 [] = "mat2";
19     const char str_mat3 [] = "mat3";
20     const char str_mat4 [] = "mat4";
21    
22     const char str_sampler_1d [] = "sampler1D";
23     const char str_sampler_1d_shadow [] = "sampler1DShadow";
24     const char str_sampler_2d [] = "sampler2D";
25     const char str_sampler_2d_shadow [] = "sampler2DShadow";
26     const char str_sampler_2d_rect [] = "sampler2DRect";
27     const char str_sampler_2d_rect_shadow [] = "sampler2DRectShadow";
28     const char str_sampler_3d [] = "sampler3D";
29     const char str_sampler_3d_rect [] = "sampler3DRect";
30     const char str_sampler_cube [] = "samplerCube";
31    
32     unsigned int var_i::next_id = 0;
33    
34     var_i::var_i (const char *typestr)
35     : typestr (typestr)
36     {
37     //param = cgCreateParameter (cg_context, cgtype);
38     }
39    
40     var_i::~var_i ()
41     {
42     //cgDestroyParameter (param);
43     }
44    
45 root 1.4 stream_i::stream_i (const char *strtype)
46     : var_i (strtype)
47     {
48     sprintf (name, "V%lx_%d", ((long)this >> 4) & 0xfff, ++next_id);
49     }
50    
51 root 1.1 temporary_i::temporary_i (const char *strtype)
52     : var_i (strtype)
53     {
54     sprintf (name, "T%lx_%d", ((long)this >> 4) & 0xfff, ++next_id);
55     }
56    
57     uniform_i::uniform_i (const char *strtype)
58     : var_i (strtype), dirty (true)
59     {
60     sprintf (name, "U%lx_%d", ((long)this >> 4) & 0xfff, ++next_id);
61     }
62    
63     fragment_string_i::~fragment_string_i ()
64     {
65     free (str);
66     }
67    
68     ////////////////////////////////////////////////////////////////////////////
69    
70     void var_i::build_decl (ostringstream &b)
71     {
72     b << typestr << ' ' << name;
73     }
74    
75     void uniform_i::build_decl (ostringstream &b)
76     {
77     b << "uniform " << typestr << ' ' << name;
78     }
79    
80     void stream_i::build_decl (ostringstream &b)
81     {
82     b << typestr << ' ' << name;
83     }
84    
85     ////////////////////////////////////////////////////////////////////////////
86    
87     void glvar_i::build (shader_builder &b)
88     {
89     b << name;
90     }
91    
92     void var_i::build (shader_builder &b)
93     {
94     b << name;
95     }
96    
97     void uniform_i::build (shader_builder &b)
98     {
99     var_i::build (b);
100    
101     if (find (b.refs.begin (), b.refs.end (), uniform (*this)) == b.refs.end ())
102     b.refs.push_back (*this);
103     }
104    
105     void stream_i::build (shader_builder &b)
106     {
107     var_i::build (b);
108    
109     if (find (b.streams.begin (), b.streams.end (), var (*this)) == b.streams.end ())
110     b.streams.push_back (*this);
111     }
112    
113     void temporary_i::build (shader_builder &b)
114     {
115     var_i::build (b);
116    
117     if (find (b.temps.begin (), b.temps.end (), var (*this)) == b.temps.end ())
118     b.temps.push_back (*this);
119     }
120    
121     void fragment_vector_i::build (shader_builder &b)
122     {
123     for (vector<fragment>::iterator i = begin (); i != end (); i++)
124     (*i)->build (b);
125     }
126    
127     void fragment_const_string_i::build (shader_builder &b)
128     {
129     b << str;
130     }
131    
132     void fragment_string_i::build (shader_builder &b)
133     {
134     b << str;
135     }
136    
137     #if 0
138     void statement_i::build (shader_builder &b)
139     {
140     b << " ";
141     fragment_vector_i::build (b);
142     b << ";\n";
143     }
144     #endif
145    
146     ////////////////////////////////////////////////////////////////////////////
147    
148     shader_object_i *cur = 0;
149    
150     shader_object_i::shader_object_i (GLenum type)
151     : type (type)
152     {
153     id = glCreateShaderObjectARB (type);
154     }
155    
156     shader_object_i::~shader_object_i ()
157     {
158     glDeleteObjectARB (id);
159     }
160    
161     void shader_object_i::start ()
162     {
163     clear ();
164     cur = this;
165     }
166    
167     void shader_object_i::stop ()
168     {
169     cur = 0;
170     }
171    
172     string shader_object_i::source ()
173     {
174     shader_builder b;
175     build (b);
176     ostringstream os;
177    
178     for (vector<uniform>::iterator i = b.refs.begin (); i != b.refs.end (); i++)
179     {
180     (*i)->build_decl (os);
181     os << ";\n";
182     }
183    
184     // not neccessary right now, as GLSL is rich on predefinitions
185     for (vector<var>::iterator i = b.streams.begin (); i != b.streams.end (); i++)
186     {
187     os << "attribute ";
188     (*i)->build_decl (os);
189     os << ";\n";
190     }
191    
192     os << "\nvoid main (void)\n{\n";
193    
194     for (vector<var>::iterator i = b.temps.begin (); i != b.temps.end (); i++)
195     {
196     os << " ";
197     (*i)->build_decl (os);
198     os << ";\n";
199     }
200    
201     os << "\n";
202     os << b.source.str ();
203     os << "}\n";
204    
205     return os.str ();
206     }
207    
208     void shader_object_i::compile ()
209     {
210     string src = source ();
211     const char *sptr = src.data ();
212     const int slen = src.size ();
213    
214     printf ("SOURCE<%s>\n", src.c_str ());
215     abort ();
216     glShaderSourceARB (id, 1, &sptr, &slen);
217     glCompileShaderARB (id);
218    
219     GLint compiled;
220     glGetObjectParameterivARB (id, GL_OBJECT_COMPILE_STATUS_ARB, &compiled);
221    
222     if (!compiled)
223     {
224     char infolog[8192];
225     glGetInfoLogARB (id, 8192, NULL, infolog);
226     printf ("SOURCE<%s>\n", src.c_str ());
227     printf ("INFOLOG<%s>\n", infolog);
228     abort ();
229     }
230     }
231    
232 root 1.5 const fragment_const_string str_2sp (" ");
233     const fragment_const_string str_equal (" = ");
234     const fragment_const_string str_endl (";\n");
235    
236 root 1.1 const sl_append_const_string str_plus (" + ");
237     const sl_append_const_string str_minus (" - ");
238     const sl_append_const_string str_mul (" * ");
239     const sl_append_const_string str_div (" / ");
240    
241 root 1.5 const sl_append_const_string str_lpar ("(");
242 root 1.1 const sl_append_const_string str_rpar (")");
243    
244 root 1.5 void swizzle_mask (sl_string<7> &s, int mask)
245     {
246     static const char channel[4] = { 'x', 'y', 'z', 'w' };
247    
248     char *str = s.str;
249    
250     *str++ = ')';
251     *str++ = '.';
252    
253     while (mask)
254     {
255     int c = mask % 5;
256     mask /= 5;
257    
258     if (c)
259     *str++ = channel[c - 1];
260     }
261    
262     *str++ = 0;
263     }
264    
265     template<typename T>
266     inline const sl_expr< sl_concat3< sl_append_const_string,
267     typename sl_convert<T>::T,
268     sl_string<7>
269     > >
270     swizzle (const T &t, int a, int b, int c, int d)
271     {
272     sl_string<7> s;
273     swizzle_mask (s, ((d * 5 + c) * 5 + b) * 5 + a);
274     return concat (str_lpar, sl_convert<T>::convert (t), s);
275     }
276    
277     # define SHADER_SWIZZLE_OP(abcd,type) \
278     template<typename T> \
279     inline const sl_expr< sl_concat3< sl_append_const_string, \
280     typename sl_convert<T>::T, \
281     sl_string<7> \
282     > > \
283     type (const T &t) \
284     { \
285     return swizzle (t, (abcd / 1000) % 5, (abcd / 100) % 5, (abcd / 10) % 5, (abcd / 1) % 5); \
286     }
287    
288     // brute force is lovely, ain't it?
289     SHADER_SWIZZLE_OP (1 , x ) SHADER_SWIZZLE_OP (11 , xx ) SHADER_SWIZZLE_OP (111 , xxx ) SHADER_SWIZZLE_OP (1111, xxxx)
290     SHADER_SWIZZLE_OP (1112, xxxy) SHADER_SWIZZLE_OP (1113, xxxz) SHADER_SWIZZLE_OP (1114, xxxw) SHADER_SWIZZLE_OP (112 , xxy )
291     SHADER_SWIZZLE_OP (1121, xxyx) SHADER_SWIZZLE_OP (1122, xxyy) SHADER_SWIZZLE_OP (1123, xxyz) SHADER_SWIZZLE_OP (1124, xxyw)
292     SHADER_SWIZZLE_OP (113 , xxz ) SHADER_SWIZZLE_OP (1131, xxzx) SHADER_SWIZZLE_OP (1132, xxzy) SHADER_SWIZZLE_OP (1133, xxzz)
293     SHADER_SWIZZLE_OP (1134, xxzw) SHADER_SWIZZLE_OP (114 , xxw ) SHADER_SWIZZLE_OP (1141, xxwx) SHADER_SWIZZLE_OP (1142, xxwy)
294     SHADER_SWIZZLE_OP (1143, xxwz) SHADER_SWIZZLE_OP (1144, xxww) SHADER_SWIZZLE_OP (12 , xy ) SHADER_SWIZZLE_OP (121 , xyx )
295     SHADER_SWIZZLE_OP (1211, xyxx) SHADER_SWIZZLE_OP (1212, xyxy) SHADER_SWIZZLE_OP (1213, xyxz) SHADER_SWIZZLE_OP (1214, xyxw)
296     SHADER_SWIZZLE_OP (122 , xyy ) SHADER_SWIZZLE_OP (1221, xyyx) SHADER_SWIZZLE_OP (1222, xyyy) SHADER_SWIZZLE_OP (1223, xyyz)
297     SHADER_SWIZZLE_OP (1224, xyyw) SHADER_SWIZZLE_OP (123 , xyz ) SHADER_SWIZZLE_OP (1231, xyzx) SHADER_SWIZZLE_OP (1232, xyzy)
298     SHADER_SWIZZLE_OP (1233, xyzz) SHADER_SWIZZLE_OP (1234, xyzw) SHADER_SWIZZLE_OP (124 , xyw ) SHADER_SWIZZLE_OP (1241, xywx)
299     SHADER_SWIZZLE_OP (1242, xywy) SHADER_SWIZZLE_OP (1243, xywz) SHADER_SWIZZLE_OP (1244, xyww) SHADER_SWIZZLE_OP (13 , xz )
300     SHADER_SWIZZLE_OP (131 , xzx ) SHADER_SWIZZLE_OP (1311, xzxx) SHADER_SWIZZLE_OP (1312, xzxy) SHADER_SWIZZLE_OP (1313, xzxz)
301     SHADER_SWIZZLE_OP (1314, xzxw) SHADER_SWIZZLE_OP (132 , xzy ) SHADER_SWIZZLE_OP (1321, xzyx) SHADER_SWIZZLE_OP (1322, xzyy)
302     SHADER_SWIZZLE_OP (1323, xzyz) SHADER_SWIZZLE_OP (1324, xzyw) SHADER_SWIZZLE_OP (133 , xzz ) SHADER_SWIZZLE_OP (1331, xzzx)
303     SHADER_SWIZZLE_OP (1332, xzzy) SHADER_SWIZZLE_OP (1333, xzzz) SHADER_SWIZZLE_OP (1334, xzzw) SHADER_SWIZZLE_OP (134 , xzw )
304     SHADER_SWIZZLE_OP (1341, xzwx) SHADER_SWIZZLE_OP (1342, xzwy) SHADER_SWIZZLE_OP (1343, xzwz) SHADER_SWIZZLE_OP (1344, xzww)
305     SHADER_SWIZZLE_OP (14 , xw ) SHADER_SWIZZLE_OP (141 , xwx ) SHADER_SWIZZLE_OP (1411, xwxx) SHADER_SWIZZLE_OP (1412, xwxy)
306     SHADER_SWIZZLE_OP (1413, xwxz) SHADER_SWIZZLE_OP (1414, xwxw) SHADER_SWIZZLE_OP (142 , xwy ) SHADER_SWIZZLE_OP (1421, xwyx)
307     SHADER_SWIZZLE_OP (1422, xwyy) SHADER_SWIZZLE_OP (1423, xwyz) SHADER_SWIZZLE_OP (1424, xwyw) SHADER_SWIZZLE_OP (143 , xwz )
308     SHADER_SWIZZLE_OP (1431, xwzx) SHADER_SWIZZLE_OP (1432, xwzy) SHADER_SWIZZLE_OP (1433, xwzz) SHADER_SWIZZLE_OP (1434, xwzw)
309     SHADER_SWIZZLE_OP (144 , xww ) SHADER_SWIZZLE_OP (1441, xwwx) SHADER_SWIZZLE_OP (1442, xwwy) SHADER_SWIZZLE_OP (1443, xwwz)
310     SHADER_SWIZZLE_OP (1444, xwww) SHADER_SWIZZLE_OP (2 , y ) SHADER_SWIZZLE_OP (21 , yx ) SHADER_SWIZZLE_OP (211 , yxx )
311     SHADER_SWIZZLE_OP (2111, yxxx) SHADER_SWIZZLE_OP (2112, yxxy) SHADER_SWIZZLE_OP (2113, yxxz) SHADER_SWIZZLE_OP (2114, yxxw)
312     SHADER_SWIZZLE_OP (212 , yxy ) SHADER_SWIZZLE_OP (2121, yxyx) SHADER_SWIZZLE_OP (2122, yxyy) SHADER_SWIZZLE_OP (2123, yxyz)
313     SHADER_SWIZZLE_OP (2124, yxyw) SHADER_SWIZZLE_OP (213 , yxz ) SHADER_SWIZZLE_OP (2131, yxzx) SHADER_SWIZZLE_OP (2132, yxzy)
314     SHADER_SWIZZLE_OP (2133, yxzz) SHADER_SWIZZLE_OP (2134, yxzw) SHADER_SWIZZLE_OP (214 , yxw ) SHADER_SWIZZLE_OP (2141, yxwx)
315     SHADER_SWIZZLE_OP (2142, yxwy) SHADER_SWIZZLE_OP (2143, yxwz) SHADER_SWIZZLE_OP (2144, yxww) SHADER_SWIZZLE_OP (22 , yy )
316     SHADER_SWIZZLE_OP (221 , yyx ) SHADER_SWIZZLE_OP (2211, yyxx) SHADER_SWIZZLE_OP (2212, yyxy) SHADER_SWIZZLE_OP (2213, yyxz)
317     SHADER_SWIZZLE_OP (2214, yyxw) SHADER_SWIZZLE_OP (222 , yyy ) SHADER_SWIZZLE_OP (2221, yyyx) SHADER_SWIZZLE_OP (2222, yyyy)
318     SHADER_SWIZZLE_OP (2223, yyyz) SHADER_SWIZZLE_OP (2224, yyyw) SHADER_SWIZZLE_OP (223 , yyz ) SHADER_SWIZZLE_OP (2231, yyzx)
319     SHADER_SWIZZLE_OP (2232, yyzy) SHADER_SWIZZLE_OP (2233, yyzz) SHADER_SWIZZLE_OP (2234, yyzw) SHADER_SWIZZLE_OP (224 , yyw )
320     SHADER_SWIZZLE_OP (2241, yywx) SHADER_SWIZZLE_OP (2242, yywy) SHADER_SWIZZLE_OP (2243, yywz) SHADER_SWIZZLE_OP (2244, yyww)
321     SHADER_SWIZZLE_OP (23 , yz ) SHADER_SWIZZLE_OP (231 , yzx ) SHADER_SWIZZLE_OP (2311, yzxx) SHADER_SWIZZLE_OP (2312, yzxy)
322     SHADER_SWIZZLE_OP (2313, yzxz) SHADER_SWIZZLE_OP (2314, yzxw) SHADER_SWIZZLE_OP (232 , yzy ) SHADER_SWIZZLE_OP (2321, yzyx)
323     SHADER_SWIZZLE_OP (2322, yzyy) SHADER_SWIZZLE_OP (2323, yzyz) SHADER_SWIZZLE_OP (2324, yzyw) SHADER_SWIZZLE_OP (233 , yzz )
324     SHADER_SWIZZLE_OP (2331, yzzx) SHADER_SWIZZLE_OP (2332, yzzy) SHADER_SWIZZLE_OP (2333, yzzz) SHADER_SWIZZLE_OP (2334, yzzw)
325     SHADER_SWIZZLE_OP (234 , yzw ) SHADER_SWIZZLE_OP (2341, yzwx) SHADER_SWIZZLE_OP (2342, yzwy) SHADER_SWIZZLE_OP (2343, yzwz)
326     SHADER_SWIZZLE_OP (2344, yzww) SHADER_SWIZZLE_OP (24 , yw ) SHADER_SWIZZLE_OP (241 , ywx ) SHADER_SWIZZLE_OP (2411, ywxx)
327     SHADER_SWIZZLE_OP (2412, ywxy) SHADER_SWIZZLE_OP (2413, ywxz) SHADER_SWIZZLE_OP (2414, ywxw) SHADER_SWIZZLE_OP (242 , ywy )
328     SHADER_SWIZZLE_OP (2421, ywyx) SHADER_SWIZZLE_OP (2422, ywyy) SHADER_SWIZZLE_OP (2423, ywyz) SHADER_SWIZZLE_OP (2424, ywyw)
329     SHADER_SWIZZLE_OP (243 , ywz ) SHADER_SWIZZLE_OP (2431, ywzx) SHADER_SWIZZLE_OP (2432, ywzy) SHADER_SWIZZLE_OP (2433, ywzz)
330     SHADER_SWIZZLE_OP (2434, ywzw) SHADER_SWIZZLE_OP (244 , yww ) SHADER_SWIZZLE_OP (2441, ywwx) SHADER_SWIZZLE_OP (2442, ywwy)
331     SHADER_SWIZZLE_OP (2443, ywwz) SHADER_SWIZZLE_OP (2444, ywww) SHADER_SWIZZLE_OP (3 , z ) SHADER_SWIZZLE_OP (31 , zx )
332     SHADER_SWIZZLE_OP (311 , zxx ) SHADER_SWIZZLE_OP (3111, zxxx) SHADER_SWIZZLE_OP (3112, zxxy) SHADER_SWIZZLE_OP (3113, zxxz)
333     SHADER_SWIZZLE_OP (3114, zxxw) SHADER_SWIZZLE_OP (312 , zxy ) SHADER_SWIZZLE_OP (3121, zxyx) SHADER_SWIZZLE_OP (3122, zxyy)
334     SHADER_SWIZZLE_OP (3123, zxyz) SHADER_SWIZZLE_OP (3124, zxyw) SHADER_SWIZZLE_OP (313 , zxz ) SHADER_SWIZZLE_OP (3131, zxzx)
335     SHADER_SWIZZLE_OP (3132, zxzy) SHADER_SWIZZLE_OP (3133, zxzz) SHADER_SWIZZLE_OP (3134, zxzw) SHADER_SWIZZLE_OP (314 , zxw )
336     SHADER_SWIZZLE_OP (3141, zxwx) SHADER_SWIZZLE_OP (3142, zxwy) SHADER_SWIZZLE_OP (3143, zxwz) SHADER_SWIZZLE_OP (3144, zxww)
337     SHADER_SWIZZLE_OP (32 , zy ) SHADER_SWIZZLE_OP (321 , zyx ) SHADER_SWIZZLE_OP (3211, zyxx) SHADER_SWIZZLE_OP (3212, zyxy)
338     SHADER_SWIZZLE_OP (3213, zyxz) SHADER_SWIZZLE_OP (3214, zyxw) SHADER_SWIZZLE_OP (322 , zyy ) SHADER_SWIZZLE_OP (3221, zyyx)
339     SHADER_SWIZZLE_OP (3222, zyyy) SHADER_SWIZZLE_OP (3223, zyyz) SHADER_SWIZZLE_OP (3224, zyyw) SHADER_SWIZZLE_OP (323 , zyz )
340     SHADER_SWIZZLE_OP (3231, zyzx) SHADER_SWIZZLE_OP (3232, zyzy) SHADER_SWIZZLE_OP (3233, zyzz) SHADER_SWIZZLE_OP (3234, zyzw)
341     SHADER_SWIZZLE_OP (324 , zyw ) SHADER_SWIZZLE_OP (3241, zywx) SHADER_SWIZZLE_OP (3242, zywy) SHADER_SWIZZLE_OP (3243, zywz)
342     SHADER_SWIZZLE_OP (3244, zyww) SHADER_SWIZZLE_OP (33 , zz ) SHADER_SWIZZLE_OP (331 , zzx ) SHADER_SWIZZLE_OP (3311, zzxx)
343     SHADER_SWIZZLE_OP (3312, zzxy) SHADER_SWIZZLE_OP (3313, zzxz) SHADER_SWIZZLE_OP (3314, zzxw) SHADER_SWIZZLE_OP (332 , zzy )
344     SHADER_SWIZZLE_OP (3321, zzyx) SHADER_SWIZZLE_OP (3322, zzyy) SHADER_SWIZZLE_OP (3323, zzyz) SHADER_SWIZZLE_OP (3324, zzyw)
345     SHADER_SWIZZLE_OP (333 , zzz ) SHADER_SWIZZLE_OP (3331, zzzx) SHADER_SWIZZLE_OP (3332, zzzy) SHADER_SWIZZLE_OP (3333, zzzz)
346     SHADER_SWIZZLE_OP (3334, zzzw) SHADER_SWIZZLE_OP (334 , zzw ) SHADER_SWIZZLE_OP (3341, zzwx) SHADER_SWIZZLE_OP (3342, zzwy)
347     SHADER_SWIZZLE_OP (3343, zzwz) SHADER_SWIZZLE_OP (3344, zzww) SHADER_SWIZZLE_OP (34 , zw ) SHADER_SWIZZLE_OP (341 , zwx )
348     SHADER_SWIZZLE_OP (3411, zwxx) SHADER_SWIZZLE_OP (3412, zwxy) SHADER_SWIZZLE_OP (3413, zwxz) SHADER_SWIZZLE_OP (3414, zwxw)
349     SHADER_SWIZZLE_OP (342 , zwy ) SHADER_SWIZZLE_OP (3421, zwyx) SHADER_SWIZZLE_OP (3422, zwyy) SHADER_SWIZZLE_OP (3423, zwyz)
350     SHADER_SWIZZLE_OP (3424, zwyw) SHADER_SWIZZLE_OP (343 , zwz ) SHADER_SWIZZLE_OP (3431, zwzx) SHADER_SWIZZLE_OP (3432, zwzy)
351     SHADER_SWIZZLE_OP (3433, zwzz) SHADER_SWIZZLE_OP (3434, zwzw) SHADER_SWIZZLE_OP (344 , zww ) SHADER_SWIZZLE_OP (3441, zwwx)
352     SHADER_SWIZZLE_OP (3442, zwwy) SHADER_SWIZZLE_OP (3443, zwwz) SHADER_SWIZZLE_OP (3444, zwww) SHADER_SWIZZLE_OP (4 , w )
353     SHADER_SWIZZLE_OP (41 , wx ) SHADER_SWIZZLE_OP (411 , wxx ) SHADER_SWIZZLE_OP (4111, wxxx) SHADER_SWIZZLE_OP (4112, wxxy)
354     SHADER_SWIZZLE_OP (4113, wxxz) SHADER_SWIZZLE_OP (4114, wxxw) SHADER_SWIZZLE_OP (412 , wxy ) SHADER_SWIZZLE_OP (4121, wxyx)
355     SHADER_SWIZZLE_OP (4122, wxyy) SHADER_SWIZZLE_OP (4123, wxyz) SHADER_SWIZZLE_OP (4124, wxyw) SHADER_SWIZZLE_OP (413 , wxz )
356     SHADER_SWIZZLE_OP (4131, wxzx) SHADER_SWIZZLE_OP (4132, wxzy) SHADER_SWIZZLE_OP (4133, wxzz) SHADER_SWIZZLE_OP (4134, wxzw)
357     SHADER_SWIZZLE_OP (414 , wxw ) SHADER_SWIZZLE_OP (4141, wxwx) SHADER_SWIZZLE_OP (4142, wxwy) SHADER_SWIZZLE_OP (4143, wxwz)
358     SHADER_SWIZZLE_OP (4144, wxww) SHADER_SWIZZLE_OP (42 , wy ) SHADER_SWIZZLE_OP (421 , wyx ) SHADER_SWIZZLE_OP (4211, wyxx)
359     SHADER_SWIZZLE_OP (4212, wyxy) SHADER_SWIZZLE_OP (4213, wyxz) SHADER_SWIZZLE_OP (4214, wyxw) SHADER_SWIZZLE_OP (422 , wyy )
360     SHADER_SWIZZLE_OP (4221, wyyx) SHADER_SWIZZLE_OP (4222, wyyy) SHADER_SWIZZLE_OP (4223, wyyz) SHADER_SWIZZLE_OP (4224, wyyw)
361     SHADER_SWIZZLE_OP (423 , wyz ) SHADER_SWIZZLE_OP (4231, wyzx) SHADER_SWIZZLE_OP (4232, wyzy) SHADER_SWIZZLE_OP (4233, wyzz)
362     SHADER_SWIZZLE_OP (4234, wyzw) SHADER_SWIZZLE_OP (424 , wyw ) SHADER_SWIZZLE_OP (4241, wywx) SHADER_SWIZZLE_OP (4242, wywy)
363     SHADER_SWIZZLE_OP (4243, wywz) SHADER_SWIZZLE_OP (4244, wyww) SHADER_SWIZZLE_OP (43 , wz ) SHADER_SWIZZLE_OP (431 , wzx )
364     SHADER_SWIZZLE_OP (4311, wzxx) SHADER_SWIZZLE_OP (4312, wzxy) SHADER_SWIZZLE_OP (4313, wzxz) SHADER_SWIZZLE_OP (4314, wzxw)
365     SHADER_SWIZZLE_OP (432 , wzy ) SHADER_SWIZZLE_OP (4321, wzyx) SHADER_SWIZZLE_OP (4322, wzyy) SHADER_SWIZZLE_OP (4323, wzyz)
366     SHADER_SWIZZLE_OP (4324, wzyw) SHADER_SWIZZLE_OP (433 , wzz ) SHADER_SWIZZLE_OP (4331, wzzx) SHADER_SWIZZLE_OP (4332, wzzy)
367     SHADER_SWIZZLE_OP (4333, wzzz) SHADER_SWIZZLE_OP (4334, wzzw) SHADER_SWIZZLE_OP (434 , wzw ) SHADER_SWIZZLE_OP (4341, wzwx)
368     SHADER_SWIZZLE_OP (4342, wzwy) SHADER_SWIZZLE_OP (4343, wzwz) SHADER_SWIZZLE_OP (4344, wzww) SHADER_SWIZZLE_OP (44 , ww )
369     SHADER_SWIZZLE_OP (441 , wwx ) SHADER_SWIZZLE_OP (4411, wwxx) SHADER_SWIZZLE_OP (4412, wwxy) SHADER_SWIZZLE_OP (4413, wwxz)
370     SHADER_SWIZZLE_OP (4414, wwxw) SHADER_SWIZZLE_OP (442 , wwy ) SHADER_SWIZZLE_OP (4421, wwyx) SHADER_SWIZZLE_OP (4422, wwyy)
371     SHADER_SWIZZLE_OP (4423, wwyz) SHADER_SWIZZLE_OP (4424, wwyw) SHADER_SWIZZLE_OP (443 , wwz ) SHADER_SWIZZLE_OP (4431, wwzx)
372     SHADER_SWIZZLE_OP (4432, wwzy) SHADER_SWIZZLE_OP (4433, wwzz) SHADER_SWIZZLE_OP (4434, wwzw) SHADER_SWIZZLE_OP (444 , www )
373     SHADER_SWIZZLE_OP (4441, wwwx) SHADER_SWIZZLE_OP (4442, wwwy) SHADER_SWIZZLE_OP (4443, wwwz) SHADER_SWIZZLE_OP (4444, wwww)
374    
375     # undef SHADER_SWIZZLE_OP
376    
377 root 1.1 void debdebdebdebug ()//D
378     {
379     vertex_shader vsh;
380     fragment_shader fsh;
381     temp_4f t1, t2;
382     sampler_2d s2d (1);
383    
384     vsh->start ();
385    
386     temp_4f lightpos;
387     temp_3f wpos;
388    
389     lightpos = vec4 (10, -10, 0, 1);
390 root 1.5 vout.position = gl.model_view_matrix_inverse_transpose * vin.position;
391    
392     z(wpos) = 5;
393 root 1.1
394     vsh->end ();
395     vsh->compile ();
396     }
397    
398     }
399