… | |
… | |
15 | template<class T> |
15 | template<class T> |
16 | struct sl_expr { |
16 | struct sl_expr { |
17 | const T t; |
17 | const T t; |
18 | sl_expr (const T &t) : t(t) { } |
18 | sl_expr (const T &t) : t(t) { } |
19 | void operator ()() const { t (); } |
19 | void operator ()() const { t (); } |
|
|
20 | template<typename expr> |
|
|
21 | const sl_expr &operator =(const expr &e) const; |
20 | }; |
22 | }; |
21 | |
23 | |
22 | template<class A, class B> |
24 | template<class A, class B> |
23 | struct sl_concat2 |
25 | struct sl_concat2 |
24 | { |
26 | { |
… | |
… | |
46 | class refcounted |
48 | class refcounted |
47 | { |
49 | { |
48 | template<class type> friend class ref; |
50 | template<class type> friend class ref; |
49 | mutable int refcnt; |
51 | mutable int refcnt; |
50 | void refcnt_inc () const { refcnt++; } |
52 | void refcnt_inc () const { refcnt++; } |
51 | void refcnt_dec () const { if (!--refcnt) delete this; }; |
53 | void refcnt_dec () const; |
52 | public: |
54 | public: |
53 | refcounted () : refcnt(0) { } |
55 | refcounted () : refcnt(0) { } |
54 | virtual ~refcounted (); |
56 | virtual ~refcounted (); |
55 | }; |
57 | }; |
56 | |
58 | |
… | |
… | |
274 | |
276 | |
275 | struct uniform_matrix_2f_i : uniform_f_i< 4, str_mat2, cgGLSetMatrixParameterfc> { }; |
277 | struct uniform_matrix_2f_i : uniform_f_i< 4, str_mat2, cgGLSetMatrixParameterfc> { }; |
276 | struct uniform_matrix_3f_i : uniform_f_i< 9, str_mat3, cgGLSetMatrixParameterfc> { }; |
278 | struct uniform_matrix_3f_i : uniform_f_i< 9, str_mat3, cgGLSetMatrixParameterfc> { }; |
277 | struct uniform_matrix_4f_i : uniform_f_i<16, str_mat4, cgGLSetMatrixParameterfc> { }; |
279 | struct uniform_matrix_4f_i : uniform_f_i<16, str_mat4, cgGLSetMatrixParameterfc> { }; |
278 | |
280 | |
279 | template<class uniform_i> |
281 | template<class var_i> |
280 | struct uniform_ref : ref<uniform_i> |
282 | struct var_ref : ref<var_i> |
281 | { |
283 | { |
282 | uniform_ref (const char *glname = 0) |
284 | var_ref (const char *glname = 0) |
283 | : ref<uniform_i> (*new uniform_i) |
285 | : ref<var_i> (*new var_i) |
284 | { |
286 | { |
285 | if (glname) |
287 | if (glname) |
286 | strcpy ((*this)->name, glname); |
288 | strcpy ((*this)->name, glname); |
287 | } |
289 | } |
288 | }; |
290 | }; |
289 | |
291 | |
290 | typedef uniform_ref<uniform_1f_i> uniform_1f; |
292 | typedef var_ref<uniform_1f_i> uniform_1f; |
291 | typedef uniform_ref<uniform_2f_i> uniform_2f; |
293 | typedef var_ref<uniform_2f_i> uniform_2f; |
292 | typedef uniform_ref<uniform_3f_i> uniform_3f; |
294 | typedef var_ref<uniform_3f_i> uniform_3f; |
293 | typedef uniform_ref<uniform_4f_i> uniform_4f; |
295 | typedef var_ref<uniform_4f_i> uniform_4f; |
294 | typedef uniform_ref<uniform_matrix_2f_i> uniform_matrix_2f; |
296 | typedef var_ref<uniform_matrix_2f_i> uniform_matrix_2f; |
295 | typedef uniform_ref<uniform_matrix_3f_i> uniform_matrix_3f; |
297 | typedef var_ref<uniform_matrix_3f_i> uniform_matrix_3f; |
296 | typedef uniform_ref<uniform_matrix_4f_i> uniform_matrix_4f; |
298 | typedef var_ref<uniform_matrix_4f_i> uniform_matrix_4f; |
297 | |
299 | |
298 | struct stream_i : var_i |
300 | struct stream_i : var_i |
299 | { |
301 | { |
300 | void build (shader_builder &b); |
302 | void build (shader_builder &b); |
301 | void build_decl (ostringstream &b); |
303 | void build_decl (ostringstream &b); |
302 | stream_i (const char *strtype) : var_i (strtype) { } |
304 | stream_i (const char *strtype); |
303 | }; |
305 | }; |
304 | |
306 | |
305 | template<int dimension, GLenum gltype, const char *strtype> |
307 | template<int dimension, GLenum gltype, const char *strtype> |
306 | struct varying_i : stream_i |
308 | struct varying_i : stream_i |
307 | { |
309 | { |
308 | varying_i (const char *glname) |
310 | varying_i () : stream_i (strtype) { } |
309 | : stream_i (strtype) |
|
|
310 | { |
|
|
311 | strcpy (name, glname); |
|
|
312 | } |
|
|
313 | |
311 | |
314 | void set (GLsizei stride, GLvoid *ptr) |
312 | void set (GLsizei stride, GLvoid *ptr) |
315 | { |
313 | { |
316 | //cgGLSetParameterPointer (param, dimension, gltype, stride, ptr); |
314 | //cgGLSetParameterPointer (param, dimension, gltype, stride, ptr); |
317 | } |
315 | } |
318 | }; |
316 | }; |
319 | |
317 | |
320 | template<int dimension, const char *strtype> |
318 | template<int dimension, const char *strtype> |
321 | struct varying_f_i : varying_i<dimension, GL_FLOAT, strtype> |
319 | struct varying_f_i : varying_i<dimension, GL_FLOAT, strtype> |
322 | { |
320 | { |
323 | varying_f_i (const char *glname) : varying_i<dimension, GL_FLOAT, strtype> (glname) { } |
|
|
324 | |
|
|
325 | void set (const gl::vertex_buffer_object &vb, GLint offset) |
321 | void set (const gl::vertex_buffer_object &vb, GLint offset) |
326 | { |
322 | { |
327 | varying_i<dimension, GL_FLOAT, strtype>::set (gl::format_stride (vb.format), (GLvoid *)(long)offset); |
323 | varying_i<dimension, GL_FLOAT, strtype>::set (gl::format_stride (vb.format), (GLvoid *)(long)offset); |
328 | } |
324 | } |
329 | }; |
325 | }; |
330 | |
326 | |
331 | struct varying_1f_i : varying_f_i<1, str_float> |
327 | struct varying_1f_i : varying_f_i<1, str_float> |
332 | { |
328 | { |
333 | varying_1f_i (const char *glname) : varying_f_i<1, str_float> (glname) { } |
|
|
334 | }; |
329 | }; |
335 | |
330 | |
336 | struct varying_2f_i : varying_f_i<2, str_vec2> |
331 | struct varying_2f_i : varying_f_i<2, str_vec2> |
337 | { |
332 | { |
338 | varying_2f_i (const char *glname) : varying_f_i<2, str_vec2> (glname) { } |
|
|
339 | |
|
|
340 | void set_t (const gl::vertex_buffer_object &vb) |
333 | void set_t (const gl::vertex_buffer_object &vb) |
341 | { |
334 | { |
342 | set (vb, gl::format_offset_t (vb.format)); |
335 | set (vb, gl::format_offset_t (vb.format)); |
343 | } |
336 | } |
344 | }; |
337 | }; |
345 | |
338 | |
346 | struct varying_3f_i : varying_f_i<3, str_vec3> |
339 | struct varying_3f_i : varying_f_i<3, str_vec3> |
347 | { |
340 | { |
348 | varying_3f_i (const char *glname) : varying_f_i<3, str_vec3> (glname) { } |
|
|
349 | |
|
|
350 | void set_p (const gl::vertex_buffer_object &vb) |
341 | void set_p (const gl::vertex_buffer_object &vb) |
351 | { |
342 | { |
352 | set (vb, gl::format_offset_p (vb.format)); |
343 | set (vb, gl::format_offset_p (vb.format)); |
353 | } |
344 | } |
354 | |
345 | |
… | |
… | |
358 | } |
349 | } |
359 | }; |
350 | }; |
360 | |
351 | |
361 | struct varying_4f_i : varying_f_i<4, str_vec4> |
352 | struct varying_4f_i : varying_f_i<4, str_vec4> |
362 | { |
353 | { |
363 | varying_4f_i (const char *glname) : varying_f_i<4, str_vec4> (glname) { } |
|
|
364 | }; |
354 | }; |
365 | |
355 | |
366 | typedef auto_lvalue_ref1<varying_1f_i, const char *> varying_1f; |
356 | typedef var_ref<varying_1f_i> varying_1f; |
367 | typedef auto_lvalue_ref1<varying_2f_i, const char *> varying_2f; |
357 | typedef var_ref<varying_2f_i> varying_2f; |
368 | typedef auto_lvalue_ref1<varying_3f_i, const char *> varying_3f; |
358 | typedef var_ref<varying_3f_i> varying_3f; |
369 | typedef auto_lvalue_ref1<varying_4f_i, const char *> varying_4f; |
359 | typedef var_ref<varying_4f_i> varying_4f; |
370 | |
360 | |
371 | struct temporary_i : var_i |
361 | struct temporary_i : var_i |
372 | { |
362 | { |
373 | void build (shader_builder &b); |
363 | void build (shader_builder &b); |
374 | |
364 | |
… | |
… | |
501 | void append (const ref<fragment_i> &f) |
491 | void append (const ref<fragment_i> &f) |
502 | { |
492 | { |
503 | push_back (f); |
493 | push_back (f); |
504 | } |
494 | } |
505 | |
495 | |
|
|
496 | template<class expr> |
|
|
497 | void append (const sl_expr<expr> &e) |
|
|
498 | { |
|
|
499 | e (); |
|
|
500 | } |
|
|
501 | |
506 | void append_const (const char *s) |
502 | void append_const (const char *s) |
507 | { |
503 | { |
508 | push_back (*new fragment_const_string_i (s)); |
504 | push_back (*new fragment_const_string_i (s)); |
509 | } |
505 | } |
510 | |
506 | |
… | |
… | |
555 | }; |
551 | }; |
556 | |
552 | |
557 | typedef shader_object<GL_VERTEX_SHADER_ARB> vertex_shader; |
553 | typedef shader_object<GL_VERTEX_SHADER_ARB> vertex_shader; |
558 | typedef shader_object<GL_FRAGMENT_SHADER_ARB> fragment_shader; |
554 | typedef shader_object<GL_FRAGMENT_SHADER_ARB> fragment_shader; |
559 | |
555 | |
|
|
556 | template<typename T> |
|
|
557 | struct sl_append |
|
|
558 | { |
|
|
559 | T t; |
|
|
560 | |
|
|
561 | sl_append (const T &t) : t(t) { } |
|
|
562 | |
|
|
563 | void operator ()() const |
|
|
564 | { |
|
|
565 | cur->push_back (t); |
|
|
566 | } |
|
|
567 | }; |
|
|
568 | |
|
|
569 | template<int length> |
|
|
570 | struct sl_string |
|
|
571 | { |
|
|
572 | char str[length]; |
|
|
573 | |
|
|
574 | void operator ()() const |
|
|
575 | { |
|
|
576 | cur->push_back (*new fragment_string_i (str)); |
|
|
577 | } |
|
|
578 | }; |
|
|
579 | |
|
|
580 | struct sl_float |
|
|
581 | { |
|
|
582 | const GLfloat c; |
|
|
583 | |
|
|
584 | sl_float (GLfloat c) : c(c) { } |
|
|
585 | |
|
|
586 | void operator ()() const; |
|
|
587 | }; |
|
|
588 | |
|
|
589 | template<class A, class B> |
|
|
590 | inline sl_expr< sl_concat2<A, B> > |
|
|
591 | concat (const A &a, const B &b) |
|
|
592 | { |
|
|
593 | typedef sl_concat2<A, B> expr; |
|
|
594 | return sl_expr<expr> (expr (a, b)); |
|
|
595 | } |
|
|
596 | |
|
|
597 | template<class A, class B, class C> |
|
|
598 | inline sl_expr< sl_concat3<A, B, C> > |
|
|
599 | concat (const A &a, const B &b, const C &c) |
|
|
600 | { |
|
|
601 | typedef sl_concat3<A, B, C> expr; |
|
|
602 | return sl_expr<expr> (expr (a, b, c)); |
|
|
603 | } |
|
|
604 | |
|
|
605 | template<class A, class B, class C, class D> |
|
|
606 | inline sl_expr< sl_concat4<A, B, C, D> > |
|
|
607 | concat (const A &a, const B &b, const C &c, const D &d) |
|
|
608 | { |
|
|
609 | typedef sl_concat4<A, B, C, D> expr; |
|
|
610 | return sl_expr<expr> (expr (a, b, c, d)); |
|
|
611 | } |
|
|
612 | |
|
|
613 | template<typename expr> |
|
|
614 | struct sl_convert |
|
|
615 | { |
|
|
616 | typedef sl_expr<expr> T; |
|
|
617 | static inline const T &convert (const T &e) |
|
|
618 | { |
|
|
619 | return e; |
|
|
620 | } |
|
|
621 | }; |
|
|
622 | |
|
|
623 | template<> |
|
|
624 | struct sl_convert<GLfloat> |
|
|
625 | { |
|
|
626 | typedef sl_expr<sl_float> T; |
|
|
627 | static inline const T convert (GLfloat f) |
|
|
628 | { |
|
|
629 | return sl_float (f); |
|
|
630 | } |
|
|
631 | }; |
|
|
632 | |
|
|
633 | template<> |
|
|
634 | struct sl_convert<GLdouble> |
|
|
635 | { |
|
|
636 | typedef sl_expr<sl_float> T; |
|
|
637 | static inline const T convert (GLdouble d) |
|
|
638 | { |
|
|
639 | return sl_float (d); |
|
|
640 | } |
|
|
641 | }; |
|
|
642 | |
|
|
643 | template<> |
|
|
644 | struct sl_convert<GLint> |
|
|
645 | { |
|
|
646 | typedef sl_expr<sl_float> T; |
|
|
647 | static inline const T convert (GLint i) |
|
|
648 | { |
|
|
649 | return sl_float (i); |
|
|
650 | } |
|
|
651 | }; |
|
|
652 | |
|
|
653 | template<> |
|
|
654 | struct sl_convert<vec2> |
|
|
655 | { |
|
|
656 | typedef sl_expr< sl_string<60> > T; |
|
|
657 | static const T convert (const vec2 &v); |
|
|
658 | }; |
|
|
659 | |
|
|
660 | template<> |
|
|
661 | struct sl_convert<vec3> |
|
|
662 | { |
|
|
663 | typedef sl_expr< sl_string<80> > T; |
|
|
664 | static const T convert (const vec3 &v); |
|
|
665 | }; |
|
|
666 | |
|
|
667 | template<> |
|
|
668 | struct sl_convert<vec4> |
|
|
669 | { |
|
|
670 | typedef sl_expr< sl_string<100> > T; |
|
|
671 | static const T convert (const vec4 &v); |
|
|
672 | }; |
|
|
673 | |
|
|
674 | template<> |
|
|
675 | template<class V> |
|
|
676 | struct sl_convert< var_ref<V> > |
|
|
677 | { |
|
|
678 | typedef sl_expr< sl_append< var_ref<V> > > T; |
|
|
679 | static inline const T convert (const var_ref<V> &v) |
|
|
680 | { |
|
|
681 | return sl_append< var_ref<V> > (v); |
|
|
682 | } |
|
|
683 | }; |
|
|
684 | |
|
|
685 | template<> |
|
|
686 | struct sl_convert<glvar> |
|
|
687 | { |
|
|
688 | typedef sl_expr< sl_append<glvar> > T; |
|
|
689 | static inline const T convert (const glvar &v) |
|
|
690 | { |
|
|
691 | return sl_append<glvar> (v); |
|
|
692 | } |
|
|
693 | }; |
|
|
694 | |
|
|
695 | template<> |
|
|
696 | template<const char *strtype> |
|
|
697 | struct sl_convert< temp_ref<strtype> > |
|
|
698 | { |
|
|
699 | typedef sl_expr< sl_append< temp_ref<strtype> > > T; |
|
|
700 | static inline const T convert (const temp_ref<strtype> &v) |
|
|
701 | { |
|
|
702 | return sl_expr< sl_append< temp_ref<strtype> > >( |
|
|
703 | sl_append< temp_ref<strtype> > (v) |
|
|
704 | ); |
|
|
705 | } |
|
|
706 | }; |
|
|
707 | |
|
|
708 | extern const fragment_const_string str_2sp; |
|
|
709 | extern const fragment_const_string str_equal; |
|
|
710 | extern const fragment_const_string str_endl; |
|
|
711 | |
|
|
712 | template<class fragment, typename expr> |
|
|
713 | inline void sl_assign (const fragment &f, const expr &e) |
|
|
714 | { |
|
|
715 | cur->append (str_2sp); |
|
|
716 | cur->append (f); |
|
|
717 | cur->append (str_equal); |
|
|
718 | sl_convert<expr>::convert (e) (); |
|
|
719 | cur->append (str_endl); |
|
|
720 | } |
|
|
721 | |
|
|
722 | template<class type> |
|
|
723 | template<typename expr> |
|
|
724 | inline const auto_lvalue_ref0<type> &auto_lvalue_ref0<type>::operator =(const expr &e) const |
|
|
725 | { |
|
|
726 | sl_assign (*this, e); |
|
|
727 | return *this; |
|
|
728 | } |
|
|
729 | |
|
|
730 | template<class type, typename arg1> |
|
|
731 | template<typename expr> |
|
|
732 | inline const auto_lvalue_ref1<type,arg1> &auto_lvalue_ref1<type,arg1>::operator =(const expr &e) const |
|
|
733 | { |
|
|
734 | sl_assign (*this, e); |
|
|
735 | return *this; |
|
|
736 | } |
|
|
737 | |
|
|
738 | template<class T> |
|
|
739 | template<typename expr> |
|
|
740 | inline const sl_expr<T> &sl_expr<T>::operator =(const expr &e) const |
|
|
741 | { |
|
|
742 | sl_assign (*this, e); |
|
|
743 | return *this; |
|
|
744 | } |
|
|
745 | |
|
|
746 | template<const char *strtype> |
|
|
747 | template<typename expr> |
|
|
748 | inline const temp_ref<strtype> &temp_ref<strtype>::operator =(const expr &e) const |
|
|
749 | { |
|
|
750 | sl_assign (*this, e); |
|
|
751 | return *this; |
|
|
752 | } |
|
|
753 | |
|
|
754 | struct sl_append_const_string |
|
|
755 | { |
|
|
756 | fragment_const_string str; |
|
|
757 | sl_append_const_string (const char *s) |
|
|
758 | : str (s) |
|
|
759 | { } |
|
|
760 | |
|
|
761 | void operator ()() const |
|
|
762 | { |
|
|
763 | cur->push_back (str); |
|
|
764 | } |
|
|
765 | }; |
|
|
766 | |
|
|
767 | # define SHADER_BINOP(op, str) \ |
|
|
768 | extern const sl_append_const_string str_ ## str; \ |
|
|
769 | template<typename A, typename B> \ |
|
|
770 | inline const sl_expr< sl_concat3< typename sl_convert<A>::T, \ |
|
|
771 | sl_append_const_string, \ |
|
|
772 | typename sl_convert<B>::T > > \ |
|
|
773 | operator op(const A &a, const B &b) \ |
|
|
774 | { \ |
|
|
775 | return concat (sl_convert<A>::convert (a), str_ ## str, sl_convert<B>::convert (b)); \ |
|
|
776 | } |
|
|
777 | |
|
|
778 | SHADER_BINOP (+, plus); |
|
|
779 | SHADER_BINOP (-, minus); |
|
|
780 | SHADER_BINOP (*, mul); |
|
|
781 | SHADER_BINOP (/, div); |
|
|
782 | |
|
|
783 | # undef SHADER_BINOP |
|
|
784 | |
|
|
785 | void swizzle_mask (sl_string<7> &s, int mask); |
|
|
786 | |
|
|
787 | extern const sl_append_const_string str_lpar; |
|
|
788 | extern const sl_append_const_string str_rpar; |
|
|
789 | |
|
|
790 | template<typename T> |
|
|
791 | inline const sl_expr< sl_concat3< sl_append_const_string, |
|
|
792 | typename sl_convert<T>::T, |
|
|
793 | sl_string<7> |
|
|
794 | > > |
|
|
795 | swizzle (const T &t, int a, int b = 0, int c = 0, int d = 0) |
|
|
796 | { |
|
|
797 | sl_string<7> s; |
|
|
798 | swizzle_mask (s, ((d * 5 + c) * 5 + b) * 5 + a); |
|
|
799 | return concat (str_lpar, sl_convert<T>::convert (t), s); |
|
|
800 | } |
|
|
801 | |
|
|
802 | # define SHADER_SWIZZLE_OP(abcd,type) \ |
|
|
803 | template<typename T> \ |
|
|
804 | inline const sl_expr< sl_concat3< sl_append_const_string, \ |
|
|
805 | typename sl_convert<T>::T, \ |
|
|
806 | sl_string<7> \ |
|
|
807 | > > \ |
|
|
808 | type (const T &t) \ |
|
|
809 | { \ |
|
|
810 | return swizzle (t, (abcd / 1000) % 5, (abcd / 100) % 5, (abcd / 10) % 5, (abcd / 1) % 5); \ |
|
|
811 | } |
|
|
812 | |
|
|
813 | // brute force is lovely, ain't it? |
|
|
814 | SHADER_SWIZZLE_OP (1 , x ) SHADER_SWIZZLE_OP (11 , xx ) SHADER_SWIZZLE_OP (111 , xxx ) SHADER_SWIZZLE_OP (1111, xxxx) |
|
|
815 | SHADER_SWIZZLE_OP (1112, xxxy) SHADER_SWIZZLE_OP (1113, xxxz) SHADER_SWIZZLE_OP (1114, xxxw) SHADER_SWIZZLE_OP (112 , xxy ) |
|
|
816 | SHADER_SWIZZLE_OP (1121, xxyx) SHADER_SWIZZLE_OP (1122, xxyy) SHADER_SWIZZLE_OP (1123, xxyz) SHADER_SWIZZLE_OP (1124, xxyw) |
|
|
817 | SHADER_SWIZZLE_OP (113 , xxz ) SHADER_SWIZZLE_OP (1131, xxzx) SHADER_SWIZZLE_OP (1132, xxzy) SHADER_SWIZZLE_OP (1133, xxzz) |
|
|
818 | SHADER_SWIZZLE_OP (1134, xxzw) SHADER_SWIZZLE_OP (114 , xxw ) SHADER_SWIZZLE_OP (1141, xxwx) SHADER_SWIZZLE_OP (1142, xxwy) |
|
|
819 | SHADER_SWIZZLE_OP (1143, xxwz) SHADER_SWIZZLE_OP (1144, xxww) SHADER_SWIZZLE_OP (12 , xy ) SHADER_SWIZZLE_OP (121 , xyx ) |
|
|
820 | SHADER_SWIZZLE_OP (1211, xyxx) SHADER_SWIZZLE_OP (1212, xyxy) SHADER_SWIZZLE_OP (1213, xyxz) SHADER_SWIZZLE_OP (1214, xyxw) |
|
|
821 | SHADER_SWIZZLE_OP (122 , xyy ) SHADER_SWIZZLE_OP (1221, xyyx) SHADER_SWIZZLE_OP (1222, xyyy) SHADER_SWIZZLE_OP (1223, xyyz) |
|
|
822 | SHADER_SWIZZLE_OP (1224, xyyw) SHADER_SWIZZLE_OP (123 , xyz ) SHADER_SWIZZLE_OP (1231, xyzx) SHADER_SWIZZLE_OP (1232, xyzy) |
|
|
823 | SHADER_SWIZZLE_OP (1233, xyzz) SHADER_SWIZZLE_OP (1234, xyzw) SHADER_SWIZZLE_OP (124 , xyw ) SHADER_SWIZZLE_OP (1241, xywx) |
|
|
824 | SHADER_SWIZZLE_OP (1242, xywy) SHADER_SWIZZLE_OP (1243, xywz) SHADER_SWIZZLE_OP (1244, xyww) SHADER_SWIZZLE_OP (13 , xz ) |
|
|
825 | SHADER_SWIZZLE_OP (131 , xzx ) SHADER_SWIZZLE_OP (1311, xzxx) SHADER_SWIZZLE_OP (1312, xzxy) SHADER_SWIZZLE_OP (1313, xzxz) |
|
|
826 | SHADER_SWIZZLE_OP (1314, xzxw) SHADER_SWIZZLE_OP (132 , xzy ) SHADER_SWIZZLE_OP (1321, xzyx) SHADER_SWIZZLE_OP (1322, xzyy) |
|
|
827 | SHADER_SWIZZLE_OP (1323, xzyz) SHADER_SWIZZLE_OP (1324, xzyw) SHADER_SWIZZLE_OP (133 , xzz ) SHADER_SWIZZLE_OP (1331, xzzx) |
|
|
828 | SHADER_SWIZZLE_OP (1332, xzzy) SHADER_SWIZZLE_OP (1333, xzzz) SHADER_SWIZZLE_OP (1334, xzzw) SHADER_SWIZZLE_OP (134 , xzw ) |
|
|
829 | SHADER_SWIZZLE_OP (1341, xzwx) SHADER_SWIZZLE_OP (1342, xzwy) SHADER_SWIZZLE_OP (1343, xzwz) SHADER_SWIZZLE_OP (1344, xzww) |
|
|
830 | SHADER_SWIZZLE_OP (14 , xw ) SHADER_SWIZZLE_OP (141 , xwx ) SHADER_SWIZZLE_OP (1411, xwxx) SHADER_SWIZZLE_OP (1412, xwxy) |
|
|
831 | SHADER_SWIZZLE_OP (1413, xwxz) SHADER_SWIZZLE_OP (1414, xwxw) SHADER_SWIZZLE_OP (142 , xwy ) SHADER_SWIZZLE_OP (1421, xwyx) |
|
|
832 | SHADER_SWIZZLE_OP (1422, xwyy) SHADER_SWIZZLE_OP (1423, xwyz) SHADER_SWIZZLE_OP (1424, xwyw) SHADER_SWIZZLE_OP (143 , xwz ) |
|
|
833 | SHADER_SWIZZLE_OP (1431, xwzx) SHADER_SWIZZLE_OP (1432, xwzy) SHADER_SWIZZLE_OP (1433, xwzz) SHADER_SWIZZLE_OP (1434, xwzw) |
|
|
834 | SHADER_SWIZZLE_OP (144 , xww ) SHADER_SWIZZLE_OP (1441, xwwx) SHADER_SWIZZLE_OP (1442, xwwy) SHADER_SWIZZLE_OP (1443, xwwz) |
|
|
835 | SHADER_SWIZZLE_OP (1444, xwww) SHADER_SWIZZLE_OP (2 , y ) SHADER_SWIZZLE_OP (21 , yx ) SHADER_SWIZZLE_OP (211 , yxx ) |
|
|
836 | SHADER_SWIZZLE_OP (2111, yxxx) SHADER_SWIZZLE_OP (2112, yxxy) SHADER_SWIZZLE_OP (2113, yxxz) SHADER_SWIZZLE_OP (2114, yxxw) |
|
|
837 | SHADER_SWIZZLE_OP (212 , yxy ) SHADER_SWIZZLE_OP (2121, yxyx) SHADER_SWIZZLE_OP (2122, yxyy) SHADER_SWIZZLE_OP (2123, yxyz) |
|
|
838 | SHADER_SWIZZLE_OP (2124, yxyw) SHADER_SWIZZLE_OP (213 , yxz ) SHADER_SWIZZLE_OP (2131, yxzx) SHADER_SWIZZLE_OP (2132, yxzy) |
|
|
839 | SHADER_SWIZZLE_OP (2133, yxzz) SHADER_SWIZZLE_OP (2134, yxzw) SHADER_SWIZZLE_OP (214 , yxw ) SHADER_SWIZZLE_OP (2141, yxwx) |
|
|
840 | SHADER_SWIZZLE_OP (2142, yxwy) SHADER_SWIZZLE_OP (2143, yxwz) SHADER_SWIZZLE_OP (2144, yxww) SHADER_SWIZZLE_OP (22 , yy ) |
|
|
841 | SHADER_SWIZZLE_OP (221 , yyx ) SHADER_SWIZZLE_OP (2211, yyxx) SHADER_SWIZZLE_OP (2212, yyxy) SHADER_SWIZZLE_OP (2213, yyxz) |
|
|
842 | SHADER_SWIZZLE_OP (2214, yyxw) SHADER_SWIZZLE_OP (222 , yyy ) SHADER_SWIZZLE_OP (2221, yyyx) SHADER_SWIZZLE_OP (2222, yyyy) |
|
|
843 | SHADER_SWIZZLE_OP (2223, yyyz) SHADER_SWIZZLE_OP (2224, yyyw) SHADER_SWIZZLE_OP (223 , yyz ) SHADER_SWIZZLE_OP (2231, yyzx) |
|
|
844 | SHADER_SWIZZLE_OP (2232, yyzy) SHADER_SWIZZLE_OP (2233, yyzz) SHADER_SWIZZLE_OP (2234, yyzw) SHADER_SWIZZLE_OP (224 , yyw ) |
|
|
845 | SHADER_SWIZZLE_OP (2241, yywx) SHADER_SWIZZLE_OP (2242, yywy) SHADER_SWIZZLE_OP (2243, yywz) SHADER_SWIZZLE_OP (2244, yyww) |
|
|
846 | SHADER_SWIZZLE_OP (23 , yz ) SHADER_SWIZZLE_OP (231 , yzx ) SHADER_SWIZZLE_OP (2311, yzxx) SHADER_SWIZZLE_OP (2312, yzxy) |
|
|
847 | SHADER_SWIZZLE_OP (2313, yzxz) SHADER_SWIZZLE_OP (2314, yzxw) SHADER_SWIZZLE_OP (232 , yzy ) SHADER_SWIZZLE_OP (2321, yzyx) |
|
|
848 | SHADER_SWIZZLE_OP (2322, yzyy) SHADER_SWIZZLE_OP (2323, yzyz) SHADER_SWIZZLE_OP (2324, yzyw) SHADER_SWIZZLE_OP (233 , yzz ) |
|
|
849 | SHADER_SWIZZLE_OP (2331, yzzx) SHADER_SWIZZLE_OP (2332, yzzy) SHADER_SWIZZLE_OP (2333, yzzz) SHADER_SWIZZLE_OP (2334, yzzw) |
|
|
850 | SHADER_SWIZZLE_OP (234 , yzw ) SHADER_SWIZZLE_OP (2341, yzwx) SHADER_SWIZZLE_OP (2342, yzwy) SHADER_SWIZZLE_OP (2343, yzwz) |
|
|
851 | SHADER_SWIZZLE_OP (2344, yzww) SHADER_SWIZZLE_OP (24 , yw ) SHADER_SWIZZLE_OP (241 , ywx ) SHADER_SWIZZLE_OP (2411, ywxx) |
|
|
852 | SHADER_SWIZZLE_OP (2412, ywxy) SHADER_SWIZZLE_OP (2413, ywxz) SHADER_SWIZZLE_OP (2414, ywxw) SHADER_SWIZZLE_OP (242 , ywy ) |
|
|
853 | SHADER_SWIZZLE_OP (2421, ywyx) SHADER_SWIZZLE_OP (2422, ywyy) SHADER_SWIZZLE_OP (2423, ywyz) SHADER_SWIZZLE_OP (2424, ywyw) |
|
|
854 | SHADER_SWIZZLE_OP (243 , ywz ) SHADER_SWIZZLE_OP (2431, ywzx) SHADER_SWIZZLE_OP (2432, ywzy) SHADER_SWIZZLE_OP (2433, ywzz) |
|
|
855 | SHADER_SWIZZLE_OP (2434, ywzw) SHADER_SWIZZLE_OP (244 , yww ) SHADER_SWIZZLE_OP (2441, ywwx) SHADER_SWIZZLE_OP (2442, ywwy) |
|
|
856 | SHADER_SWIZZLE_OP (2443, ywwz) SHADER_SWIZZLE_OP (2444, ywww) SHADER_SWIZZLE_OP (3 , z ) SHADER_SWIZZLE_OP (31 , zx ) |
|
|
857 | SHADER_SWIZZLE_OP (311 , zxx ) SHADER_SWIZZLE_OP (3111, zxxx) SHADER_SWIZZLE_OP (3112, zxxy) SHADER_SWIZZLE_OP (3113, zxxz) |
|
|
858 | SHADER_SWIZZLE_OP (3114, zxxw) SHADER_SWIZZLE_OP (312 , zxy ) SHADER_SWIZZLE_OP (3121, zxyx) SHADER_SWIZZLE_OP (3122, zxyy) |
|
|
859 | SHADER_SWIZZLE_OP (3123, zxyz) SHADER_SWIZZLE_OP (3124, zxyw) SHADER_SWIZZLE_OP (313 , zxz ) SHADER_SWIZZLE_OP (3131, zxzx) |
|
|
860 | SHADER_SWIZZLE_OP (3132, zxzy) SHADER_SWIZZLE_OP (3133, zxzz) SHADER_SWIZZLE_OP (3134, zxzw) SHADER_SWIZZLE_OP (314 , zxw ) |
|
|
861 | SHADER_SWIZZLE_OP (3141, zxwx) SHADER_SWIZZLE_OP (3142, zxwy) SHADER_SWIZZLE_OP (3143, zxwz) SHADER_SWIZZLE_OP (3144, zxww) |
|
|
862 | SHADER_SWIZZLE_OP (32 , zy ) SHADER_SWIZZLE_OP (321 , zyx ) SHADER_SWIZZLE_OP (3211, zyxx) SHADER_SWIZZLE_OP (3212, zyxy) |
|
|
863 | SHADER_SWIZZLE_OP (3213, zyxz) SHADER_SWIZZLE_OP (3214, zyxw) SHADER_SWIZZLE_OP (322 , zyy ) SHADER_SWIZZLE_OP (3221, zyyx) |
|
|
864 | SHADER_SWIZZLE_OP (3222, zyyy) SHADER_SWIZZLE_OP (3223, zyyz) SHADER_SWIZZLE_OP (3224, zyyw) SHADER_SWIZZLE_OP (323 , zyz ) |
|
|
865 | SHADER_SWIZZLE_OP (3231, zyzx) SHADER_SWIZZLE_OP (3232, zyzy) SHADER_SWIZZLE_OP (3233, zyzz) SHADER_SWIZZLE_OP (3234, zyzw) |
|
|
866 | SHADER_SWIZZLE_OP (324 , zyw ) SHADER_SWIZZLE_OP (3241, zywx) SHADER_SWIZZLE_OP (3242, zywy) SHADER_SWIZZLE_OP (3243, zywz) |
|
|
867 | SHADER_SWIZZLE_OP (3244, zyww) SHADER_SWIZZLE_OP (33 , zz ) SHADER_SWIZZLE_OP (331 , zzx ) SHADER_SWIZZLE_OP (3311, zzxx) |
|
|
868 | SHADER_SWIZZLE_OP (3312, zzxy) SHADER_SWIZZLE_OP (3313, zzxz) SHADER_SWIZZLE_OP (3314, zzxw) SHADER_SWIZZLE_OP (332 , zzy ) |
|
|
869 | SHADER_SWIZZLE_OP (3321, zzyx) SHADER_SWIZZLE_OP (3322, zzyy) SHADER_SWIZZLE_OP (3323, zzyz) SHADER_SWIZZLE_OP (3324, zzyw) |
|
|
870 | SHADER_SWIZZLE_OP (333 , zzz ) SHADER_SWIZZLE_OP (3331, zzzx) SHADER_SWIZZLE_OP (3332, zzzy) SHADER_SWIZZLE_OP (3333, zzzz) |
|
|
871 | SHADER_SWIZZLE_OP (3334, zzzw) SHADER_SWIZZLE_OP (334 , zzw ) SHADER_SWIZZLE_OP (3341, zzwx) SHADER_SWIZZLE_OP (3342, zzwy) |
|
|
872 | SHADER_SWIZZLE_OP (3343, zzwz) SHADER_SWIZZLE_OP (3344, zzww) SHADER_SWIZZLE_OP (34 , zw ) SHADER_SWIZZLE_OP (341 , zwx ) |
|
|
873 | SHADER_SWIZZLE_OP (3411, zwxx) SHADER_SWIZZLE_OP (3412, zwxy) SHADER_SWIZZLE_OP (3413, zwxz) SHADER_SWIZZLE_OP (3414, zwxw) |
|
|
874 | SHADER_SWIZZLE_OP (342 , zwy ) SHADER_SWIZZLE_OP (3421, zwyx) SHADER_SWIZZLE_OP (3422, zwyy) SHADER_SWIZZLE_OP (3423, zwyz) |
|
|
875 | SHADER_SWIZZLE_OP (3424, zwyw) SHADER_SWIZZLE_OP (343 , zwz ) SHADER_SWIZZLE_OP (3431, zwzx) SHADER_SWIZZLE_OP (3432, zwzy) |
|
|
876 | SHADER_SWIZZLE_OP (3433, zwzz) SHADER_SWIZZLE_OP (3434, zwzw) SHADER_SWIZZLE_OP (344 , zww ) SHADER_SWIZZLE_OP (3441, zwwx) |
|
|
877 | SHADER_SWIZZLE_OP (3442, zwwy) SHADER_SWIZZLE_OP (3443, zwwz) SHADER_SWIZZLE_OP (3444, zwww) SHADER_SWIZZLE_OP (4 , w ) |
|
|
878 | SHADER_SWIZZLE_OP (41 , wx ) SHADER_SWIZZLE_OP (411 , wxx ) SHADER_SWIZZLE_OP (4111, wxxx) SHADER_SWIZZLE_OP (4112, wxxy) |
|
|
879 | SHADER_SWIZZLE_OP (4113, wxxz) SHADER_SWIZZLE_OP (4114, wxxw) SHADER_SWIZZLE_OP (412 , wxy ) SHADER_SWIZZLE_OP (4121, wxyx) |
|
|
880 | SHADER_SWIZZLE_OP (4122, wxyy) SHADER_SWIZZLE_OP (4123, wxyz) SHADER_SWIZZLE_OP (4124, wxyw) SHADER_SWIZZLE_OP (413 , wxz ) |
|
|
881 | SHADER_SWIZZLE_OP (4131, wxzx) SHADER_SWIZZLE_OP (4132, wxzy) SHADER_SWIZZLE_OP (4133, wxzz) SHADER_SWIZZLE_OP (4134, wxzw) |
|
|
882 | SHADER_SWIZZLE_OP (414 , wxw ) SHADER_SWIZZLE_OP (4141, wxwx) SHADER_SWIZZLE_OP (4142, wxwy) SHADER_SWIZZLE_OP (4143, wxwz) |
|
|
883 | SHADER_SWIZZLE_OP (4144, wxww) SHADER_SWIZZLE_OP (42 , wy ) SHADER_SWIZZLE_OP (421 , wyx ) SHADER_SWIZZLE_OP (4211, wyxx) |
|
|
884 | SHADER_SWIZZLE_OP (4212, wyxy) SHADER_SWIZZLE_OP (4213, wyxz) SHADER_SWIZZLE_OP (4214, wyxw) SHADER_SWIZZLE_OP (422 , wyy ) |
|
|
885 | SHADER_SWIZZLE_OP (4221, wyyx) SHADER_SWIZZLE_OP (4222, wyyy) SHADER_SWIZZLE_OP (4223, wyyz) SHADER_SWIZZLE_OP (4224, wyyw) |
|
|
886 | SHADER_SWIZZLE_OP (423 , wyz ) SHADER_SWIZZLE_OP (4231, wyzx) SHADER_SWIZZLE_OP (4232, wyzy) SHADER_SWIZZLE_OP (4233, wyzz) |
|
|
887 | SHADER_SWIZZLE_OP (4234, wyzw) SHADER_SWIZZLE_OP (424 , wyw ) SHADER_SWIZZLE_OP (4241, wywx) SHADER_SWIZZLE_OP (4242, wywy) |
|
|
888 | SHADER_SWIZZLE_OP (4243, wywz) SHADER_SWIZZLE_OP (4244, wyww) SHADER_SWIZZLE_OP (43 , wz ) SHADER_SWIZZLE_OP (431 , wzx ) |
|
|
889 | SHADER_SWIZZLE_OP (4311, wzxx) SHADER_SWIZZLE_OP (4312, wzxy) SHADER_SWIZZLE_OP (4313, wzxz) SHADER_SWIZZLE_OP (4314, wzxw) |
|
|
890 | SHADER_SWIZZLE_OP (432 , wzy ) SHADER_SWIZZLE_OP (4321, wzyx) SHADER_SWIZZLE_OP (4322, wzyy) SHADER_SWIZZLE_OP (4323, wzyz) |
|
|
891 | SHADER_SWIZZLE_OP (4324, wzyw) SHADER_SWIZZLE_OP (433 , wzz ) SHADER_SWIZZLE_OP (4331, wzzx) SHADER_SWIZZLE_OP (4332, wzzy) |
|
|
892 | SHADER_SWIZZLE_OP (4333, wzzz) SHADER_SWIZZLE_OP (4334, wzzw) SHADER_SWIZZLE_OP (434 , wzw ) SHADER_SWIZZLE_OP (4341, wzwx) |
|
|
893 | SHADER_SWIZZLE_OP (4342, wzwy) SHADER_SWIZZLE_OP (4343, wzwz) SHADER_SWIZZLE_OP (4344, wzww) SHADER_SWIZZLE_OP (44 , ww ) |
|
|
894 | SHADER_SWIZZLE_OP (441 , wwx ) SHADER_SWIZZLE_OP (4411, wwxx) SHADER_SWIZZLE_OP (4412, wwxy) SHADER_SWIZZLE_OP (4413, wwxz) |
|
|
895 | SHADER_SWIZZLE_OP (4414, wwxw) SHADER_SWIZZLE_OP (442 , wwy ) SHADER_SWIZZLE_OP (4421, wwyx) SHADER_SWIZZLE_OP (4422, wwyy) |
|
|
896 | SHADER_SWIZZLE_OP (4423, wwyz) SHADER_SWIZZLE_OP (4424, wwyw) SHADER_SWIZZLE_OP (443 , wwz ) SHADER_SWIZZLE_OP (4431, wwzx) |
|
|
897 | SHADER_SWIZZLE_OP (4432, wwzy) SHADER_SWIZZLE_OP (4433, wwzz) SHADER_SWIZZLE_OP (4434, wwzw) SHADER_SWIZZLE_OP (444 , www ) |
|
|
898 | SHADER_SWIZZLE_OP (4441, wwwx) SHADER_SWIZZLE_OP (4442, wwwy) SHADER_SWIZZLE_OP (4443, wwwz) SHADER_SWIZZLE_OP (4444, wwww) |
|
|
899 | |
|
|
900 | # undef SHADER_SWIZZLE_OP |
|
|
901 | |
560 | void debdebdebdebug ();//D |
902 | void debdebdebdebug ();//D |
561 | } |
903 | } |
562 | |
904 | |
563 | #endif |
905 | #endif |
564 | |
906 | |