21 "const int gl_MaxLights = 8;\n"
22 "const int gl_MaxClipPlanes = 6;\n"
23 "const int gl_MaxTextureUnits = 2;\n"
24 "const int gl_MaxTextureCoords = 2;\n"
25 "const int gl_MaxVertexAttribs = 16;\n"
26 "const int gl_MaxVertexUniformComponents = 512;\n"
27 "const int gl_MaxVaryingFloats = 32;\n"
28 "const int gl_MaxVertexTextureImageUnits = 0;\n"
29 "const int gl_MaxCombinedTextureImageUnits = 2;\n"
30 "const int gl_MaxTextureImageUnits = 2;\n"
31 "const int gl_MaxFragmentUniformComponents = 64;\n"
32 "const int gl_MaxDrawBuffers = 1;\n"
44 "uniform mat4 gl_ModelViewMatrix;\n"
45 "uniform mat4 gl_ProjectionMatrix;\n"
46 "uniform mat4 gl_ModelViewProjectionMatrix;\n"
47 "uniform mat4 gl_TextureMatrix[gl_MaxTextureCoords];\n"
54 "uniform mat3 gl_NormalMatrix;\n"
57 "uniform mat4 gl_ModelViewMatrixInverse;\n"
58 "uniform mat4 gl_ProjectionMatrixInverse;\n"
59 "uniform mat4 gl_ModelViewProjectionMatrixInverse;\n"
60 "uniform mat4 gl_TextureMatrixInverse[gl_MaxTextureCoords];\n"
62 "uniform mat4 gl_ModelViewMatrixTranspose;\n"
63 "uniform mat4 gl_ProjectionMatrixTranspose;\n"
64 "uniform mat4 gl_ModelViewProjectionMatrixTranspose;\n"
65 "uniform mat4 gl_TextureMatrixTranspose[gl_MaxTextureCoords];\n"
67 "uniform mat4 gl_ModelViewMatrixInverseTranspose;\n"
68 "uniform mat4 gl_ProjectionMatrixInverseTranspose;\n"
69 "uniform mat4 gl_ModelViewProjectionMatrixInverseTranspose;\n"
70 "uniform mat4 gl_TextureMatrixInverseTranspose[gl_MaxTextureCoords];\n"
76 "uniform float gl_NormalScale;\n"
82 "struct gl_DepthRangeParameters {\n"
88 "uniform gl_DepthRangeParameters gl_DepthRange;\n"
94 "uniform vec4 gl_ClipPlane[gl_MaxClipPlanes];\n"
100 "struct gl_PointParameters {\n"
104 " float fadeThresholdSize;\n"
105 " float distanceConstantAttenuation;\n"
106 " float distanceLinearAttenuation;\n"
107 " float distanceQuadraticAttenuation;\n"
110 "uniform gl_PointParameters gl_Point;\n"
116 "struct gl_MaterialParameters {\n"
121 " float shininess;\n"
124 "uniform gl_MaterialParameters gl_FrontMaterial;\n"
125 "uniform gl_MaterialParameters gl_BackMaterial;\n"
131 "struct gl_LightSourceParameters {\n"
136 " vec4 halfVector;\n"
137 " vec3 spotDirection;\n"
138 " float spotExponent;\n"
139 " float spotCutoff;\n"
141 " float spotCosCutoff;\n"
143 " float constantAttenuation;\n"
144 " float linearAttenuation;\n"
145 " float quadraticAttenuation;\n"
148 "uniform gl_LightSourceParameters gl_LightSource[gl_MaxLights];\n"
150 "struct gl_LightModelParameters {\n"
154 "uniform gl_LightModelParameters gl_LightModel;\n"
160 "struct gl_LightModelProducts {\n"
161 " vec4 sceneColor;\n"
164 "uniform gl_LightModelProducts gl_FrontLightModelProduct;\n"
165 "uniform gl_LightModelProducts gl_BackLightModelProduct;\n"
167 "struct gl_LightProducts {\n"
173 "uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];\n"
174 "uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];\n"
180 "uniform vec4 gl_TextureEnvColor[gl_MaxTextureImageUnits];\n"
181 "uniform vec4 gl_EyePlaneS[gl_MaxTextureCoords];\n"
182 "uniform vec4 gl_EyePlaneT[gl_MaxTextureCoords];\n"
183 "uniform vec4 gl_EyePlaneR[gl_MaxTextureCoords];\n"
184 "uniform vec4 gl_EyePlaneQ[gl_MaxTextureCoords];\n"
185 "uniform vec4 gl_ObjectPlaneS[gl_MaxTextureCoords];\n"
186 "uniform vec4 gl_ObjectPlaneT[gl_MaxTextureCoords];\n"
187 "uniform vec4 gl_ObjectPlaneR[gl_MaxTextureCoords];\n"
188 "uniform vec4 gl_ObjectPlaneQ[gl_MaxTextureCoords];\n"
194 "struct gl_FogParameters {\n"
202 "uniform gl_FogParameters gl_Fog;\n"
247 "float radians (float deg) {\n"
248 " return 3.141593 * deg / 180.0;\n"
250 "vec2 radians (vec2 deg) {\n"
251 " return vec2 (radians (deg.x), radians (deg.y));\n"
253 "vec3 radians (vec3 deg) {\n"
254 " return vec3 (radians (deg.x), radians (deg.y), radians (deg.z));\n"
256 "vec4 radians (vec4 deg) {\n"
257 " return vec4 (radians (deg.x), radians (deg.y), radians (deg.z), radians (deg.w));\n"
264 "float degrees (float rad) {\n"
265 " return 180.0 * rad / 3.141593;\n"
267 "vec2 degrees (vec2 rad) {\n"
268 " return vec2 (degrees (rad.x), degrees (rad.y));\n"
270 "vec3 degrees (vec3 rad) {\n"
271 " return vec3 (degrees (rad.x), degrees (rad.y), degrees (rad.z));\n"
273 "vec4 degrees (vec4 rad) {\n"
274 " return vec4 (degrees (rad.x), degrees (rad.y), degrees (rad.z), degrees (rad.w));\n"
281 "float sin (float angle) {\n"
284 "vec2 sin (vec2 angle) {\n"
285 " return vec2 (sin (angle.x), sin (angle.y));\n"
287 "vec3 sin (vec3 angle) {\n"
288 " return vec3 (sin (angle.x), sin (angle.y), sin (angle.z));\n"
290 "vec4 sin (vec4 angle) {\n"
291 " return vec4 (sin (angle.x), sin (angle.y), sin (angle.z), sin (angle.w));\n"
298 "float cos (float angle) {\n"
299 " return sin (angle + 1.5708);\n"
301 "vec2 cos (vec2 angle) {\n"
302 " return vec2 (cos (angle.x), cos (angle.y));\n"
304 "vec3 cos (vec3 angle) {\n"
305 " return vec3 (cos (angle.x), cos (angle.y), cos (angle.z));\n"
307 "vec4 cos (vec4 angle) {\n"
308 " return vec4 (cos (angle.x), cos (angle.y), cos (angle.z), cos (angle.w));\n"
315 "float tan (float angle) {\n"
316 " return sin (angle) / cos (angle);\n"
318 "vec2 tan (vec2 angle) {\n"
319 " return vec2 (tan (angle.x), tan (angle.y));\n"
321 "vec3 tan (vec3 angle) {\n"
322 " return vec3 (tan (angle.x), tan (angle.y), tan (angle.z));\n"
324 "vec4 tan (vec4 angle) {\n"
325 " return vec4 (tan (angle.x), tan (angle.y), tan (angle.z), tan (angle.w));\n"
333 "float asin (float x) {\n"
336 "vec2 asin (vec2 x) {\n"
337 " return vec2 (asin (x.x), asin (x.y));\n"
339 "vec3 asin (vec3 x) {\n"
340 " return vec3 (asin (x.x), asin (x.y), asin (x.z));\n"
342 "vec4 asin (vec4 x) {\n"
343 " return vec4 (asin (x.x), asin (x.y), asin (x.z), asin (x.w));\n"
351 "float acos (float x) {\n"
354 "vec2 acos (vec2 x) {\n"
355 " return vec2 (acos (x.x), acos (x.y));\n"
357 "vec3 acos (vec3 x) {\n"
358 " return vec3 (acos (x.x), acos (x.y), acos (x.z));\n"
360 "vec4 acos (vec4 x) {\n"
361 " return vec4 (acos (x.x), acos (x.y), acos (x.z), acos (x.w));\n"
370 "float atan (float x, float y) {\n"
373 "vec2 atan (vec2 x, vec2 y) {\n"
374 " return vec2 (atan (x.x, y.x), atan (x.y, y.y));\n"
376 "vec3 atan (vec3 x, vec3 y) {\n"
377 " return vec3 (atan (x.x, y.x), atan (x.y, y.y), atan (x.z, y.z));\n"
379 "vec4 atan (vec4 x, vec4 y) {\n"
380 " return vec4 (atan (x.x, y.x), atan (x.y, y.y), atan (x.z, y.z), atan (x.w, y.w));\n"
388 "float atan (float y_over_x) {\n"
391 "vec2 atan (vec2 y_over_x) {\n"
392 " return vec2 (atan (y_over_x.x), atan (y_over_x.y));\n"
394 "vec3 atan (vec3 y_over_x) {\n"
395 " return vec3 (atan (y_over_x.x), atan (y_over_x.y), atan (y_over_x.z));\n"
397 "vec4 atan (vec4 y_over_x) {\n"
398 " return vec4 (atan (y_over_x.x), atan (y_over_x.y), atan (y_over_x.z), atan (y_over_x.w));\n"
413 "float pow (float x, float y) {\n"
416 "vec2 pow (vec2 x, vec2 y) {\n"
417 " return vec2 (pow (x.x, y.x), pow (x.y, y.y));\n"
419 "vec3 pow (vec3 x, vec3 y) {\n"
420 " return vec3 (pow (x.x, y.x), pow (x.y, y.y), pow (x.z, y.z));\n"
422 "vec4 pow (vec4 x, vec4 y) {\n"
423 " return vec4 (pow (x.x, y.x), pow (x.y, y.y), pow (x.z, y.z), pow (x.w, y.w));\n"
430 "float exp (float x) {\n"
431 " return pow (2.71828183, x);\n"
433 "vec2 exp (vec2 x) {\n"
434 " return vec2 (exp (x.x), exp (x.y));\n"
436 "vec3 exp (vec3 x) {\n"
437 " return vec3 (exp (x.x), exp (x.y), exp (x.z));\n"
439 "vec4 exp (vec4 x) {\n"
440 " return vec4 (exp (x.x), exp (x.y), exp (x.z), exp (x.w));\n"
449 "float log (float x) {\n"
450 " return log2 (x) / log2 (2.71828183);\n"
452 "vec2 log (vec2 x) {\n"
453 " return vec2 (log (x.x), log (x.y));\n"
455 "vec3 log (vec3 x) {\n"
456 " return vec3 (log (x.x), log (x.y), log (x.z));\n"
458 "vec4 log (vec4 x) {\n"
459 " return vec4 (log (x.x), log (x.y), log (x.z), log (x.w));\n"
466 "float exp2 (float x) {\n"
467 " return pow (2.0, x);\n"
469 "vec2 exp2 (vec2 x) {\n"
470 " return vec2 (exp2 (x.x), exp2 (x.y));\n"
472 "vec3 exp2 (vec3 x) {\n"
473 " return vec3 (exp2 (x.x), exp2 (x.y), exp2 (x.z));\n"
475 "vec4 exp2 (vec4 x) {\n"
476 " return vec4 (exp2 (x.x), exp2 (x.y), exp2 (x.z), exp2 (x.w));\n"
485 "float log2 (float x) {\n"
488 "vec2 log2 (vec2 x) {\n"
489 " return vec2 (log2 (x.x), log2 (x.y));\n"
491 "vec3 log2 (vec3 x) {\n"
492 " return vec3 (log2 (x.x), log2 (x.y), log2 (x.z));\n"
494 "vec4 log2 (vec4 x) {\n"
495 " return vec4 (log2 (x.x), log2 (x.y), log2 (x.z), log2 (x.w));\n"
503 "float sqrt (float x) {\n"
504 " return pow (x, 0.5);\n"
506 "vec2 sqrt (vec2 x) {\n"
507 " return vec2 (sqrt (x.x), sqrt (x.y));\n"
509 "vec3 sqrt (vec3 x) {\n"
510 " return vec3 (sqrt (x.x), sqrt (x.y), sqrt (x.z));\n"
512 "vec4 sqrt (vec4 x) {\n"
513 " return vec4 (sqrt (x.x), sqrt (x.y), sqrt (x.z), sqrt (x.w));\n"
521 "float inversesqrt (float x) {\n"
522 " return 1.0 / sqrt (x);\n"
524 "vec2 inversesqrt (vec2 x) {\n"
525 " return vec2 (inversesqrt (x.x), inversesqrt (x.y));\n"
527 "vec3 inversesqrt (vec3 x) {\n"
528 " return vec3 (inversesqrt (x.x), inversesqrt (x.y), inversesqrt (x.z));\n"
530 "vec4 inversesqrt (vec4 x) {\n"
531 " return vec4 (inversesqrt (x.x), inversesqrt (x.y), inversesqrt (x.z), inversesqrt (x.w));\n"
544 "float abs (float x) {\n"
545 " return x >= 0.0 ? x : -x;\n"
547 "vec2 abs (vec2 x) {\n"
548 " return vec2 (abs (x.x), abs (x.y));\n"
550 "vec3 abs (vec3 x) {\n"
551 " return vec3 (abs (x.x), abs (x.y), abs (x.z));\n"
553 "vec4 abs (vec4 x) {\n"
554 " return vec4 (abs (x.x), abs (x.y), abs (x.z), abs (x.w));\n"
561 "float sign (float x) {\n"
562 " return x > 0.0 ? 1.0 : x < 0.0 ? -1.0 : 0.0;\n"
564 "vec2 sign (vec2 x) {\n"
565 " return vec2 (sign (x.x), sign (x.y));\n"
567 "vec3 sign (vec3 x) {\n"
568 " return vec3 (sign (x.x), sign (x.y), sign (x.z));\n"
570 "vec4 sign (vec4 x) {\n"
571 " return vec4 (sign (x.x), sign (x.y), sign (x.z), sign (x.w));\n"
578 "float floor (float x) {\n"
581 "vec2 floor (vec2 x) {\n"
582 " return vec2 (floor (x.x), floor (x.y));\n"
584 "vec3 floor (vec3 x) {\n"
585 " return vec3 (floor (x.x), floor (x.y), floor (x.z));\n"
587 "vec4 floor (vec4 x) {\n"
588 " return vec4 (floor (x.x), floor (x.y), floor (x.z), floor (x.w));\n"
595 "float ceil (float x) {\n"
598 "vec2 ceil (vec2 x) {\n"
599 " return vec2 (ceil (x.x), ceil (x.y));\n"
601 "vec3 ceil (vec3 x) {\n"
602 " return vec3 (ceil (x.x), ceil (x.y), ceil (x.z));\n"
604 "vec4 ceil (vec4 x) {\n"
605 " return vec4 (ceil (x.x), ceil (x.y), ceil (x.z), ceil (x.w));\n"
612 "float fract (float x) {\n"
613 " return x - floor (x);\n"
615 "vec2 fract (vec2 x) {\n"
616 " return vec2 (fract (x.x), fract (x.y));\n"
618 "vec3 fract (vec3 x) {\n"
619 " return vec3 (fract (x.x), fract (x.y), fract (x.z));\n"
621 "vec4 fract (vec4 x) {\n"
622 " return vec4 (fract (x.x), fract (x.y), fract (x.z), fract (x.w));\n"
629 "float mod (float x, float y) {\n"
630 " return x - y * floor (x / y);\n"
632 "vec2 mod (vec2 x, float y) {\n"
633 " return vec2 (mod (x.x, y), mod (x.y, y));\n"
635 "vec3 mod (vec3 x, float y) {\n"
636 " return vec3 (mod (x.x, y), mod (x.y, y), mod (x.z, y));\n"
638 "vec4 mod (vec4 x, float y) {\n"
639 " return vec4 (mod (x.x, y), mod (x.y, y), mod (x.z, y), mod (x.w, y));\n"
641 "vec2 mod (vec2 x, vec2 y) {\n"
642 " return vec2 (mod (x.x, y.x), mod (x.y, y.y));\n"
644 "vec3 mod (vec3 x, vec3 y) {\n"
645 " return vec3 (mod (x.x, y.x), mod (x.y, y.y), mod (x.z, y.z));\n"
647 "vec4 mod (vec4 x, vec4 y) {\n"
648 " return vec4 (mod (x.x, y.x), mod (x.y, y.y), mod (x.z, y.z), mod (x.w, y.w));\n"
655 "float min (float x, float y) {\n"
656 " return y < x ? y : x;\n"
658 "vec2 min (vec2 x, float y) {\n"
659 " return vec2 (min (x.x, y), min (x.y, y));\n"
661 "vec3 min (vec3 x, float y) {\n"
662 " return vec3 (min (x.x, y), min (x.y, y), min (x.z, y));\n"
664 "vec4 min (vec4 x, float y) {\n"
665 " return vec4 (min (x.x, y), min (x.y, y), min (x.z, y), min (x.w, y));\n"
667 "vec2 min (vec2 x, vec2 y) {\n"
668 " return vec2 (min (x.x, y.x), min (x.y, y.y));\n"
670 "vec3 min (vec3 x, vec3 y) {\n"
671 " return vec3 (min (x.x, y.x), min (x.y, y.y), min (x.z, y.z));\n"
673 "vec4 min (vec4 x, vec4 y) {\n"
674 " return vec4 (min (x.x, y.x), min (x.y, y.y), min (x.z, y.z), min (x.w, y.w));\n"
681 "float max (float x, float y) {\n"
682 " return min (y, x);\n"
684 "vec2 max (vec2 x, float y) {\n"
685 " return vec2 (max (x.x, y), max (x.y, y));\n"
687 "vec3 max (vec3 x, float y) {\n"
688 " return vec3 (max (x.x, y), max (x.y, y), max (x.z, y));\n"
690 "vec4 max (vec4 x, float y) {\n"
691 " return vec4 (max (x.x, y), max (x.y, y), max (x.z, y), max (x.w, y));\n"
693 "vec2 max (vec2 x, vec2 y) {\n"
694 " return vec2 (max (x.x, y.x), max (x.y, y.y));\n"
696 "vec3 max (vec3 x, vec3 y) {\n"
697 " return vec3 (max (x.x, y.x), max (x.y, y.y), max (x.z, y.z));\n"
699 "vec4 max (vec4 x, vec4 y) {\n"
700 " return vec4 (max (x.x, y.x), max (x.y, y.y), max (x.z, y.z), max (x.w, y.w));\n"
710 "float clamp (float x, float minVal, float maxVal) {\n"
711 " return min (max (x, minVal), maxVal);\n"
713 "vec2 clamp (vec2 x, float minVal, float maxVal) {\n"
714 " return vec2 (clamp (x.x, minVal, maxVal), clamp (x.y, minVal, maxVal));\n"
716 "vec3 clamp (vec3 x, float minVal, float maxVal) {\n"
717 " return vec3 (clamp (x.x, minVal, maxVal), clamp (x.y, minVal, maxVal),\n"
718 " clamp (x.z, minVal, maxVal));\n"
720 "vec4 clamp (vec4 x, float minVal, float maxVal) {\n"
721 " return vec4 (clamp (x.x, minVal, maxVal), clamp (x.y, minVal, maxVal),\n"
722 " clamp (x.z, minVal, maxVal), clamp (x.w, minVal, maxVal));\n"
724 "vec2 clamp (vec2 x, vec2 minVal, vec2 maxVal) {\n"
725 " return vec2 (clamp (x.x, minVal.x, maxVal.x), clamp (x.y, minVal.y, maxVal.y));\n"
727 "vec3 clamp (vec3 x, vec3 minVal, vec3 maxVal) {\n"
728 " return vec3 (clamp (x.x, minVal.x, maxVal.x), clamp (x.y, minVal.y, maxVal.y),\n"
729 " clamp (x.z, minVal.z, maxVal.z));\n"
731 "vec4 clamp (vec4 x, vec4 minVal, vec4 maxVal) {\n"
732 " return vec4 (clamp (x.x, minVal.x, maxVal.y), clamp (x.y, minVal.y, maxVal.y),\n"
733 " clamp (x.z, minVal.z, maxVal.z), clamp (x.w, minVal.w, maxVal.w));\n"
740 "float mix (float x, float y, float a) {\n"
741 " return x * (1.0 - a) + y * a;\n"
743 "vec2 mix (vec2 x, vec2 y, float a) {\n"
744 " return vec2 (mix (x.x, y.x, a), mix (x.y, y.y, a));\n"
746 "vec3 mix (vec3 x, vec3 y, float a) {\n"
747 " return vec3 (mix (x.x, y.x, a), mix (x.y, y.y, a), mix (x.z, y.z, a));\n"
749 "vec4 mix (vec4 x, vec4 y, float a) {\n"
750 " return vec4 (mix (x.x, y.x, a), mix (x.y, y.y, a), mix (x.z, y.z, a), mix (x.w, y.w, a));\n"
752 "vec2 mix (vec2 x, vec2 y, vec2 a) {\n"
753 " return vec2 (mix (x.x, y.x, a.x), mix (x.y, y.y, a.y));\n"
755 "vec3 mix (vec3 x, vec3 y, vec3 a) {\n"
756 " return vec3 (mix (x.x, y.x, a.x), mix (x.y, y.y, a.y), mix (x.z, y.z, a.z));\n"
758 "vec4 mix (vec4 x, vec4 y, vec4 a) {\n"
759 " return vec4 (mix (x.x, y.x, a.x), mix (x.y, y.y, a.y), mix (x.z, y.z, a.z),\n"
760 " mix (x.w, y.w, a.w));\n"
767 "float step (float edge, float x) {\n"
768 " return x < edge ? 0.0 : 1.0;\n"
770 "vec2 step (float edge, vec2 x) {\n"
771 " return vec2 (step (edge, x.x), step (edge, x.y));\n"
773 "vec3 step (float edge, vec3 x) {\n"
774 " return vec3 (step (edge, x.x), step (edge, x.y), step (edge, x.z));\n"
776 "vec4 step (float edge, vec4 x) {\n"
777 " return vec4 (step (edge, x.x), step (edge, x.y), step (edge, x.z), step (edge, x.w));\n"
779 "vec2 step (vec2 edge, vec2 x) {\n"
780 " return vec2 (step (edge.x, x.x), step (edge.y, x.y));\n"
782 "vec3 step (vec3 edge, vec3 x) {\n"
783 " return vec3 (step (edge.x, x.x), step (edge.y, x.y), step (edge.z, x.z));\n"
785 "vec4 step (vec4 edge, vec4 x) {\n"
786 " return vec4 (step (edge.x, x.x), step (edge.y, x.y), step (edge.z, x.z), step (edge.w, x.w));\n"
798 "float smoothstep (float edge0, float edge1, float x) {\n"
799 " const float t = clamp ((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n"
800 " return t * t * (3.0 - 2.0 * t);\n"
802 "vec2 smoothstep (float edge0, float edge1, vec2 x) {\n"
803 " return vec2 (smoothstep (edge0, edge1, x.x), smoothstep (edge0, edge1, x.y));\n"
805 "vec3 smoothstep (float edge0, float edge1, vec3 x) {\n"
806 " return vec3 (smoothstep (edge0, edge1, x.x), smoothstep (edge0, edge1, x.y),\n"
807 " smoothstep (edge0, edge1, x.z));\n"
809 "vec4 smoothstep (float edge0, float edge1, vec4 x) {\n"
810 " return vec4 (smoothstep (edge0, edge1, x.x), smoothstep (edge0, edge1, x.y),\n"
811 " smoothstep (edge0, edge1, x.z), smoothstep (edge0, edge1, x.w));\n"
813 "vec2 smoothstep (vec2 edge0, vec2 edge1, vec2 x) {\n"
814 " return vec2 (smoothstep (edge0.x, edge1.x, x.x), smoothstep (edge0.y, edge1.y, x.y));\n"
816 "vec3 smoothstep (vec3 edge0, vec3 edge1, vec3 x) {\n"
817 " return vec3 (smoothstep (edge0.x, edge1.x, x.x), smoothstep (edge0.y, edge1.y, x.y),\n"
818 " smoothstep (edge0.z, edge1.z, x.z));\n"
820 "vec4 smoothstep (vec4 edge0, vec4 edge1, vec4 x) {\n"
821 " return vec4 (smoothstep (edge0.x, edge1.x, x.x), smoothstep (edge0.y, edge1.y, x.y),\n"
822 " smoothstep (edge0.z, edge1.z, x.z), smoothstep (edge0.w, edge1.w, x.w));\n"
835 "float dot (float x, float y) {\n"
838 "float dot (vec2 x, vec2 y) {\n"
839 " return dot (x.x, y.x) + dot (x.y, y.y);\n"
841 "float dot (vec3 x, vec3 y) {\n"
842 " return dot (x.x, y.x) + dot (x.y, y.y) + dot (x.z, y.z);\n"
844 "float dot (vec4 x, vec4 y) {\n"
845 " return dot (x.x, y.x) + dot (x.y, y.y) + dot (x.z, y.z) + dot (x.w, y.w);\n"
852 "float length (float x) {\n"
853 " return sqrt (dot (x, x));\n"
855 "float length (vec2 x) {\n"
856 " return sqrt (dot (x, x));\n"
858 "float length (vec3 x) {\n"
859 " return sqrt (dot (x, x));\n"
861 "float length (vec4 x) {\n"
862 " return sqrt (dot (x, x));\n"
869 "float distance (float x, float y) {\n"
870 " return length (x - y);\n"
872 "float distance (vec2 x, vec2 y) {\n"
873 " return length (x - y);\n"
875 "float distance (vec3 x, vec3 y) {\n"
876 " return length (x - y);\n"
878 "float distance (vec4 x, vec4 y) {\n"
879 " return length (x - y);\n"
889 "vec3 cross (vec3 x, vec3 y) {\n"
890 " return vec3 (x.y * y.z - y.y * x.z, x.z * y.x - y.z * x.x, x.x * y.y - y.x * x.y);\n"
897 "float normalize (float x) {\n"
900 "vec2 normalize (vec2 x) {\n"
901 " return x / length (x);\n"
903 "vec3 normalize (vec3 x) {\n"
904 " return x / length (x);\n"
906 "vec4 normalize (vec4 x) {\n"
907 " return x / length (x);\n"
914 "float faceforward (float N, float I, float Nref) {\n"
915 " return dot (Nref, I) < 0.0 ? N : -N;\n"
917 "vec2 faceforward (vec2 N, vec2 I, vec2 Nref) {\n"
918 " return dot (Nref, I) < 0.0 ? N : -N;\n"
920 "vec3 faceforward (vec3 N, vec3 I, vec3 Nref) {\n"
921 " return dot (Nref, I) < 0.0 ? N : -N;\n"
923 "vec4 faceforward (vec4 N, vec4 I, vec4 Nref) {\n"
924 " return dot (Nref, I) < 0.0 ? N : -N;\n"
933 "float reflect (float I, float N) {\n"
934 " return I - 2.0 * dot (N, I) * N;\n"
936 "vec2 reflect (vec2 I, vec2 N) {\n"
937 " return I - 2.0 * dot (N, I) * N;\n"
939 "vec3 reflect (vec3 I, vec3 N) {\n"
940 " return I - 2.0 * dot (N, I) * N;\n"
942 "vec4 reflect (vec4 I, vec4 N) {\n"
943 " return I - 2.0 * dot (N, I) * N;\n"
960 "float refract (float I, float N, float eta) {\n"
961 " const float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\n"
964 " return eta * I - (eta * dot (N, I) + sqrt (k)) * N;\n"
966 "vec2 refract (vec2 I, vec2 N, float eta) {\n"
967 " const float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\n"
969 " return vec2 (0.0);\n"
970 " return eta * I - (eta * dot (N, I) + sqrt (k)) * N;\n"
972 "vec3 refract (vec3 I, vec3 N, float eta) {\n"
973 " const float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\n"
975 " return vec3 (0.0);\n"
976 " return eta * I - (eta * dot (N, I) + sqrt (k)) * N;\n"
978 "vec4 refract (vec4 I, vec4 N, float eta) {\n"
979 " const float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\n"
981 " return vec4 (0.0);\n"
982 " return eta * I - (eta * dot (N, I) + sqrt (k)) * N;\n"
995 "mat2 matrixCompMult (mat2 x, mat2 y) {\n"
997 " x[0].x * y[0].x, x[0].y * y[0].y,\n"
998 " x[1].x * y[1].x, x[1].y * y[1].y\n"
1001 "mat3 matrixCompMult (mat3 x, mat3 y) {\n"
1003 " x[0].x * y[0].x, x[0].y * y[0].y, x[0].z * y[0].z,\n"
1004 " x[1].x * y[1].x, x[1].y * y[1].y, x[1].z * y[1].z,\n"
1005 " x[2].x * y[2].x, x[2].y * y[2].y, x[2].z * y[2].z\n"
1008 "mat4 matrixCompMult (mat4 x, mat4 y) {\n"
1010 " x[0].x * y[0].x, x[0].y * y[0].y, x[0].z * y[0].z + x[0].w * y[0].w,\n"
1011 " x[1].x * y[1].x, x[1].y * y[1].y, x[1].z * y[1].z + x[1].w * y[1].w,\n"
1012 " x[2].x * y[2].x, x[2].y * y[2].y, x[2].z * y[2].z + x[2].w * y[2].w,\n"
1013 " x[3].x * y[3].x, x[3].y * y[3].y, x[3].z * y[3].z + x[3].w * y[3].w\n"
1028 "bvec2 lessThan (vec2 x, vec2 y) {\n"
1029 " return bvec2 (x.x < y.x, x.y < y.y);\n"
1031 "bvec3 lessThan (vec3 x, vec3 y) {\n"
1032 " return bvec3 (x.x < y.x, x.y < y.y, x.z < y.z);\n"
1034 "bvec4 lessThan (vec4 x, vec4 y) {\n"
1035 " return bvec4 (x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);\n"
1037 "bvec2 lessThan (ivec2 x, ivec2 y) {\n"
1038 " return bvec2 (x.x < y.x, x.y < y.y);\n"
1040 "bvec3 lessThan (ivec3 x, ivec3 y) {\n"
1041 " return bvec3 (x.x < y.x, x.y < y.y, x.z < y.z);\n"
1043 "bvec4 lessThan (ivec4 x, ivec4 y) {\n"
1044 " return bvec4 (x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);\n"
1051 "bvec2 lessThanEqual (vec2 x, vec2 y) {\n"
1052 " return bvec2 (x.x <= y.x, x.y <= y.y);\n"
1054 "bvec3 lessThanEqual (vec3 x, vec3 y) {\n"
1055 " return bvec3 (x.x <= y.x, x.y <= y.y, x.z <= y.z);\n"
1057 "bvec4 lessThanEqual (vec4 x, vec4 y) {\n"
1058 " return bvec4 (x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);\n"
1060 "bvec2 lessThanEqual (ivec2 x, ivec2 y) {\n"
1061 " return bvec2 (x.x <= y.x, x.y <= y.y);\n"
1063 "bvec3 lessThanEqual (ivec3 x, ivec3 y) {\n"
1064 " return bvec3 (x.x <= y.x, x.y <= y.y, x.z <= y.z);\n"
1066 "bvec4 lessThanEqual (ivec4 x, ivec4 y) {\n"
1067 " return bvec4 (x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);\n"
1074 "bvec2 greaterThan (vec2 x, vec2 y) {\n"
1075 " return bvec2 (x.x > y.x, x.y > y.y);\n"
1077 "bvec3 greaterThan (vec3 x, vec3 y) {\n"
1078 " return bvec3 (x.x > y.x, x.y > y.y, x.z > y.z);\n"
1080 "bvec4 greaterThan (vec4 x, vec4 y) {\n"
1081 " return bvec4 (x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);\n"
1083 "bvec2 greaterThan (ivec2 x, ivec2 y) {\n"
1084 " return bvec2 (x.x > y.x, x.y > y.y);\n"
1086 "bvec3 greaterThan (ivec3 x, ivec3 y) {\n"
1087 " return bvec3 (x.x > y.x, x.y > y.y, x.z > y.z);\n"
1089 "bvec4 greaterThan (ivec4 x, ivec4 y) {\n"
1090 " return bvec4 (x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);\n"
1097 "bvec2 greaterThanEqual (vec2 x, vec2 y) {\n"
1098 " return bvec2 (x.x >= y.x, x.y >= y.y);\n"
1100 "bvec3 greaterThanEqual (vec3 x, vec3 y) {\n"
1101 " return bvec3 (x.x >= y.x, x.y >= y.y, x.z >= y.z);\n"
1103 "bvec4 greaterThanEqual (vec4 x, vec4 y) {\n"
1104 " return bvec4 (x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);\n"
1106 "bvec2 greaterThanEqual (ivec2 x, ivec2 y) {\n"
1107 " return bvec2 (x.x >= y.x, x.y >= y.y);\n"
1109 "bvec3 greaterThanEqual (ivec3 x, ivec3 y) {\n"
1110 " return bvec3 (x.x >= y.x, x.y >= y.y, x.z >= y.z);\n"
1112 "bvec4 greaterThanEqual (ivec4 x, ivec4 y) {\n"
1113 " return bvec4 (x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);\n"
1120 "bvec2 equal (vec2 x, vec2 y) {\n"
1121 " return bvec2 (x.x == y.x, x.y == y.y);\n"
1123 "bvec3 equal (vec3 x, vec3 y) {\n"
1124 " return bvec3 (x.x == y.x, x.y == y.y, x.z == y.z);\n"
1126 "bvec4 equal (vec4 x, vec4 y) {\n"
1127 " return bvec4 (x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);\n"
1129 "bvec2 equal (ivec2 x, ivec2 y) {\n"
1130 " return bvec2 (x.x == y.x, x.y == y.y);\n"
1132 "bvec3 equal (ivec3 x, ivec3 y) {\n"
1133 " return bvec3 (x.x == y.x, x.y == y.y, x.z == y.z);\n"
1135 "bvec4 equal (ivec4 x, ivec4 y) {\n"
1136 " return bvec4 (x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);\n"
1143 "bvec2 notEqual (vec2 x, vec2 y) {\n"
1144 " return bvec2 (x.x != y.x, x.y != y.y);\n"
1146 "bvec3 notEqual (vec3 x, vec3 y) {\n"
1147 " return bvec3 (x.x != y.x, x.y != y.y, x.z != y.z);\n"
1149 "bvec4 notEqual (vec4 x, vec4 y) {\n"
1150 " return bvec4 (x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);\n"
1152 "bvec2 notEqual (ivec2 x, ivec2 y) {\n"
1153 " return bvec2 (x.x != y.x, x.y != y.y);\n"
1155 "bvec3 notEqual (ivec3 x, ivec3 y) {\n"
1156 " return bvec3 (x.x != y.x, x.y != y.y, x.z != y.z);\n"
1158 "bvec4 notEqual (ivec4 x, ivec4 y) {\n"
1159 " return bvec4 (x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);\n"
1166 "bool any (bvec2 x) {\n"
1167 " return x.x || x.y;\n"
1169 "bool any (bvec3 x) {\n"
1170 " return x.x || x.y || x.z;\n"
1172 "bool any (bvec4 x) {\n"
1173 " return x.x || x.y || x.z || x.w;\n"
1180 "bool all (bvec2 x) {\n"
1181 " return x.x && x.y;\n"
1183 "bool all (bvec3 x) {\n"
1184 " return x.x && x.y && x.z;\n"
1186 "bool all (bvec4 x) {\n"
1187 " return x.x && x.y && x.z && x.w;\n"
1194 "bvec2 not (bvec2 x) {\n"
1195 " return bvec2 (!x.x, !x.y);\n"
1197 "bvec3 not (bvec3 x) {\n"
1198 " return bvec3 (!x.x, !x.y, !x.z);\n"
1200 "bvec4 not (bvec4 x) {\n"
1201 " return bvec4 (!x.x, !x.y, !x.z, !x.w);\n"
1239 "vec4 texture1D (sampler1D sampler, float coord) {\n"
1240 " return vec4 (0.0);\n"
1242 "vec4 texture1DProj (sampler1D sampler, vec2 coord) {\n"
1243 " return texture1D (sampler, coord.s / coord.t);\n"
1245 "vec4 texture1DProj (sampler1D sampler, vec4 coord) {\n"
1246 " return texture1D (sampler, coord.s / coord.q);\n"
1256 "vec4 texture2D (sampler2D sampler, vec2 coord) {\n"
1257 " return vec4 (0.0);\n"
1259 "vec4 texture2DProj (sampler2D sampler, vec3 coord) {\n"
1260 " return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p));\n"
1262 "vec4 texture2DProj (sampler2D sampler, vec4 coord) {\n"
1263 " return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q));\n"
1271 "vec4 texture3D (sampler3D sampler, vec3 coord) {\n"
1272 " return vec4 (0.0);\n"
1274 "vec4 texture3DProj (sampler3D sampler, vec4 coord) {\n"
1275 " return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));\n"
1284 "vec4 textureCube (samplerCube sampler, vec3 coord) {\n"
1285 " return vec4 (0.0);\n"
1297 "vec4 shadow1D (sampler1DShadow sampler, vec3 coord) {\n"
1298 " return vec4 (0.0);\n"
1301 "vec4 shadow2D (sampler2DShadow sampler, vec3 coord) {\n"
1302 " return vec4 (0.0);\n"
1304 "vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord) {\n"
1305 " return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q));\n"
1307 "vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord) {\n"
1308 " return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));\n"
1335 "float noise1 (float x) {\n"
1339 "float noise1 (vec2 x) {\n"
1343 "float noise1 (vec3 x) {\n"
1347 "float noise1 (vec4 x) {\n"
1355 "vec2 noise2 (float x) {\n"
1356 " return vec2 (0.0);\n"
1359 "vec2 noise2 (vec2 x) {\n"
1360 " return vec2 (0.0);\n"
1363 "vec2 noise2 (vec3 x) {\n"
1364 " return vec2 (0.0);\n"
1367 "vec2 noise2 (vec4 x) {\n"
1368 " return vec2 (0.0);\n"
1375 "vec3 noise3 (float x) {\n"
1376 " return vec3 (0.0);\n"
1379 "vec3 noise3 (vec2 x) {\n"
1380 " return vec3 (0.0);\n"
1383 "vec3 noise3 (vec3 x) {\n"
1384 " return vec3 (0.0);\n"
1387 "vec3 noise3 (vec4 x) {\n"
1388 " return vec3 (0.0);\n"
1395 "vec4 noise4 (float x) {\n"
1396 " return vec4 (0.0);\n"
1399 "vec4 noise4 (vec2 x) {\n"
1400 " return vec4 (0.0);\n"
1403 "vec4 noise4 (vec3 x) {\n"
1404 " return vec4 (0.0);\n"
1407 "vec4 noise4 (vec4 x) {\n"
1408 " return vec4 (0.0);\n"