summaryrefslogtreecommitdiff
path: root/shaders/tesseract/285.shader_test
diff options
context:
space:
mode:
Diffstat (limited to 'shaders/tesseract/285.shader_test')
-rw-r--r--shaders/tesseract/285.shader_test152
1 files changed, 152 insertions, 0 deletions
diff --git a/shaders/tesseract/285.shader_test b/shaders/tesseract/285.shader_test
new file mode 100644
index 0000000..d44fc30
--- /dev/null
+++ b/shaders/tesseract/285.shader_test
@@ -0,0 +1,152 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+#version 120
+#extension GL_ARB_texture_rectangle : enable
+#define flat
+#define texture2DRectOffset(sampler, coords, offset) texture2DRect(sampler, coords + vec2(offset))
+#define shadow2DRectOffset(sampler, coords, offset) shadow2DRect(sampler, coords + vec2(offset))
+attribute vec4 vvertex, vtangent;
+ attribute vec2 vtexcoord0;
+
+ uniform mat4 modelmatrix;
+ uniform mat3 modelworld;
+ uniform vec3 modelcamera;
+ uniform vec2 texscroll;
+
+ varying mat3 world;
+
+
+ varying vec3 camvec;
+
+
+ varying vec2 texcoord0;
+
+ void main(void)
+ {
+
+ #define mpos vvertex
+ #define mquat vtangent
+
+ vec4 qxyz = mquat.xxyy*mquat.yzyz, qxzw = vec4(mquat.xzw, -mquat.w);
+ vec3 mtangent = (qxzw.yzw*mquat.zzy + qxyz.zxy)*vec3(-2.0, 2.0, 2.0) + vec3(1.0, 0.0, 0.0);
+ vec3 mnormal = (qxzw.zwx*mquat.yxx + qxyz.ywz)*vec3(2.0, 2.0, -2.0) + vec3(0.0, 0.0, 1.0);
+
+
+
+
+
+ gl_Position = modelmatrix * mpos;
+
+ texcoord0 = vtexcoord0 + texscroll;
+
+
+
+
+ camvec = modelworld * normalize(modelcamera - mpos.xyz);
+
+
+
+
+
+ vec3 wnormal = modelworld * mnormal;
+ vec3 wtangent = modelworld * mtangent;
+ vec3 wbitangent = cross(wnormal, wtangent) * (vtangent.w < 0.0 ? -1.0 : 1.0);
+ world = mat3(wtangent, wbitangent, wnormal);
+
+ }
+
+[fragment shader]
+#version 120
+#extension GL_ARB_texture_rectangle : enable
+#define flat
+#define texture2DRectOffset(sampler, coords, offset) texture2DRect(sampler, coords + vec2(offset))
+#define shadow2DRectOffset(sampler, coords, offset) shadow2DRect(sampler, coords + vec2(offset))
+#define fragdata(loc, name, type)
+#define gcolor gl_FragData[0]
+#define gnormal gl_FragData[1]
+#define gglow gl_FragData[2]
+varying mat3 world;
+
+
+ uniform vec2 envmapscale;
+ varying vec3 camvec;
+
+ uniform vec4 colorscale;
+ uniform vec2 fullbright;
+ uniform vec2 maskscale;
+
+ uniform sampler2D tex0;
+ uniform sampler2D tex1;
+ uniform samplerCube tex2;
+ uniform sampler2D tex3;
+
+
+ fragdata(0, gcolor, vec4)
+ fragdata(1, gnormal, vec4)
+ fragdata(2, gglow, vec4)
+
+
+
+ varying vec2 texcoord0;
+ uniform float aamask;
+
+ void main(void)
+ {
+ vec4 diffuse = texture2D(tex0, texcoord0);
+
+
+
+ gcolor.rgb = diffuse.rgb*colorscale.rgb;
+
+
+
+
+ vec3 normal = texture2D(tex3, texcoord0).rgb - 0.5;
+
+ normal = normalize(world * normal);
+
+
+ float spec = maskscale.x;
+
+ vec3 masks = texture2D(tex1, texcoord0).rgb;
+ spec *= masks.r;
+
+
+ vec3 camn = normalize(camvec);
+ float invfresnel = dot(camn, normal);
+ vec3 rvec = 2.0*invfresnel*normal - camn;
+ float rmod = envmapscale.x*clamp(invfresnel, 0.0, 1.0) + envmapscale.y;
+ vec3 reflect = textureCube(tex2, rvec).rgb;
+ gcolor.rgb = mix(gcolor.rgb, reflect, rmod*masks.b);
+
+
+ gcolor.a = 0.5*spec;
+
+
+ float glowk = max(maskscale.y*masks.g, fullbright.y), colork = max(fullbright.x-glowk, 0.0);
+
+
+
+ gglow.rgb = gcolor.rgb*glowk;
+ gcolor.rgb *= colork;
+ #define packnorm colorscale.a
+
+
+
+ gnormal.rgb = normal*0.5 + 0.5;
+ #ifdef packnorm
+ gnormal.a = (packnorm);
+ #else
+ gnormal.a = 1.0;
+ #endif
+
+
+
+
+
+
+ }
+
+