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

Comparing libgender/shader.h (file contents):
Revision 1.20 by root, Fri Oct 29 23:19:08 2004 UTC vs.
Revision 1.21 by root, Sat Oct 30 00:17:28 2004 UTC

883 { 883 {
884 return sl_append< sampler_ref<sampler_i> > (v); 884 return sl_append< sampler_ref<sampler_i> > (v);
885 } 885 }
886 }; 886 };
887 887
888 namespace compile {
888 extern const fragment_const_string str_2sp; 889 extern const fragment_const_string str_2sp;
889 extern const fragment_const_string str_equal; 890 extern const fragment_const_string str_equal;
890 extern const fragment_const_string str_comma; 891 extern const fragment_const_string str_comma;
891 extern const fragment_const_string str_endl; 892 extern const fragment_const_string str_endl;
892 893
893 template<class fragment, typename expr> 894 template<class fragment, typename expr>
894 inline void sl_assign (const fragment &f, const expr &e) 895 inline void sl_assign (const fragment &f, const expr &e)
895 { 896 {
896 cur->append (str_2sp); 897 cur->append (str_2sp);
897 cur->append (f); 898 cur->append (f);
898 cur->append (str_equal); 899 cur->append (str_equal);
899 sl_convert<expr>::convert (e) (); 900 sl_convert<expr>::convert (e) ();
900 cur->append (str_endl); 901 cur->append (str_endl);
902 }
901 } 903 }
902 904
903 template<class type> 905 template<class type>
904 template<typename expr> 906 template<typename expr>
905 inline const auto_lvalue_ref0<type> &auto_lvalue_ref0<type>::operator =(const expr &e) const 907 inline const auto_lvalue_ref0<type> &auto_lvalue_ref0<type>::operator =(const expr &e) const
906 { 908 {
907 sl_assign (*this, e); 909 compile::sl_assign (*this, e);
908 return *this; 910 return *this;
909 } 911 }
910 912
911 template<class type, typename arg1> 913 template<class type, typename arg1>
912 template<typename expr> 914 template<typename expr>
913 inline const auto_lvalue_ref1<type,arg1> &auto_lvalue_ref1<type,arg1>::operator =(const expr &e) const 915 inline const auto_lvalue_ref1<type,arg1> &auto_lvalue_ref1<type,arg1>::operator =(const expr &e) const
914 { 916 {
915 sl_assign (*this, e); 917 compile::sl_assign (*this, e);
916 return *this; 918 return *this;
917 } 919 }
918 920
919 template<class T> 921 template<class T>
920 template<typename expr> 922 template<typename expr>
921 inline const sl_expr<T> &sl_expr<T>::operator =(const expr &e) const 923 inline const sl_expr<T> &sl_expr<T>::operator =(const expr &e) const
922 { 924 {
923 sl_assign (*this, e); 925 compile::sl_assign (*this, e);
924 return *this; 926 return *this;
925 } 927 }
926 928
927 template<const char *strtype> 929 template<const char *strtype>
928 template<typename expr> 930 template<typename expr>
929 inline const temp_ref<strtype> &temp_ref<strtype>::operator =(const expr &e) const 931 inline const temp_ref<strtype> &temp_ref<strtype>::operator =(const expr &e) const
930 { 932 {
931 sl_assign (*this, e); 933 compile::sl_assign (*this, e);
932 return *this; 934 return *this;
933 } 935 }
934 936
935 struct sl_append_const_string 937 struct sl_append_const_string
936 { 938 {
943 { 945 {
944 cur->push_back (str); 946 cur->push_back (str);
945 } 947 }
946 }; 948 };
947 949
950 namespace compile {
948 extern const sl_append_const_string str_lpar; 951 extern const sl_append_const_string str_lpar;
949 extern const sl_append_const_string str_rpar; 952 extern const sl_append_const_string str_rpar;
953 extern const sl_append_const_string str_minus;
950 954
955 using namespace shader;
956
957 template<typename T>
958 inline const sl_expr< sl_concat2< sl_append_const_string,
959 typename sl_convert<T>::T
960 > >
961 operator -(const T &t)
962 {
963 return concat (str_minus, sl_convert<T>::convert (t), s);
964 }
965
951 template<class A, class B, class C> 966 template<class A, class B, class C>
952 struct sl_binop 967 struct sl_binop
953 { 968 {
954 const A a; const B b; const C c; 969 const A a; const B b; const C c;
955 sl_binop (const A &a, const B &b, const C &c) : a(a), b(b), c(c) { } 970 sl_binop (const A &a, const B &b, const C &c) : a(a), b(b), c(c) { }
956 void operator ()() const { str_lpar (); a (); b (); c (); str_rpar (); } 971 void operator ()() const { str_lpar (); a (); b (); c (); str_rpar (); }
957 }; 972 };
958 973
959# define SHADER_BINOP(op, str) \ 974# define SHADER_BINOP(op, str) \
960 extern const sl_append_const_string str_ ## str; \ 975 extern const sl_append_const_string str_ ## str; \
961 template<typename A, typename B> \ 976 template<typename A, typename B> \
962 inline const sl_expr< sl_binop< typename sl_convert<A>::T, \ 977 inline const sl_expr< sl_binop< typename sl_convert<A>::T, \
963 sl_append_const_string, \ 978 sl_append_const_string, \
964 typename sl_convert<B>::T > > \ 979 typename sl_convert<B>::T > > \
965 operator op(const A &a, const B &b) \ 980 operator op(const A &a, const B &b) \
966 { \ 981 { \
967 return sl_binop< typename sl_convert<A>::T, sl_append_const_string, typename sl_convert<B>::T > \ 982 return sl_binop< typename sl_convert<A>::T, sl_append_const_string, typename sl_convert<B>::T > \
968 (sl_convert<A>::convert (a), str_ ## str, sl_convert<B>::convert (b)); \ 983 (sl_convert<A>::convert (a), str_ ## str, sl_convert<B>::convert (b)); \
969 } 984 }
970 985
971 SHADER_BINOP (+, plus); 986 SHADER_BINOP (+, plus);
972 SHADER_BINOP (-, minus); 987 SHADER_BINOP (-, minus);
973 SHADER_BINOP (*, mul); 988 SHADER_BINOP (*, mul);
974 SHADER_BINOP (/, div); 989 SHADER_BINOP (/, div);
975 SHADER_BINOP (%, mod); 990 SHADER_BINOP (%, mod);
976 991
992 SHADER_BINOP (<, lt);
993 SHADER_BINOP (<=, lte);
994 SHADER_BINOP (==, eq);
995 SHADER_BINOP (!=, ne);
996 SHADER_BINOP (>=, gte);
997 SHADER_BINOP (>, gt);
998
977# undef SHADER_BINOP 999# undef SHADER_BINOP
978 1000
979 void swizzle_mask (sl_string<7> &s, int mask); 1001 void swizzle_mask (sl_string<7> &s, int mask);
980 1002
981 template<typename T> 1003 template<typename T>
982 inline const sl_expr< sl_concat3< sl_append_const_string, 1004 inline const sl_expr< sl_concat3< sl_append_const_string,
983 typename sl_convert<T>::T, 1005 typename sl_convert<T>::T,
984 sl_string<7> 1006 sl_string<7>
985 > > 1007 > >
986 swizzle (const T &t, int a, int b = 0, int c = 0, int d = 0) 1008 swizzle (const T &t, int a, int b = 0, int c = 0, int d = 0)
987 { 1009 {
988 sl_string<7> s; 1010 sl_string<7> s;
989 swizzle_mask (s, ((d * 5 + c) * 5 + b) * 5 + a); 1011 swizzle_mask (s, ((d * 5 + c) * 5 + b) * 5 + a);
990 return concat (str_lpar, sl_convert<T>::convert (t), s); 1012 return concat (str_lpar, sl_convert<T>::convert (t), s);
1013 }
1014
1015# define SHADER_SWIZZLE_OP(abcd,type) \
1016 template<typename T> \
1017 inline const sl_expr< sl_concat3< sl_append_const_string, \
1018 typename sl_convert<T>::T, \
1019 sl_string<7> \
1020 > > \
1021 type (const T &t) \
1022 { \
1023 return swizzle (t, (abcd / 1000) % 5, (abcd / 100) % 5, (abcd / 10) % 5, (abcd / 1) % 5); \
1024 }
1025
1026 // brute force is lovely, ain't it?
1027 SHADER_SWIZZLE_OP (1 , x ) SHADER_SWIZZLE_OP (11 , xx ) SHADER_SWIZZLE_OP (111 , xxx ) SHADER_SWIZZLE_OP (1111, xxxx)
1028 SHADER_SWIZZLE_OP (1112, xxxy) SHADER_SWIZZLE_OP (1113, xxxz) SHADER_SWIZZLE_OP (1114, xxxw) SHADER_SWIZZLE_OP (112 , xxy )
1029 SHADER_SWIZZLE_OP (1121, xxyx) SHADER_SWIZZLE_OP (1122, xxyy) SHADER_SWIZZLE_OP (1123, xxyz) SHADER_SWIZZLE_OP (1124, xxyw)
1030 SHADER_SWIZZLE_OP (113 , xxz ) SHADER_SWIZZLE_OP (1131, xxzx) SHADER_SWIZZLE_OP (1132, xxzy) SHADER_SWIZZLE_OP (1133, xxzz)
1031 SHADER_SWIZZLE_OP (1134, xxzw) SHADER_SWIZZLE_OP (114 , xxw ) SHADER_SWIZZLE_OP (1141, xxwx) SHADER_SWIZZLE_OP (1142, xxwy)
1032 SHADER_SWIZZLE_OP (1143, xxwz) SHADER_SWIZZLE_OP (1144, xxww) SHADER_SWIZZLE_OP (12 , xy ) SHADER_SWIZZLE_OP (121 , xyx )
1033 SHADER_SWIZZLE_OP (1211, xyxx) SHADER_SWIZZLE_OP (1212, xyxy) SHADER_SWIZZLE_OP (1213, xyxz) SHADER_SWIZZLE_OP (1214, xyxw)
1034 SHADER_SWIZZLE_OP (122 , xyy ) SHADER_SWIZZLE_OP (1221, xyyx) SHADER_SWIZZLE_OP (1222, xyyy) SHADER_SWIZZLE_OP (1223, xyyz)
1035 SHADER_SWIZZLE_OP (1224, xyyw) SHADER_SWIZZLE_OP (123 , xyz ) SHADER_SWIZZLE_OP (1231, xyzx) SHADER_SWIZZLE_OP (1232, xyzy)
1036 SHADER_SWIZZLE_OP (1233, xyzz) SHADER_SWIZZLE_OP (1234, xyzw) SHADER_SWIZZLE_OP (124 , xyw ) SHADER_SWIZZLE_OP (1241, xywx)
1037 SHADER_SWIZZLE_OP (1242, xywy) SHADER_SWIZZLE_OP (1243, xywz) SHADER_SWIZZLE_OP (1244, xyww) SHADER_SWIZZLE_OP (13 , xz )
1038 SHADER_SWIZZLE_OP (131 , xzx ) SHADER_SWIZZLE_OP (1311, xzxx) SHADER_SWIZZLE_OP (1312, xzxy) SHADER_SWIZZLE_OP (1313, xzxz)
1039 SHADER_SWIZZLE_OP (1314, xzxw) SHADER_SWIZZLE_OP (132 , xzy ) SHADER_SWIZZLE_OP (1321, xzyx) SHADER_SWIZZLE_OP (1322, xzyy)
1040 SHADER_SWIZZLE_OP (1323, xzyz) SHADER_SWIZZLE_OP (1324, xzyw) SHADER_SWIZZLE_OP (133 , xzz ) SHADER_SWIZZLE_OP (1331, xzzx)
1041 SHADER_SWIZZLE_OP (1332, xzzy) SHADER_SWIZZLE_OP (1333, xzzz) SHADER_SWIZZLE_OP (1334, xzzw) SHADER_SWIZZLE_OP (134 , xzw )
1042 SHADER_SWIZZLE_OP (1341, xzwx) SHADER_SWIZZLE_OP (1342, xzwy) SHADER_SWIZZLE_OP (1343, xzwz) SHADER_SWIZZLE_OP (1344, xzww)
1043 SHADER_SWIZZLE_OP (14 , xw ) SHADER_SWIZZLE_OP (141 , xwx ) SHADER_SWIZZLE_OP (1411, xwxx) SHADER_SWIZZLE_OP (1412, xwxy)
1044 SHADER_SWIZZLE_OP (1413, xwxz) SHADER_SWIZZLE_OP (1414, xwxw) SHADER_SWIZZLE_OP (142 , xwy ) SHADER_SWIZZLE_OP (1421, xwyx)
1045 SHADER_SWIZZLE_OP (1422, xwyy) SHADER_SWIZZLE_OP (1423, xwyz) SHADER_SWIZZLE_OP (1424, xwyw) SHADER_SWIZZLE_OP (143 , xwz )
1046 SHADER_SWIZZLE_OP (1431, xwzx) SHADER_SWIZZLE_OP (1432, xwzy) SHADER_SWIZZLE_OP (1433, xwzz) SHADER_SWIZZLE_OP (1434, xwzw)
1047 SHADER_SWIZZLE_OP (144 , xww ) SHADER_SWIZZLE_OP (1441, xwwx) SHADER_SWIZZLE_OP (1442, xwwy) SHADER_SWIZZLE_OP (1443, xwwz)
1048 SHADER_SWIZZLE_OP (1444, xwww) SHADER_SWIZZLE_OP (2 , y ) SHADER_SWIZZLE_OP (21 , yx ) SHADER_SWIZZLE_OP (211 , yxx )
1049 SHADER_SWIZZLE_OP (2111, yxxx) SHADER_SWIZZLE_OP (2112, yxxy) SHADER_SWIZZLE_OP (2113, yxxz) SHADER_SWIZZLE_OP (2114, yxxw)
1050 SHADER_SWIZZLE_OP (212 , yxy ) SHADER_SWIZZLE_OP (2121, yxyx) SHADER_SWIZZLE_OP (2122, yxyy) SHADER_SWIZZLE_OP (2123, yxyz)
1051 SHADER_SWIZZLE_OP (2124, yxyw) SHADER_SWIZZLE_OP (213 , yxz ) SHADER_SWIZZLE_OP (2131, yxzx) SHADER_SWIZZLE_OP (2132, yxzy)
1052 SHADER_SWIZZLE_OP (2133, yxzz) SHADER_SWIZZLE_OP (2134, yxzw) SHADER_SWIZZLE_OP (214 , yxw ) SHADER_SWIZZLE_OP (2141, yxwx)
1053 SHADER_SWIZZLE_OP (2142, yxwy) SHADER_SWIZZLE_OP (2143, yxwz) SHADER_SWIZZLE_OP (2144, yxww) SHADER_SWIZZLE_OP (22 , yy )
1054 SHADER_SWIZZLE_OP (221 , yyx ) SHADER_SWIZZLE_OP (2211, yyxx) SHADER_SWIZZLE_OP (2212, yyxy) SHADER_SWIZZLE_OP (2213, yyxz)
1055 SHADER_SWIZZLE_OP (2214, yyxw) SHADER_SWIZZLE_OP (222 , yyy ) SHADER_SWIZZLE_OP (2221, yyyx) SHADER_SWIZZLE_OP (2222, yyyy)
1056 SHADER_SWIZZLE_OP (2223, yyyz) SHADER_SWIZZLE_OP (2224, yyyw) SHADER_SWIZZLE_OP (223 , yyz ) SHADER_SWIZZLE_OP (2231, yyzx)
1057 SHADER_SWIZZLE_OP (2232, yyzy) SHADER_SWIZZLE_OP (2233, yyzz) SHADER_SWIZZLE_OP (2234, yyzw) SHADER_SWIZZLE_OP (224 , yyw )
1058 SHADER_SWIZZLE_OP (2241, yywx) SHADER_SWIZZLE_OP (2242, yywy) SHADER_SWIZZLE_OP (2243, yywz) SHADER_SWIZZLE_OP (2244, yyww)
1059 SHADER_SWIZZLE_OP (23 , yz ) SHADER_SWIZZLE_OP (231 , yzx ) SHADER_SWIZZLE_OP (2311, yzxx) SHADER_SWIZZLE_OP (2312, yzxy)
1060 SHADER_SWIZZLE_OP (2313, yzxz) SHADER_SWIZZLE_OP (2314, yzxw) SHADER_SWIZZLE_OP (232 , yzy ) SHADER_SWIZZLE_OP (2321, yzyx)
1061 SHADER_SWIZZLE_OP (2322, yzyy) SHADER_SWIZZLE_OP (2323, yzyz) SHADER_SWIZZLE_OP (2324, yzyw) SHADER_SWIZZLE_OP (233 , yzz )
1062 SHADER_SWIZZLE_OP (2331, yzzx) SHADER_SWIZZLE_OP (2332, yzzy) SHADER_SWIZZLE_OP (2333, yzzz) SHADER_SWIZZLE_OP (2334, yzzw)
1063 SHADER_SWIZZLE_OP (234 , yzw ) SHADER_SWIZZLE_OP (2341, yzwx) SHADER_SWIZZLE_OP (2342, yzwy) SHADER_SWIZZLE_OP (2343, yzwz)
1064 SHADER_SWIZZLE_OP (2344, yzww) SHADER_SWIZZLE_OP (24 , yw ) SHADER_SWIZZLE_OP (241 , ywx ) SHADER_SWIZZLE_OP (2411, ywxx)
1065 SHADER_SWIZZLE_OP (2412, ywxy) SHADER_SWIZZLE_OP (2413, ywxz) SHADER_SWIZZLE_OP (2414, ywxw) SHADER_SWIZZLE_OP (242 , ywy )
1066 SHADER_SWIZZLE_OP (2421, ywyx) SHADER_SWIZZLE_OP (2422, ywyy) SHADER_SWIZZLE_OP (2423, ywyz) SHADER_SWIZZLE_OP (2424, ywyw)
1067 SHADER_SWIZZLE_OP (243 , ywz ) SHADER_SWIZZLE_OP (2431, ywzx) SHADER_SWIZZLE_OP (2432, ywzy) SHADER_SWIZZLE_OP (2433, ywzz)
1068 SHADER_SWIZZLE_OP (2434, ywzw) SHADER_SWIZZLE_OP (244 , yww ) SHADER_SWIZZLE_OP (2441, ywwx) SHADER_SWIZZLE_OP (2442, ywwy)
1069 SHADER_SWIZZLE_OP (2443, ywwz) SHADER_SWIZZLE_OP (2444, ywww) SHADER_SWIZZLE_OP (3 , z ) SHADER_SWIZZLE_OP (31 , zx )
1070 SHADER_SWIZZLE_OP (311 , zxx ) SHADER_SWIZZLE_OP (3111, zxxx) SHADER_SWIZZLE_OP (3112, zxxy) SHADER_SWIZZLE_OP (3113, zxxz)
1071 SHADER_SWIZZLE_OP (3114, zxxw) SHADER_SWIZZLE_OP (312 , zxy ) SHADER_SWIZZLE_OP (3121, zxyx) SHADER_SWIZZLE_OP (3122, zxyy)
1072 SHADER_SWIZZLE_OP (3123, zxyz) SHADER_SWIZZLE_OP (3124, zxyw) SHADER_SWIZZLE_OP (313 , zxz ) SHADER_SWIZZLE_OP (3131, zxzx)
1073 SHADER_SWIZZLE_OP (3132, zxzy) SHADER_SWIZZLE_OP (3133, zxzz) SHADER_SWIZZLE_OP (3134, zxzw) SHADER_SWIZZLE_OP (314 , zxw )
1074 SHADER_SWIZZLE_OP (3141, zxwx) SHADER_SWIZZLE_OP (3142, zxwy) SHADER_SWIZZLE_OP (3143, zxwz) SHADER_SWIZZLE_OP (3144, zxww)
1075 SHADER_SWIZZLE_OP (32 , zy ) SHADER_SWIZZLE_OP (321 , zyx ) SHADER_SWIZZLE_OP (3211, zyxx) SHADER_SWIZZLE_OP (3212, zyxy)
1076 SHADER_SWIZZLE_OP (3213, zyxz) SHADER_SWIZZLE_OP (3214, zyxw) SHADER_SWIZZLE_OP (322 , zyy ) SHADER_SWIZZLE_OP (3221, zyyx)
1077 SHADER_SWIZZLE_OP (3222, zyyy) SHADER_SWIZZLE_OP (3223, zyyz) SHADER_SWIZZLE_OP (3224, zyyw) SHADER_SWIZZLE_OP (323 , zyz )
1078 SHADER_SWIZZLE_OP (3231, zyzx) SHADER_SWIZZLE_OP (3232, zyzy) SHADER_SWIZZLE_OP (3233, zyzz) SHADER_SWIZZLE_OP (3234, zyzw)
1079 SHADER_SWIZZLE_OP (324 , zyw ) SHADER_SWIZZLE_OP (3241, zywx) SHADER_SWIZZLE_OP (3242, zywy) SHADER_SWIZZLE_OP (3243, zywz)
1080 SHADER_SWIZZLE_OP (3244, zyww) SHADER_SWIZZLE_OP (33 , zz ) SHADER_SWIZZLE_OP (331 , zzx ) SHADER_SWIZZLE_OP (3311, zzxx)
1081 SHADER_SWIZZLE_OP (3312, zzxy) SHADER_SWIZZLE_OP (3313, zzxz) SHADER_SWIZZLE_OP (3314, zzxw) SHADER_SWIZZLE_OP (332 , zzy )
1082 SHADER_SWIZZLE_OP (3321, zzyx) SHADER_SWIZZLE_OP (3322, zzyy) SHADER_SWIZZLE_OP (3323, zzyz) SHADER_SWIZZLE_OP (3324, zzyw)
1083 SHADER_SWIZZLE_OP (333 , zzz ) SHADER_SWIZZLE_OP (3331, zzzx) SHADER_SWIZZLE_OP (3332, zzzy) SHADER_SWIZZLE_OP (3333, zzzz)
1084 SHADER_SWIZZLE_OP (3334, zzzw) SHADER_SWIZZLE_OP (334 , zzw ) SHADER_SWIZZLE_OP (3341, zzwx) SHADER_SWIZZLE_OP (3342, zzwy)
1085 SHADER_SWIZZLE_OP (3343, zzwz) SHADER_SWIZZLE_OP (3344, zzww) SHADER_SWIZZLE_OP (34 , zw ) SHADER_SWIZZLE_OP (341 , zwx )
1086 SHADER_SWIZZLE_OP (3411, zwxx) SHADER_SWIZZLE_OP (3412, zwxy) SHADER_SWIZZLE_OP (3413, zwxz) SHADER_SWIZZLE_OP (3414, zwxw)
1087 SHADER_SWIZZLE_OP (342 , zwy ) SHADER_SWIZZLE_OP (3421, zwyx) SHADER_SWIZZLE_OP (3422, zwyy) SHADER_SWIZZLE_OP (3423, zwyz)
1088 SHADER_SWIZZLE_OP (3424, zwyw) SHADER_SWIZZLE_OP (343 , zwz ) SHADER_SWIZZLE_OP (3431, zwzx) SHADER_SWIZZLE_OP (3432, zwzy)
1089 SHADER_SWIZZLE_OP (3433, zwzz) SHADER_SWIZZLE_OP (3434, zwzw) SHADER_SWIZZLE_OP (344 , zww ) SHADER_SWIZZLE_OP (3441, zwwx)
1090 SHADER_SWIZZLE_OP (3442, zwwy) SHADER_SWIZZLE_OP (3443, zwwz) SHADER_SWIZZLE_OP (3444, zwww) SHADER_SWIZZLE_OP (4 , w )
1091 SHADER_SWIZZLE_OP (41 , wx ) SHADER_SWIZZLE_OP (411 , wxx ) SHADER_SWIZZLE_OP (4111, wxxx) SHADER_SWIZZLE_OP (4112, wxxy)
1092 SHADER_SWIZZLE_OP (4113, wxxz) SHADER_SWIZZLE_OP (4114, wxxw) SHADER_SWIZZLE_OP (412 , wxy ) SHADER_SWIZZLE_OP (4121, wxyx)
1093 SHADER_SWIZZLE_OP (4122, wxyy) SHADER_SWIZZLE_OP (4123, wxyz) SHADER_SWIZZLE_OP (4124, wxyw) SHADER_SWIZZLE_OP (413 , wxz )
1094 SHADER_SWIZZLE_OP (4131, wxzx) SHADER_SWIZZLE_OP (4132, wxzy) SHADER_SWIZZLE_OP (4133, wxzz) SHADER_SWIZZLE_OP (4134, wxzw)
1095 SHADER_SWIZZLE_OP (414 , wxw ) SHADER_SWIZZLE_OP (4141, wxwx) SHADER_SWIZZLE_OP (4142, wxwy) SHADER_SWIZZLE_OP (4143, wxwz)
1096 SHADER_SWIZZLE_OP (4144, wxww) SHADER_SWIZZLE_OP (42 , wy ) SHADER_SWIZZLE_OP (421 , wyx ) SHADER_SWIZZLE_OP (4211, wyxx)
1097 SHADER_SWIZZLE_OP (4212, wyxy) SHADER_SWIZZLE_OP (4213, wyxz) SHADER_SWIZZLE_OP (4214, wyxw) SHADER_SWIZZLE_OP (422 , wyy )
1098 SHADER_SWIZZLE_OP (4221, wyyx) SHADER_SWIZZLE_OP (4222, wyyy) SHADER_SWIZZLE_OP (4223, wyyz) SHADER_SWIZZLE_OP (4224, wyyw)
1099 SHADER_SWIZZLE_OP (423 , wyz ) SHADER_SWIZZLE_OP (4231, wyzx) SHADER_SWIZZLE_OP (4232, wyzy) SHADER_SWIZZLE_OP (4233, wyzz)
1100 SHADER_SWIZZLE_OP (4234, wyzw) SHADER_SWIZZLE_OP (424 , wyw ) SHADER_SWIZZLE_OP (4241, wywx) SHADER_SWIZZLE_OP (4242, wywy)
1101 SHADER_SWIZZLE_OP (4243, wywz) SHADER_SWIZZLE_OP (4244, wyww) SHADER_SWIZZLE_OP (43 , wz ) SHADER_SWIZZLE_OP (431 , wzx )
1102 SHADER_SWIZZLE_OP (4311, wzxx) SHADER_SWIZZLE_OP (4312, wzxy) SHADER_SWIZZLE_OP (4313, wzxz) SHADER_SWIZZLE_OP (4314, wzxw)
1103 SHADER_SWIZZLE_OP (432 , wzy ) SHADER_SWIZZLE_OP (4321, wzyx) SHADER_SWIZZLE_OP (4322, wzyy) SHADER_SWIZZLE_OP (4323, wzyz)
1104 SHADER_SWIZZLE_OP (4324, wzyw) SHADER_SWIZZLE_OP (433 , wzz ) SHADER_SWIZZLE_OP (4331, wzzx) SHADER_SWIZZLE_OP (4332, wzzy)
1105 SHADER_SWIZZLE_OP (4333, wzzz) SHADER_SWIZZLE_OP (4334, wzzw) SHADER_SWIZZLE_OP (434 , wzw ) SHADER_SWIZZLE_OP (4341, wzwx)
1106 SHADER_SWIZZLE_OP (4342, wzwy) SHADER_SWIZZLE_OP (4343, wzwz) SHADER_SWIZZLE_OP (4344, wzww) SHADER_SWIZZLE_OP (44 , ww )
1107 SHADER_SWIZZLE_OP (441 , wwx ) SHADER_SWIZZLE_OP (4411, wwxx) SHADER_SWIZZLE_OP (4412, wwxy) SHADER_SWIZZLE_OP (4413, wwxz)
1108 SHADER_SWIZZLE_OP (4414, wwxw) SHADER_SWIZZLE_OP (442 , wwy ) SHADER_SWIZZLE_OP (4421, wwyx) SHADER_SWIZZLE_OP (4422, wwyy)
1109 SHADER_SWIZZLE_OP (4423, wwyz) SHADER_SWIZZLE_OP (4424, wwyw) SHADER_SWIZZLE_OP (443 , wwz ) SHADER_SWIZZLE_OP (4431, wwzx)
1110 SHADER_SWIZZLE_OP (4432, wwzy) SHADER_SWIZZLE_OP (4433, wwzz) SHADER_SWIZZLE_OP (4434, wwzw) SHADER_SWIZZLE_OP (444 , www )
1111 SHADER_SWIZZLE_OP (4441, wwwx) SHADER_SWIZZLE_OP (4442, wwwy) SHADER_SWIZZLE_OP (4443, wwwz) SHADER_SWIZZLE_OP (4444, wwww)
1112
1113# undef SHADER_SWIZZLE_OP
1114
1115# define SHADER_FUNC0_(name, glname) \
1116 template<typename A> \
1117 inline const sl_expr<sl_func0> \
1118 name () \
1119 { \
1120 return sl_func0 (#glname " ("); \
1121 }
1122
1123# define SHADER_FUNC0(name) SHADER_FUNC0_(name,name)
1124
1125# define SHADER_FUNC1_(name, glname) \
1126 template<typename A> \
1127 inline const sl_expr< sl_func1<typename sl_convert<A>::T> > \
1128 name (const A &a) \
1129 { \
1130 return sl_func1<typename sl_convert<A>::T> (#glname " (", sl_convert<A>::convert (a));\
1131 }
1132
1133# define SHADER_FUNC1(name) SHADER_FUNC1_(name,name)
1134
1135# define SHADER_FUNC2_(name, glname) \
1136 template<typename A, typename B> \
1137 inline const sl_expr< sl_func2<typename sl_convert<A>::T, typename sl_convert<B>::T> > \
1138 name (const A &a, const B &b) \
1139 { \
1140 return sl_func2<typename sl_convert<A>::T, typename sl_convert<B>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b));\
1141 }
1142
1143# define SHADER_FUNC2(name) SHADER_FUNC2_(name,name)
1144
1145# define SHADER_FUNC3_(name, glname) \
1146 template<typename A, typename B, typename C> \
1147 inline const sl_expr< sl_func3<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T> > \
1148 name (const A &a, const B &b, const C &c) \
1149 { \
1150 return sl_func3<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b), sl_convert<C>::convert (c));\
1151 }
1152
1153# define SHADER_FUNC3(name) SHADER_FUNC3_(name,name)
1154
1155# define SHADER_FUNC4_(name, glname) \
1156 template<typename A, typename B, typename C, typename D> \
1157 inline const sl_expr< sl_func4<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T, typename sl_convert<D>::T > > \
1158 name (const A &a, const B &b, const C &c, const D &d) \
1159 { \
1160 return sl_func4<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T, typename sl_convert<D>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b), sl_convert<C>::convert (c), sl_convert<D>::convert (d));\
1161 }
1162
1163# define SHADER_FUNC4(name) SHADER_FUNC4_(name,name)
1164
1165 SHADER_FUNC1 (abs)
1166 SHADER_FUNC1 (acos)
1167 SHADER_FUNC1 (all)
1168 SHADER_FUNC1 (any)
1169 SHADER_FUNC1 (asin)
1170 SHADER_FUNC1 (atan)
1171 SHADER_FUNC2 (atan)
1172 SHADER_FUNC1 (ceil)
1173 SHADER_FUNC3 (clamp)
1174 SHADER_FUNC1 (cos)
1175 SHADER_FUNC2 (cross)
1176 SHADER_FUNC1 (dFdx)
1177 SHADER_FUNC1 (dFdy)
1178 SHADER_FUNC1 (degrees)
1179 SHADER_FUNC2 (distance)
1180 SHADER_FUNC2 (dot)
1181 SHADER_FUNC2_(equal, equal)
1182 SHADER_FUNC1 (exp)
1183 SHADER_FUNC1 (exp2)
1184 SHADER_FUNC3 (faceforward)
1185 SHADER_FUNC1 (floor)
1186 SHADER_FUNC1 (fract)
1187 SHADER_FUNC0 (ftransform)
1188 SHADER_FUNC1 (fwidth)
1189 SHADER_FUNC2_(greater_than_equal, greaterThanEqual)
1190 SHADER_FUNC2_(greater_then, greaterThan)
1191 SHADER_FUNC1 (inversesqrt)
1192 SHADER_FUNC1 (length)
1193 SHADER_FUNC2_(less_than, lessThan)
1194 SHADER_FUNC2_(less_than_equal, lessThanEqual)
1195 SHADER_FUNC1 (log)
1196 SHADER_FUNC1 (log2)
1197 SHADER_FUNC2_(matrix_comp_mult, matrixCompMult)
1198 SHADER_FUNC2 (max)
1199 SHADER_FUNC2 (min)
1200 SHADER_FUNC3 (mix)
1201 SHADER_FUNC2 (mod)
1202 SHADER_FUNC1 (noise1)
1203 SHADER_FUNC1 (noise2)
1204 SHADER_FUNC1 (noise3)
1205 SHADER_FUNC1 (noise4)
1206 SHADER_FUNC1 (normalize)
1207 SHADER_FUNC1 (gl_not) // TODO
1208 SHADER_FUNC2_(notequal, notEqual)
1209 SHADER_FUNC2 (pow)
1210 SHADER_FUNC1 (radians)
1211 SHADER_FUNC2 (reflect)
1212 SHADER_FUNC3 (refract)
1213 SHADER_FUNC2_(shadow_1d, shadow1D)
1214 SHADER_FUNC3_(shadow_1d, shadow1D)
1215 SHADER_FUNC3_(shadow_1d_lod, shadow1DLod)
1216 SHADER_FUNC2_(shadow_1d_proj, shadow1DProj)
1217 SHADER_FUNC3_(shadow_1d_proj, shadow1DProj)
1218 SHADER_FUNC3_(shadow_1d_proj_lod, shadow1DProjLod)
1219 SHADER_FUNC2_(shadow_2d, shadow2D)
1220 SHADER_FUNC3_(shadow_2d, shadow2D)
1221 SHADER_FUNC3_(shadow_2d_lod, shadow2DLod)
1222 SHADER_FUNC2_(shadow_2d_proj, shadow2DProj)
1223 SHADER_FUNC3_(shadow_2d_proj, shadow2DProj)
1224 SHADER_FUNC3_(shadow_2d_proj_lod, shadow2DProjLod)
1225 SHADER_FUNC1 (sign)
1226 SHADER_FUNC1 (sin)
1227 SHADER_FUNC3 (smoothstep)
1228 SHADER_FUNC1 (sqrt)
1229 SHADER_FUNC2 (step)
1230 SHADER_FUNC1 (tan)
1231 SHADER_FUNC2_(texture_1d, texture1D)
1232 SHADER_FUNC3_(texture_1d, texture1D)
1233 SHADER_FUNC3_(texture_1d_lod, texture1DLod)
1234 SHADER_FUNC2_(texture_1d_proj, texture1DProj)
1235 SHADER_FUNC3_(texture_1d_proj, texture1DProj)
1236 SHADER_FUNC3_(texture_1d_proj_lod, texture1DProjLod)
1237 SHADER_FUNC2_(texture_2d, texture2D)
1238 SHADER_FUNC3_(texture_2d, texture2D)
1239 SHADER_FUNC3_(texture_2d_lod, texture2DLod)
1240 SHADER_FUNC2_(texture_2d_proj, texture2DProj)
1241 SHADER_FUNC3_(texture_2d_proj, texture2DProj)
1242 SHADER_FUNC3_(texture_2d_proj_lod, texture2DProjLod)
1243 SHADER_FUNC2_(texture_3d, texture3D)
1244 SHADER_FUNC3_(texture_3d, texture3D)
1245 SHADER_FUNC3_(texture_3d_lod, texture3DLod)
1246 SHADER_FUNC2_(texture_3d_proj, texture3DProj)
1247 SHADER_FUNC3_(texture_3d_proj, texture3DProj)
1248 SHADER_FUNC3_(texture_3d_proj_lod, texture3DProjLod)
1249 SHADER_FUNC2_(texture_cube, textureCube)
1250 SHADER_FUNC3_(texture_cube, textureCube)
1251 SHADER_FUNC3_(texture_cude_lod, textureCubeLod)
1252 SHADER_FUNC1 (vec2) SHADER_FUNC2 (vec2)
1253 SHADER_FUNC1 (vec3) SHADER_FUNC2 (vec3) SHADER_FUNC3 (vec3)
1254 SHADER_FUNC1 (vec4) SHADER_FUNC2 (vec4) SHADER_FUNC3 (vec4) SHADER_FUNC4 (vec4)
1255 SHADER_FUNC1 (mat2) SHADER_FUNC2 (mat2)
1256 SHADER_FUNC1 (mat3) SHADER_FUNC2 (mat3) SHADER_FUNC3 (mat3)
1257 SHADER_FUNC1 (mat4) SHADER_FUNC2 (mat4) SHADER_FUNC3 (mat4) SHADER_FUNC4 (mat4)
1258
1259# undef SHADER_FUNC0
1260# undef SHADER_FUNC0_
1261# undef SHADER_FUNC1
1262# undef SHADER_FUNC1_
1263# undef SHADER_FUNC2
1264# undef SHADER_FUNC2_
1265# undef SHADER_FUNC3
1266# undef SHADER_FUNC3_
1267# undef SHADER_FUNC4
1268# undef SHADER_FUNC5_
991 } 1269 }
992
993# define SHADER_SWIZZLE_OP(abcd,type) \
994 template<typename T> \
995 inline const sl_expr< sl_concat3< sl_append_const_string, \
996 typename sl_convert<T>::T, \
997 sl_string<7> \
998 > > \
999 type (const T &t) \
1000 { \
1001 return swizzle (t, (abcd / 1000) % 5, (abcd / 100) % 5, (abcd / 10) % 5, (abcd / 1) % 5); \
1002 }
1003
1004 // brute force is lovely, ain't it?
1005 SHADER_SWIZZLE_OP (1 , x ) SHADER_SWIZZLE_OP (11 , xx ) SHADER_SWIZZLE_OP (111 , xxx ) SHADER_SWIZZLE_OP (1111, xxxx)
1006 SHADER_SWIZZLE_OP (1112, xxxy) SHADER_SWIZZLE_OP (1113, xxxz) SHADER_SWIZZLE_OP (1114, xxxw) SHADER_SWIZZLE_OP (112 , xxy )
1007 SHADER_SWIZZLE_OP (1121, xxyx) SHADER_SWIZZLE_OP (1122, xxyy) SHADER_SWIZZLE_OP (1123, xxyz) SHADER_SWIZZLE_OP (1124, xxyw)
1008 SHADER_SWIZZLE_OP (113 , xxz ) SHADER_SWIZZLE_OP (1131, xxzx) SHADER_SWIZZLE_OP (1132, xxzy) SHADER_SWIZZLE_OP (1133, xxzz)
1009 SHADER_SWIZZLE_OP (1134, xxzw) SHADER_SWIZZLE_OP (114 , xxw ) SHADER_SWIZZLE_OP (1141, xxwx) SHADER_SWIZZLE_OP (1142, xxwy)
1010 SHADER_SWIZZLE_OP (1143, xxwz) SHADER_SWIZZLE_OP (1144, xxww) SHADER_SWIZZLE_OP (12 , xy ) SHADER_SWIZZLE_OP (121 , xyx )
1011 SHADER_SWIZZLE_OP (1211, xyxx) SHADER_SWIZZLE_OP (1212, xyxy) SHADER_SWIZZLE_OP (1213, xyxz) SHADER_SWIZZLE_OP (1214, xyxw)
1012 SHADER_SWIZZLE_OP (122 , xyy ) SHADER_SWIZZLE_OP (1221, xyyx) SHADER_SWIZZLE_OP (1222, xyyy) SHADER_SWIZZLE_OP (1223, xyyz)
1013 SHADER_SWIZZLE_OP (1224, xyyw) SHADER_SWIZZLE_OP (123 , xyz ) SHADER_SWIZZLE_OP (1231, xyzx) SHADER_SWIZZLE_OP (1232, xyzy)
1014 SHADER_SWIZZLE_OP (1233, xyzz) SHADER_SWIZZLE_OP (1234, xyzw) SHADER_SWIZZLE_OP (124 , xyw ) SHADER_SWIZZLE_OP (1241, xywx)
1015 SHADER_SWIZZLE_OP (1242, xywy) SHADER_SWIZZLE_OP (1243, xywz) SHADER_SWIZZLE_OP (1244, xyww) SHADER_SWIZZLE_OP (13 , xz )
1016 SHADER_SWIZZLE_OP (131 , xzx ) SHADER_SWIZZLE_OP (1311, xzxx) SHADER_SWIZZLE_OP (1312, xzxy) SHADER_SWIZZLE_OP (1313, xzxz)
1017 SHADER_SWIZZLE_OP (1314, xzxw) SHADER_SWIZZLE_OP (132 , xzy ) SHADER_SWIZZLE_OP (1321, xzyx) SHADER_SWIZZLE_OP (1322, xzyy)
1018 SHADER_SWIZZLE_OP (1323, xzyz) SHADER_SWIZZLE_OP (1324, xzyw) SHADER_SWIZZLE_OP (133 , xzz ) SHADER_SWIZZLE_OP (1331, xzzx)
1019 SHADER_SWIZZLE_OP (1332, xzzy) SHADER_SWIZZLE_OP (1333, xzzz) SHADER_SWIZZLE_OP (1334, xzzw) SHADER_SWIZZLE_OP (134 , xzw )
1020 SHADER_SWIZZLE_OP (1341, xzwx) SHADER_SWIZZLE_OP (1342, xzwy) SHADER_SWIZZLE_OP (1343, xzwz) SHADER_SWIZZLE_OP (1344, xzww)
1021 SHADER_SWIZZLE_OP (14 , xw ) SHADER_SWIZZLE_OP (141 , xwx ) SHADER_SWIZZLE_OP (1411, xwxx) SHADER_SWIZZLE_OP (1412, xwxy)
1022 SHADER_SWIZZLE_OP (1413, xwxz) SHADER_SWIZZLE_OP (1414, xwxw) SHADER_SWIZZLE_OP (142 , xwy ) SHADER_SWIZZLE_OP (1421, xwyx)
1023 SHADER_SWIZZLE_OP (1422, xwyy) SHADER_SWIZZLE_OP (1423, xwyz) SHADER_SWIZZLE_OP (1424, xwyw) SHADER_SWIZZLE_OP (143 , xwz )
1024 SHADER_SWIZZLE_OP (1431, xwzx) SHADER_SWIZZLE_OP (1432, xwzy) SHADER_SWIZZLE_OP (1433, xwzz) SHADER_SWIZZLE_OP (1434, xwzw)
1025 SHADER_SWIZZLE_OP (144 , xww ) SHADER_SWIZZLE_OP (1441, xwwx) SHADER_SWIZZLE_OP (1442, xwwy) SHADER_SWIZZLE_OP (1443, xwwz)
1026 SHADER_SWIZZLE_OP (1444, xwww) SHADER_SWIZZLE_OP (2 , y ) SHADER_SWIZZLE_OP (21 , yx ) SHADER_SWIZZLE_OP (211 , yxx )
1027 SHADER_SWIZZLE_OP (2111, yxxx) SHADER_SWIZZLE_OP (2112, yxxy) SHADER_SWIZZLE_OP (2113, yxxz) SHADER_SWIZZLE_OP (2114, yxxw)
1028 SHADER_SWIZZLE_OP (212 , yxy ) SHADER_SWIZZLE_OP (2121, yxyx) SHADER_SWIZZLE_OP (2122, yxyy) SHADER_SWIZZLE_OP (2123, yxyz)
1029 SHADER_SWIZZLE_OP (2124, yxyw) SHADER_SWIZZLE_OP (213 , yxz ) SHADER_SWIZZLE_OP (2131, yxzx) SHADER_SWIZZLE_OP (2132, yxzy)
1030 SHADER_SWIZZLE_OP (2133, yxzz) SHADER_SWIZZLE_OP (2134, yxzw) SHADER_SWIZZLE_OP (214 , yxw ) SHADER_SWIZZLE_OP (2141, yxwx)
1031 SHADER_SWIZZLE_OP (2142, yxwy) SHADER_SWIZZLE_OP (2143, yxwz) SHADER_SWIZZLE_OP (2144, yxww) SHADER_SWIZZLE_OP (22 , yy )
1032 SHADER_SWIZZLE_OP (221 , yyx ) SHADER_SWIZZLE_OP (2211, yyxx) SHADER_SWIZZLE_OP (2212, yyxy) SHADER_SWIZZLE_OP (2213, yyxz)
1033 SHADER_SWIZZLE_OP (2214, yyxw) SHADER_SWIZZLE_OP (222 , yyy ) SHADER_SWIZZLE_OP (2221, yyyx) SHADER_SWIZZLE_OP (2222, yyyy)
1034 SHADER_SWIZZLE_OP (2223, yyyz) SHADER_SWIZZLE_OP (2224, yyyw) SHADER_SWIZZLE_OP (223 , yyz ) SHADER_SWIZZLE_OP (2231, yyzx)
1035 SHADER_SWIZZLE_OP (2232, yyzy) SHADER_SWIZZLE_OP (2233, yyzz) SHADER_SWIZZLE_OP (2234, yyzw) SHADER_SWIZZLE_OP (224 , yyw )
1036 SHADER_SWIZZLE_OP (2241, yywx) SHADER_SWIZZLE_OP (2242, yywy) SHADER_SWIZZLE_OP (2243, yywz) SHADER_SWIZZLE_OP (2244, yyww)
1037 SHADER_SWIZZLE_OP (23 , yz ) SHADER_SWIZZLE_OP (231 , yzx ) SHADER_SWIZZLE_OP (2311, yzxx) SHADER_SWIZZLE_OP (2312, yzxy)
1038 SHADER_SWIZZLE_OP (2313, yzxz) SHADER_SWIZZLE_OP (2314, yzxw) SHADER_SWIZZLE_OP (232 , yzy ) SHADER_SWIZZLE_OP (2321, yzyx)
1039 SHADER_SWIZZLE_OP (2322, yzyy) SHADER_SWIZZLE_OP (2323, yzyz) SHADER_SWIZZLE_OP (2324, yzyw) SHADER_SWIZZLE_OP (233 , yzz )
1040 SHADER_SWIZZLE_OP (2331, yzzx) SHADER_SWIZZLE_OP (2332, yzzy) SHADER_SWIZZLE_OP (2333, yzzz) SHADER_SWIZZLE_OP (2334, yzzw)
1041 SHADER_SWIZZLE_OP (234 , yzw ) SHADER_SWIZZLE_OP (2341, yzwx) SHADER_SWIZZLE_OP (2342, yzwy) SHADER_SWIZZLE_OP (2343, yzwz)
1042 SHADER_SWIZZLE_OP (2344, yzww) SHADER_SWIZZLE_OP (24 , yw ) SHADER_SWIZZLE_OP (241 , ywx ) SHADER_SWIZZLE_OP (2411, ywxx)
1043 SHADER_SWIZZLE_OP (2412, ywxy) SHADER_SWIZZLE_OP (2413, ywxz) SHADER_SWIZZLE_OP (2414, ywxw) SHADER_SWIZZLE_OP (242 , ywy )
1044 SHADER_SWIZZLE_OP (2421, ywyx) SHADER_SWIZZLE_OP (2422, ywyy) SHADER_SWIZZLE_OP (2423, ywyz) SHADER_SWIZZLE_OP (2424, ywyw)
1045 SHADER_SWIZZLE_OP (243 , ywz ) SHADER_SWIZZLE_OP (2431, ywzx) SHADER_SWIZZLE_OP (2432, ywzy) SHADER_SWIZZLE_OP (2433, ywzz)
1046 SHADER_SWIZZLE_OP (2434, ywzw) SHADER_SWIZZLE_OP (244 , yww ) SHADER_SWIZZLE_OP (2441, ywwx) SHADER_SWIZZLE_OP (2442, ywwy)
1047 SHADER_SWIZZLE_OP (2443, ywwz) SHADER_SWIZZLE_OP (2444, ywww) SHADER_SWIZZLE_OP (3 , z ) SHADER_SWIZZLE_OP (31 , zx )
1048 SHADER_SWIZZLE_OP (311 , zxx ) SHADER_SWIZZLE_OP (3111, zxxx) SHADER_SWIZZLE_OP (3112, zxxy) SHADER_SWIZZLE_OP (3113, zxxz)
1049 SHADER_SWIZZLE_OP (3114, zxxw) SHADER_SWIZZLE_OP (312 , zxy ) SHADER_SWIZZLE_OP (3121, zxyx) SHADER_SWIZZLE_OP (3122, zxyy)
1050 SHADER_SWIZZLE_OP (3123, zxyz) SHADER_SWIZZLE_OP (3124, zxyw) SHADER_SWIZZLE_OP (313 , zxz ) SHADER_SWIZZLE_OP (3131, zxzx)
1051 SHADER_SWIZZLE_OP (3132, zxzy) SHADER_SWIZZLE_OP (3133, zxzz) SHADER_SWIZZLE_OP (3134, zxzw) SHADER_SWIZZLE_OP (314 , zxw )
1052 SHADER_SWIZZLE_OP (3141, zxwx) SHADER_SWIZZLE_OP (3142, zxwy) SHADER_SWIZZLE_OP (3143, zxwz) SHADER_SWIZZLE_OP (3144, zxww)
1053 SHADER_SWIZZLE_OP (32 , zy ) SHADER_SWIZZLE_OP (321 , zyx ) SHADER_SWIZZLE_OP (3211, zyxx) SHADER_SWIZZLE_OP (3212, zyxy)
1054 SHADER_SWIZZLE_OP (3213, zyxz) SHADER_SWIZZLE_OP (3214, zyxw) SHADER_SWIZZLE_OP (322 , zyy ) SHADER_SWIZZLE_OP (3221, zyyx)
1055 SHADER_SWIZZLE_OP (3222, zyyy) SHADER_SWIZZLE_OP (3223, zyyz) SHADER_SWIZZLE_OP (3224, zyyw) SHADER_SWIZZLE_OP (323 , zyz )
1056 SHADER_SWIZZLE_OP (3231, zyzx) SHADER_SWIZZLE_OP (3232, zyzy) SHADER_SWIZZLE_OP (3233, zyzz) SHADER_SWIZZLE_OP (3234, zyzw)
1057 SHADER_SWIZZLE_OP (324 , zyw ) SHADER_SWIZZLE_OP (3241, zywx) SHADER_SWIZZLE_OP (3242, zywy) SHADER_SWIZZLE_OP (3243, zywz)
1058 SHADER_SWIZZLE_OP (3244, zyww) SHADER_SWIZZLE_OP (33 , zz ) SHADER_SWIZZLE_OP (331 , zzx ) SHADER_SWIZZLE_OP (3311, zzxx)
1059 SHADER_SWIZZLE_OP (3312, zzxy) SHADER_SWIZZLE_OP (3313, zzxz) SHADER_SWIZZLE_OP (3314, zzxw) SHADER_SWIZZLE_OP (332 , zzy )
1060 SHADER_SWIZZLE_OP (3321, zzyx) SHADER_SWIZZLE_OP (3322, zzyy) SHADER_SWIZZLE_OP (3323, zzyz) SHADER_SWIZZLE_OP (3324, zzyw)
1061 SHADER_SWIZZLE_OP (333 , zzz ) SHADER_SWIZZLE_OP (3331, zzzx) SHADER_SWIZZLE_OP (3332, zzzy) SHADER_SWIZZLE_OP (3333, zzzz)
1062 SHADER_SWIZZLE_OP (3334, zzzw) SHADER_SWIZZLE_OP (334 , zzw ) SHADER_SWIZZLE_OP (3341, zzwx) SHADER_SWIZZLE_OP (3342, zzwy)
1063 SHADER_SWIZZLE_OP (3343, zzwz) SHADER_SWIZZLE_OP (3344, zzww) SHADER_SWIZZLE_OP (34 , zw ) SHADER_SWIZZLE_OP (341 , zwx )
1064 SHADER_SWIZZLE_OP (3411, zwxx) SHADER_SWIZZLE_OP (3412, zwxy) SHADER_SWIZZLE_OP (3413, zwxz) SHADER_SWIZZLE_OP (3414, zwxw)
1065 SHADER_SWIZZLE_OP (342 , zwy ) SHADER_SWIZZLE_OP (3421, zwyx) SHADER_SWIZZLE_OP (3422, zwyy) SHADER_SWIZZLE_OP (3423, zwyz)
1066 SHADER_SWIZZLE_OP (3424, zwyw) SHADER_SWIZZLE_OP (343 , zwz ) SHADER_SWIZZLE_OP (3431, zwzx) SHADER_SWIZZLE_OP (3432, zwzy)
1067 SHADER_SWIZZLE_OP (3433, zwzz) SHADER_SWIZZLE_OP (3434, zwzw) SHADER_SWIZZLE_OP (344 , zww ) SHADER_SWIZZLE_OP (3441, zwwx)
1068 SHADER_SWIZZLE_OP (3442, zwwy) SHADER_SWIZZLE_OP (3443, zwwz) SHADER_SWIZZLE_OP (3444, zwww) SHADER_SWIZZLE_OP (4 , w )
1069 SHADER_SWIZZLE_OP (41 , wx ) SHADER_SWIZZLE_OP (411 , wxx ) SHADER_SWIZZLE_OP (4111, wxxx) SHADER_SWIZZLE_OP (4112, wxxy)
1070 SHADER_SWIZZLE_OP (4113, wxxz) SHADER_SWIZZLE_OP (4114, wxxw) SHADER_SWIZZLE_OP (412 , wxy ) SHADER_SWIZZLE_OP (4121, wxyx)
1071 SHADER_SWIZZLE_OP (4122, wxyy) SHADER_SWIZZLE_OP (4123, wxyz) SHADER_SWIZZLE_OP (4124, wxyw) SHADER_SWIZZLE_OP (413 , wxz )
1072 SHADER_SWIZZLE_OP (4131, wxzx) SHADER_SWIZZLE_OP (4132, wxzy) SHADER_SWIZZLE_OP (4133, wxzz) SHADER_SWIZZLE_OP (4134, wxzw)
1073 SHADER_SWIZZLE_OP (414 , wxw ) SHADER_SWIZZLE_OP (4141, wxwx) SHADER_SWIZZLE_OP (4142, wxwy) SHADER_SWIZZLE_OP (4143, wxwz)
1074 SHADER_SWIZZLE_OP (4144, wxww) SHADER_SWIZZLE_OP (42 , wy ) SHADER_SWIZZLE_OP (421 , wyx ) SHADER_SWIZZLE_OP (4211, wyxx)
1075 SHADER_SWIZZLE_OP (4212, wyxy) SHADER_SWIZZLE_OP (4213, wyxz) SHADER_SWIZZLE_OP (4214, wyxw) SHADER_SWIZZLE_OP (422 , wyy )
1076 SHADER_SWIZZLE_OP (4221, wyyx) SHADER_SWIZZLE_OP (4222, wyyy) SHADER_SWIZZLE_OP (4223, wyyz) SHADER_SWIZZLE_OP (4224, wyyw)
1077 SHADER_SWIZZLE_OP (423 , wyz ) SHADER_SWIZZLE_OP (4231, wyzx) SHADER_SWIZZLE_OP (4232, wyzy) SHADER_SWIZZLE_OP (4233, wyzz)
1078 SHADER_SWIZZLE_OP (4234, wyzw) SHADER_SWIZZLE_OP (424 , wyw ) SHADER_SWIZZLE_OP (4241, wywx) SHADER_SWIZZLE_OP (4242, wywy)
1079 SHADER_SWIZZLE_OP (4243, wywz) SHADER_SWIZZLE_OP (4244, wyww) SHADER_SWIZZLE_OP (43 , wz ) SHADER_SWIZZLE_OP (431 , wzx )
1080 SHADER_SWIZZLE_OP (4311, wzxx) SHADER_SWIZZLE_OP (4312, wzxy) SHADER_SWIZZLE_OP (4313, wzxz) SHADER_SWIZZLE_OP (4314, wzxw)
1081 SHADER_SWIZZLE_OP (432 , wzy ) SHADER_SWIZZLE_OP (4321, wzyx) SHADER_SWIZZLE_OP (4322, wzyy) SHADER_SWIZZLE_OP (4323, wzyz)
1082 SHADER_SWIZZLE_OP (4324, wzyw) SHADER_SWIZZLE_OP (433 , wzz ) SHADER_SWIZZLE_OP (4331, wzzx) SHADER_SWIZZLE_OP (4332, wzzy)
1083 SHADER_SWIZZLE_OP (4333, wzzz) SHADER_SWIZZLE_OP (4334, wzzw) SHADER_SWIZZLE_OP (434 , wzw ) SHADER_SWIZZLE_OP (4341, wzwx)
1084 SHADER_SWIZZLE_OP (4342, wzwy) SHADER_SWIZZLE_OP (4343, wzwz) SHADER_SWIZZLE_OP (4344, wzww) SHADER_SWIZZLE_OP (44 , ww )
1085 SHADER_SWIZZLE_OP (441 , wwx ) SHADER_SWIZZLE_OP (4411, wwxx) SHADER_SWIZZLE_OP (4412, wwxy) SHADER_SWIZZLE_OP (4413, wwxz)
1086 SHADER_SWIZZLE_OP (4414, wwxw) SHADER_SWIZZLE_OP (442 , wwy ) SHADER_SWIZZLE_OP (4421, wwyx) SHADER_SWIZZLE_OP (4422, wwyy)
1087 SHADER_SWIZZLE_OP (4423, wwyz) SHADER_SWIZZLE_OP (4424, wwyw) SHADER_SWIZZLE_OP (443 , wwz ) SHADER_SWIZZLE_OP (4431, wwzx)
1088 SHADER_SWIZZLE_OP (4432, wwzy) SHADER_SWIZZLE_OP (4433, wwzz) SHADER_SWIZZLE_OP (4434, wwzw) SHADER_SWIZZLE_OP (444 , www )
1089 SHADER_SWIZZLE_OP (4441, wwwx) SHADER_SWIZZLE_OP (4442, wwwy) SHADER_SWIZZLE_OP (4443, wwwz) SHADER_SWIZZLE_OP (4444, wwww)
1090
1091# undef SHADER_SWIZZLE_OP
1092
1093# define SHADER_FUNC0_(name, glname) \
1094 template<typename A> \
1095 inline const sl_expr<sl_func0> \
1096 name () \
1097 { \
1098 return sl_func0 (#glname " ("); \
1099 }
1100
1101# define SHADER_FUNC0(name) SHADER_FUNC0_(name,name)
1102
1103# define SHADER_FUNC1_(name, glname) \
1104 template<typename A> \
1105 inline const sl_expr< sl_func1<typename sl_convert<A>::T> > \
1106 name (const A &a) \
1107 { \
1108 return sl_func1<typename sl_convert<A>::T> (#glname " (", sl_convert<A>::convert (a));\
1109 }
1110
1111# define SHADER_FUNC1(name) SHADER_FUNC1_(name,name)
1112
1113# define SHADER_FUNC2_(name, glname) \
1114 template<typename A, typename B> \
1115 inline const sl_expr< sl_func2<typename sl_convert<A>::T, typename sl_convert<B>::T> > \
1116 name (const A &a, const B &b) \
1117 { \
1118 return sl_func2<typename sl_convert<A>::T, typename sl_convert<B>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b));\
1119 }
1120
1121# define SHADER_FUNC2(name) SHADER_FUNC2_(name,name)
1122
1123# define SHADER_FUNC3_(name, glname) \
1124 template<typename A, typename B, typename C> \
1125 inline const sl_expr< sl_func3<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T> > \
1126 name (const A &a, const B &b, const C &c) \
1127 { \
1128 return sl_func3<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b), sl_convert<C>::convert (c));\
1129 }
1130
1131# define SHADER_FUNC3(name) SHADER_FUNC3_(name,name)
1132
1133# define SHADER_FUNC4_(name, glname) \
1134 template<typename A, typename B, typename C, typename D> \
1135 inline const sl_expr< sl_func4<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T, typename sl_convert<D>::T > > \
1136 name (const A &a, const B &b, const C &c, const D &d) \
1137 { \
1138 return sl_func4<typename sl_convert<A>::T, typename sl_convert<B>::T, typename sl_convert<C>::T, typename sl_convert<D>::T> (#glname " (", sl_convert<A>::convert (a), sl_convert<B>::convert (b), sl_convert<C>::convert (c), sl_convert<D>::convert (d));\
1139 }
1140
1141# define SHADER_FUNC4(name) SHADER_FUNC4_(name,name)
1142
1143 SHADER_FUNC1 (abs)
1144 SHADER_FUNC1 (acos)
1145 SHADER_FUNC1 (all)
1146 SHADER_FUNC1 (any)
1147 SHADER_FUNC1 (asin)
1148 SHADER_FUNC1 (atan)
1149 SHADER_FUNC2 (atan)
1150 SHADER_FUNC1 (ceil)
1151 SHADER_FUNC3 (clamp)
1152 SHADER_FUNC1 (cos)
1153 SHADER_FUNC2 (cross)
1154 SHADER_FUNC1 (dFdx)
1155 SHADER_FUNC1 (dFdy)
1156 SHADER_FUNC1 (degrees)
1157 SHADER_FUNC2 (distance)
1158 SHADER_FUNC2 (dot)
1159 SHADER_FUNC2_(equal, equal)
1160 SHADER_FUNC1 (exp)
1161 SHADER_FUNC1 (exp2)
1162 SHADER_FUNC3 (faceforward)
1163 SHADER_FUNC1 (floor)
1164 SHADER_FUNC1 (fract)
1165 SHADER_FUNC0 (ftransform)
1166 SHADER_FUNC1 (fwidth)
1167 SHADER_FUNC2_(greater_than_equal, greaterThanEqual)
1168 SHADER_FUNC2_(greater_then, greaterThan)
1169 SHADER_FUNC1 (inversesqrt)
1170 SHADER_FUNC1 (length)
1171 SHADER_FUNC2_(less_than, lessThan)
1172 SHADER_FUNC2_(less_than_equal, lessThanEqual)
1173 SHADER_FUNC1 (log)
1174 SHADER_FUNC1 (log2)
1175 SHADER_FUNC2_(matrix_comp_mult, matrixCompMult)
1176 SHADER_FUNC2 (max)
1177 SHADER_FUNC2 (min)
1178 SHADER_FUNC3 (mix)
1179 SHADER_FUNC2 (mod)
1180 SHADER_FUNC1 (noise1)
1181 SHADER_FUNC1 (noise2)
1182 SHADER_FUNC1 (noise3)
1183 SHADER_FUNC1 (noise4)
1184 SHADER_FUNC1 (normalize)
1185 SHADER_FUNC1 (gl_not) // TODO
1186 SHADER_FUNC2_(notequal, notEqual)
1187 SHADER_FUNC2 (pow)
1188 SHADER_FUNC1 (radians)
1189 SHADER_FUNC2 (reflect)
1190 SHADER_FUNC3 (refract)
1191 SHADER_FUNC2_(shadow_1d, shadow1D)
1192 SHADER_FUNC3_(shadow_1d, shadow1D)
1193 SHADER_FUNC3_(shadow_1d_lod, shadow1DLod)
1194 SHADER_FUNC2_(shadow_1d_proj, shadow1DProj)
1195 SHADER_FUNC3_(shadow_1d_proj, shadow1DProj)
1196 SHADER_FUNC3_(shadow_1d_proj_lod, shadow1DProjLod)
1197 SHADER_FUNC2_(shadow_2d, shadow2D)
1198 SHADER_FUNC3_(shadow_2d, shadow2D)
1199 SHADER_FUNC3_(shadow_2d_lod, shadow2DLod)
1200 SHADER_FUNC2_(shadow_2d_proj, shadow2DProj)
1201 SHADER_FUNC3_(shadow_2d_proj, shadow2DProj)
1202 SHADER_FUNC3_(shadow_2d_proj_lod, shadow2DProjLod)
1203 SHADER_FUNC1 (sign)
1204 SHADER_FUNC1 (sin)
1205 SHADER_FUNC3 (smoothstep)
1206 SHADER_FUNC1 (sqrt)
1207 SHADER_FUNC2 (step)
1208 SHADER_FUNC1 (tan)
1209 SHADER_FUNC2_(texture_1d, texture1D)
1210 SHADER_FUNC3_(texture_1d, texture1D)
1211 SHADER_FUNC3_(texture_1d_lod, texture1DLod)
1212 SHADER_FUNC2_(texture_1d_proj, texture1DProj)
1213 SHADER_FUNC3_(texture_1d_proj, texture1DProj)
1214 SHADER_FUNC3_(texture_1d_proj_lod, texture1DProjLod)
1215 SHADER_FUNC2_(texture_2d, texture2D)
1216 SHADER_FUNC3_(texture_2d, texture2D)
1217 SHADER_FUNC3_(texture_2d_lod, texture2DLod)
1218 SHADER_FUNC2_(texture_2d_proj, texture2DProj)
1219 SHADER_FUNC3_(texture_2d_proj, texture2DProj)
1220 SHADER_FUNC3_(texture_2d_proj_lod, texture2DProjLod)
1221 SHADER_FUNC2_(texture_3d, texture3D)
1222 SHADER_FUNC3_(texture_3d, texture3D)
1223 SHADER_FUNC3_(texture_3d_lod, texture3DLod)
1224 SHADER_FUNC2_(texture_3d_proj, texture3DProj)
1225 SHADER_FUNC3_(texture_3d_proj, texture3DProj)
1226 SHADER_FUNC3_(texture_3d_proj_lod, texture3DProjLod)
1227 SHADER_FUNC2_(texture_cube, textureCube)
1228 SHADER_FUNC3_(texture_cube, textureCube)
1229 SHADER_FUNC3_(texture_cude_lod, textureCubeLod)
1230 SHADER_FUNC1 (vec2) SHADER_FUNC2 (vec2)
1231 SHADER_FUNC1 (vec3) SHADER_FUNC2 (vec3) SHADER_FUNC3 (vec3)
1232 SHADER_FUNC1 (vec4) SHADER_FUNC2 (vec4) SHADER_FUNC3 (vec4) SHADER_FUNC4 (vec4)
1233 SHADER_FUNC1 (mat2) SHADER_FUNC2 (mat2)
1234 SHADER_FUNC1 (mat3) SHADER_FUNC2 (mat3) SHADER_FUNC3 (mat3)
1235 SHADER_FUNC1 (mat4) SHADER_FUNC2 (mat4) SHADER_FUNC3 (mat4) SHADER_FUNC4 (mat4)
1236
1237# undef SHADER_FUNC0
1238# undef SHADER_FUNC0_
1239# undef SHADER_FUNC1
1240# undef SHADER_FUNC1_
1241# undef SHADER_FUNC2
1242# undef SHADER_FUNC2_
1243# undef SHADER_FUNC3
1244# undef SHADER_FUNC3_
1245# undef SHADER_FUNC4
1246# undef SHADER_FUNC5_
1247 1270
1248 void debdebdebdebug ();//D 1271 void debdebdebdebug ();//D
1249} 1272}
1250 1273
1251#endif 1274#endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines