From 0f3fd4651dc8b305240c6f19b566faabfb9fba9e Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Thu, 26 Jun 2003 08:49:26 +0000 Subject: Ported vertexProgWarp from NV_vertex_program to ARB_vertex_program so it will work on any vendor's hardware as well as on Mac OS X. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/trunk@5 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4 --- src/demos/vertexProgWarp/VertexProgWarp.java | 499 ++++++++++++++------------- 1 file changed, 266 insertions(+), 233 deletions(-) (limited to 'src/demos/vertexProgWarp/VertexProgWarp.java') diff --git a/src/demos/vertexProgWarp/VertexProgWarp.java b/src/demos/vertexProgWarp/VertexProgWarp.java index 729d044..6a6a592 100644 --- a/src/demos/vertexProgWarp/VertexProgWarp.java +++ b/src/demos/vertexProgWarp/VertexProgWarp.java @@ -129,7 +129,7 @@ public class VertexProgWarp { gl.glDisable(GL.GL_CULL_FACE); try { - initExtension(gl, "GL_NV_vertex_program"); + initExtension(gl, "GL_ARB_vertex_program"); } catch (RuntimeException e) { runExit(); throw(e); @@ -143,38 +143,32 @@ public class VertexProgWarp { for(int i=0; i clip\n" + + "DP4 oPos.y, mvp[1], iPos ;\n" + + "DP4 oPos.z, mvp[2], iPos ;\n" + + "DP4 oPos.w, mvp[3], iPos ;\n" + "\n" + - "DP4 o[HPOS].x, c[0], v[OPOS] ; # object x MVP -> clip\n" + - "DP4 o[HPOS].y, c[1], v[OPOS] ;\n" + - "DP4 o[HPOS].z, c[2], v[OPOS] ;\n" + - "DP4 o[HPOS].w, c[3], v[OPOS] ;\n" + + "DP3 r1.x, mvit[0], iNorm ; # normal x MV-1T -> lighting normal\n" + + "DP3 r1.y, mvit[1], iNorm ;\n" + + "DP3 r1.z, mvit[2], iNorm ;\n" + "\n" + - "DP3 R1.x, c[4], v[NRML] ; # normal x MV-1T -> lighting normal\n" + - "DP3 R1.y, c[5], v[NRML] ;\n" + - "DP3 R1.z, c[6], v[NRML] ;\n" + - "\n" + - "DP3 R0, c[32], R1 ; # L.N\n" + - "MUL o[COL0].xyz, R0, c[35] ; # col = L.N * diffuse\n" + - "MOV o[TEX0], v[TEX0];\n" + - "END", + "DP3 r0, lightPos, r1 ; # L.N\n" + + "MUL oCol0.xyz, r0, diffuseCol ; # col = L.N * diffuse\n" + + "MOV oTex0, iTex;\n" + + "END\n", // // Pulsate // - "!!VP1.0\n" + + "!!ARBvp1.0\n" + "#Displace geometry along normal based on sine function of distance from origin\n" + "#(in object space)\n" + - "#c[61].x = wave frequency\n" + - "#c[61].y = wave amplitude\n" + - "#c[62] = PI constants\n" + - "#c[63] = Taylor series constants (see below)\n" + + "#sinFreqAmplitude.x = wave frequency\n" + + "#sinFreqAmplitude.y = wave amplitude\n" + + "#sinTaylorConst2 = PI constants\n" + + "#sinTaylorConst1 = Taylor series constants (see below)\n" + "\n" + - "MOV R0, v[OPOS]; \n" + + programSetup + + "MOV r0, iPos; \n" + "\n" + "#calculate distance from (0, 0, 0)\n" + - "DP3 R3.x, R0, R0;\n" + - "RSQ R3.x, R3.x;\n" + - "RCP R3.x, R3.x;\n" + + "DP3 r3.x, r0, r0;\n" + + "RSQ r3.x, r3.x;\n" + + "RCP r3.x, r3.x;\n" + "\n" + - "MUL R3.x, R3.x, c[61].x; # wave frequency\n" + - "ADD R3.x, R3.x, c[60].x; # phase animation\n" + + "MUL r3.x, r3.x, sinFreqAmplitude.x; # wave frequency\n" + + "ADD r3.x, r3.x, phaseAnim.x; # phase animation\n" + "\n" + "#reduce to period of 2*PI\n" + - "MUL R2, R3.x, c[62].x;\n" + - "EXP R4, R2.x; # R4.y = R2.x - floor(R2.x)\n" + - "MUL R3.x, R4.y, c[62].y;\n" + + "MUL r2, r3.x, sinTaylorConst2.x;\n" + + "EXP r4, r2.x; # r4.y = r2.x - floor(r2.x)\n" + + "MUL r3.x, r4.y, sinTaylorConst2.y;\n" + "\n" + "# offset to -PI - PI\n" + - "ADD R3.x, R3.x, -c[62].z;\n" + + "ADD r3.x, r3.x, -sinTaylorConst2.z;\n" + "\n" + "#Sine approximation using Taylor series (accurate between -PI and PI) :\n" + "#sin(x) = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + ...\n" + "#sin(x) ~= x*(1 - (x^2)*(1/3! - (x^2)(1/5! - (x^2)/7! )))\n" + "# = x * (a - y*(b - y*(c - y*d)))\n" + "#where\n" + - "#a = 1.0 c[63].x\n" + - "#b = 1/3! c[63].y\n" + - "#c = 1/5! c[63].z\n" + - "#d = 1/7! c[63].w\n" + - "#y = x^2 R2\n" + + "#a = 1.0 sinTaylorConst1.x\n" + + "#b = 1/3! sinTaylorConst1.y\n" + + "#c = 1/5! sinTaylorConst1.z\n" + + "#d = 1/7! sinTaylorConst1.w\n" + + "#y = x^2 r2\n" + "\n" + - "#R1.x = sin(R3.x);\n" + + "#r1.x = sin(r3.x);\n" + "\n" + - "MUL R2, R3.x, R3.x;\n" + - "MAD R1, -R2, c[63].w, c[63].z;\n" + - "MAD R1, R1, -R2, c[63].y;\n" + - "MAD R1, R1, -R2, c[63].x;\n" + - "MUL R1, R1, R3.x;\n" + + "MUL r2, r3.x, r3.x;\n" + + "MAD r1, -r2, sinTaylorConst1.w, sinTaylorConst1.z;\n" + + "MAD r1, r1, -r2, sinTaylorConst1.y;\n" + + "MAD r1, r1, -r2, sinTaylorConst1.x;\n" + + "MUL r1, r1, r3.x;\n" + "\n" + "#displace vertex along normal\n" + - "MUL R1.x, R1.x, c[61].y;\n" + - "MAX R1.x, R1.x, c[64].x; # r1.x = max(r1.x, 0.0);\n" + - "MUL R2.xyz, v[NRML], R1.x;\n" + - "ADD R0.xyz, R0, R2;\n" + + "MUL r1.x, r1.x, sinFreqAmplitude.y;\n" + + "MAX r1.x, r1.x, smoothstep.x; # r1.x = max(r1.x, 0.0);\n" + + "MUL r2.xyz, iNorm, r1.x;\n" + + "ADD r0.xyz, r0, r2;\n" + "\n" + "#simple lighting\n" + - "DP3 R1.x, c[4], v[NRML] ; # normal x MV-1T -> lighting normal\n" + - "DP3 R1.y, c[5], v[NRML] ;\n" + - "DP3 R1.z, c[6], v[NRML] ;\n" + + "DP3 r1.x, mvit[0], iNorm ; # normal x MV-1T -> lighting normal\n" + + "DP3 r1.y, mvit[1], iNorm ;\n" + + "DP3 r1.z, mvit[2], iNorm ;\n" + "\n" + - "DP3 R2, c[32], R1 ; # light position DOT normal\n" + - "MUL o[COL0].xyz, R2, c[35] ; # col = ldotn * diffuse\n" + + "DP3 r2, lightPos, r1 ; # light position DOT normal\n" + + "MUL oCol0.xyz, r2, diffuseCol ; # col = ldotn * diffuse\n" + "\n" + - "MOV o[TEX0], v[TEX0];\n" + + "MOV oTex0, iTex;\n" + "\n" + - "DP4 o[HPOS].x, c[0], R0 ; # object x MVP -> clip\n" + - "DP4 o[HPOS].y, c[1], R0 ;\n" + - "DP4 o[HPOS].z, c[2], R0 ;\n" + - "DP4 o[HPOS].w, c[3], R0 ;\n" + + "DP4 oPos.x, mvp[0], r0 ; # object x MVP -> clip\n" + + "DP4 oPos.y, mvp[1], r0 ;\n" + + "DP4 oPos.z, mvp[2], r0 ;\n" + + "DP4 oPos.w, mvp[3], r0 ;\n" + "\n" + - "END", + "END\n", // // Wave // - "!!VP1.0\n" + + "!!ARBvp1.0\n" + "# Perturb vertices in clip space with sine wave\n" + "# x += sin((y*freq)+anim) * amp\n" + - "DP4 R0.x, c[0], v[OPOS] ;\n" + - "DP4 R0.y, c[1], v[OPOS] ;\n" + - "DP4 R0.z, c[2], v[OPOS] ;\n" + - "DP4 R0.w, c[3], v[OPOS] ;\n" + + programSetup + + "DP4 r0.x, mvp[0], iPos ;\n" + + "DP4 r0.y, mvp[1], iPos ;\n" + + "DP4 r0.z, mvp[2], iPos ;\n" + + "DP4 r0.w, mvp[3], iPos ;\n" + "\n" + - "MUL R3.x, R0.y, c[61].x; # wave frequency\n" + - "ADD R3.x, R3.x, c[60].x; # phase animation\n" + + "MUL r3.x, r0.y, sinFreqAmplitude.x; # wave frequency\n" + + "ADD r3.x, r3.x, phaseAnim.x; # phase animation\n" + "\n" + "# reduce to period of 2*PI\n" + - "MUL R2, R3.x, c[62].x;\n" + - "EXP R4, R2.x; # R4.y = R2.x - floor(R2.x)\n" + - "MUL R3.x, R4.y, c[62].y;\n" + + "MUL r2, r3.x, sinTaylorConst2.x;\n" + + "EXP r4, r2.x; # r4.y = r2.x - floor(r2.x)\n" + + "MUL r3.x, r4.y, sinTaylorConst2.y;\n" + "\n" + "# offset to -PI - PI\n" + - "ADD R3.x, R3.x, -c[62].z;\n" + + "ADD r3.x, r3.x, -sinTaylorConst2.z;\n" + "\n" + - "# R1.x = sin(R3.x);\n" + - "MUL R2, R3.x, R3.x;\n" + - "MAD R1, -R2, c[63].w, c[63].z;\n" + - "MAD R1, R1, -R2, c[63].y;\n" + - "MAD R1, R1, -R2, c[63].x;\n" + - "MUL R1, R1, R3.x;\n" + + "# r1.x = sin(r3.x);\n" + + "MUL r2, r3.x, r3.x;\n" + + "MAD r1, -r2, sinTaylorConst1.w, sinTaylorConst1.z;\n" + + "MAD r1, r1, -r2, sinTaylorConst1.y;\n" + + "MAD r1, r1, -r2, sinTaylorConst1.x;\n" + + "MUL r1, r1, r3.x;\n" + "\n" + - "MAD R0.x, R1.x, c[61].y, R0.x;\n" + + "MAD r0.x, r1.x, sinFreqAmplitude.y, r0.x;\n" + "\n" + "# simple lighting\n" + - "DP3 R1.x, c[4], v[NRML] ; # normal x MV-1T -> lighting normal\n" + - "DP3 R1.y, c[5], v[NRML] ;\n" + - "DP3 R1.z, c[6], v[NRML] ;\n" + - "DP3 R2, c[32], R1 ; # light position DOT normal\n" + - "MUL o[COL0].xyz, R2, c[35] ; # col = ldotn * diffuse\n" + - "MOV o[TEX0], v[TEX0];\n" + + "DP3 r1.x, mvit[0], iNorm ; # normal x MV-1T -> lighting normal\n" + + "DP3 r1.y, mvit[1], iNorm ;\n" + + "DP3 r1.z, mvit[2], iNorm ;\n" + + "DP3 r2, lightPos, r1 ; # light position DOT normal\n" + + "MUL oCol0.xyz, r2, diffuseCol ; # col = ldotn * diffuse\n" + + "MOV oTex0, iTex;\n" + "\n" + - "MOV o[HPOS], R0;\n" + + "MOV oPos, r0;\n" + "\n" + - "END", + "END\n", // // Fisheye // - "!!VP1.0\n" + + "!!ARBvp1.0\n" + "#Fisheye distortion based on function:\n" + "#f(x)=(d+1)/(d+(1/x))\n" + "#maps the [0,1] interval monotonically onto [0,1]\n" + "\n" + - "#c[61].z = d\n" + - "#c[61].w = d+1\n" + + "#sinFreqAmplitude.z = d\n" + + "#sinFreqAmplitude.w = d+1\n" + + programSetup + "\n" + - "DP4 R0.x, c[0], v[OPOS] ;\n" + - "DP4 R0.y, c[1], v[OPOS] ;\n" + - "DP4 R0.z, c[2], v[OPOS] ;\n" + - "DP4 R0.w, c[3], v[OPOS] ;\n" + + "DP4 r0.x, mvp[0], iPos ;\n" + + "DP4 r0.y, mvp[1], iPos ;\n" + + "DP4 r0.z, mvp[2], iPos ;\n" + + "DP4 r0.w, mvp[3], iPos ;\n" + "\n" + "# do perspective divide\n" + - "RCP R1, R0.w;\n" + - "MUL R0, R0, R1.w;\n" + + "RCP r1, r0.w;\n" + + "MUL r0, r0, r1.w;\n" + "\n" + - "MAX R1, R0, -R0; # r1 = abs(r0)\n" + + "MAX r1, r0, -r0; # r1 = abs(r0)\n" + "\n" + - "SLT R2, R0, c[64].x; # r2 = (r0 < 0.0) ? 1.0 : 0.0\n" + - "SGE R3, R0, c[64].x; # r3 = (r0 >= 0.0) ? 1.0 : 0.0\n" + + "SLT r2, r0, smoothstep.x; # r2 = (r0 < 0.0) ? 1.0 : 0.0\n" + + "SGE r3, r0, smoothstep.x; # r3 = (r0 >= 0.0) ? 1.0 : 0.0\n" + "\n" + "# distort x\n" + "# h(x)=(d+1)/(d+(1/x))\n" + - "RCP R1.x, R1.x; # r1 = 1 / r1\n" + - "ADD R1.x, R1.x, c[61].z; # r1 += d\n" + - "RCP R1.x, R1.x; # r1 = 1 / r1\n" + - "MUL R1.x, R1.x, c[61].w; # r1 *= d + 1\n" + + "RCP r1.x, r1.x; # r1 = 1 / r1\n" + + "ADD r1.x, r1.x, sinFreqAmplitude.z; # r1 += d\n" + + "RCP r1.x, r1.x; # r1 = 1 / r1\n" + + "MUL r1.x, r1.x, sinFreqAmplitude.w; # r1 *= d + 1\n" + "\n" + "# distort y\n" + - "RCP R1.y, R1.y; # r1 = 1 / r1\n" + - "ADD R1.y, R1.y, c[61].z; # r1 += d\n" + - "RCP R1.y, R1.y; # r1 = 1 / r1\n" + - "MUL R1.y, R1.y, c[61].w; # r1 *= d + 1\n" + + "RCP r1.y, r1.y; # r1 = 1 / r1\n" + + "ADD r1.y, r1.y, sinFreqAmplitude.z; # r1 += d\n" + + "RCP r1.y, r1.y; # r1 = 1 / r1\n" + + "MUL r1.y, r1.y, sinFreqAmplitude.w; # r1 *= d + 1\n" + "\n" + "# handle negative cases\n" + - "MUL R4.xy, R1, R3; # r4 = r1 * r3\n" + - "MAD R1.xy, R1, -R2, R4; # r1 = r1 * -r2 + r4\n" + + "MUL r4.xy, r1, r3; # r4 = r1 * r3\n" + + "MAD r1.xy, r1, -r2, r4; # r1 = r1 * -r2 + r4\n" + "\n" + "# simple lighting\n" + - "DP3 R2.x, c[4], v[NRML] ; # normal x MV-1T -> lighting normal\n" + - "DP3 R2.y, c[5], v[NRML] ;\n" + - "DP3 R2.z, c[6], v[NRML] ;\n" + - "DP3 R3, c[32], R2 ; # light position DOT normal\n" + - "MUL o[COL0].xyz, R3, c[35] ; # col = ldotn * diffuse\n" + + "DP3 r2.x, mvit[0], iNorm ; # normal x MV-1T -> lighting normal\n" + + "DP3 r2.y, mvit[1], iNorm ;\n" + + "DP3 r2.z, mvit[2], iNorm ;\n" + + "DP3 r3, lightPos, r2 ; # light position DOT normal\n" + + "MUL oCol0.xyz, r3, diffuseCol ; # col = ldotn * diffuse\n" + "\n" + - "MOV o[TEX0], v[TEX0];\n" + + "MOV oTex0, iTex;\n" + "\n" + - "MOV o[HPOS], R1;\n" + + "MOV oPos, r1;\n" + "\n" + - "END", + "END\n", // // Spherize // - "!!VP1.0\n" + + "!!ARBvp1.0\n" + "# Spherical fish-eye distortion\n" + "# in clip space\n" + - "DP4 R0.x, c[0], v[OPOS];\n" + - "DP4 R0.y, c[1], v[OPOS];\n" + - "DP4 R0.z, c[2], v[OPOS];\n" + - "DP4 R0.w, c[3], v[OPOS];\n" + + programSetup + + "DP4 r0.x, mvp[0], iPos;\n" + + "DP4 r0.y, mvp[1], iPos;\n" + + "DP4 r0.z, mvp[2], iPos;\n" + + "DP4 r0.w, mvp[3], iPos;\n" + "\n" + "# do perspective divide\n" + - "RCP R1.x, R0.w;\n" + - "MUL R2, R0, R1.x;\n" + + "RCP r1.x, r0.w;\n" + + "MUL r2, r0, r1.x;\n" + "\n" + "# calculate distance from centre\n" + - "MUL R1.x, R2.x, R2.x;\n" + - "MAD R1.x, R2.y, R2.y, R1.x;\n" + - "RSQ R1.x, R1.x; # r1.x = 1 / sqrt(x*x+y*y)\n" + + "MUL r1.x, r2.x, r2.x;\n" + + "MAD r1.x, r2.y, r2.y, r1.x;\n" + + "RSQ r1.x, r1.x; # r1.x = 1 / sqrt(x*x+y*y)\n" + "\n" + "# calculate r3 = normalized direction vector\n" + - "MUL R3.xy, R0, R1.x;\n" + + "MUL r3.xy, r0, r1.x;\n" + "\n" + - "RCP R1.x, R1.x; # r1.x = actual distance\n" + - "MIN R1.x, R1.x, c[64].y; # r1.x = min(r1.x, 1.0)\n" + + "RCP r1.x, r1.x; # r1.x = actual distance\n" + + "MIN r1.x, r1.x, smoothstep.y; # r1.x = min(r1.x, 1.0)\n" + "\n" + "# remap based on: f(x) = sqrt(1-x^2)\n" + - "ADD R1.x, c[64].y, -R1.x;\n" + - "MAD R1.x, -R1.x, R1.x, c[64].y;\n" + - "RSQ R1.x, R1.x;\n" + - "RCP R1.x, R1.x;\n" + + "ADD r1.x, smoothstep.y, -r1.x;\n" + + "MAD r1.x, -r1.x, r1.x, smoothstep.y;\n" + + "RSQ r1.x, r1.x;\n" + + "RCP r1.x, r1.x;\n" + "\n" + "# move vertex to new distance from centre\n" + - "MUL R0.xy, R3, R1.x;\n" + + "MUL r0.xy, r3, r1.x;\n" + "\n" + "# simple lighting\n" + - "DP3 R2.x, c[4], v[NRML]; # normal x MV-1T -> lighting normal\n" + - "DP3 R2.y, c[5], v[NRML];\n" + - "DP3 R2.z, c[6], v[NRML];\n" + - "DP3 R3, c[32], R2 ; # light position DOT normal\n" + - "MUL o[COL0].xyz, R3, c[35] ; # col = ldotn * diffuse\n" + + "DP3 r2.x, mvit[0], iNorm; # normal x MV-1T -> lighting normal\n" + + "DP3 r2.y, mvit[1], iNorm;\n" + + "DP3 r2.z, mvit[2], iNorm;\n" + + "DP3 r3, lightPos, r2 ; # light position DOT normal\n" + + "MUL oCol0.xyz, r3, diffuseCol ; # col = ldotn * diffuse\n" + "\n" + - "MOV o[TEX0], v[TEX0];\n" + + "MOV oTex0, iTex;\n" + "\n" + - "MOV o[HPOS], R0;\n" + + "MOV oPos, r0;\n" + "\n" + - "END", - + "END\n", + // // Ripple // - "!!VP1.0\n" + + "!!ARBvp1.0\n" + "# Ripple distortion\n" + - "DP4 R0.x, c[0], v[OPOS];\n" + - "DP4 R0.y, c[1], v[OPOS];\n" + - "DP4 R0.z, c[2], v[OPOS];\n" + - "DP4 R0.w, c[3], v[OPOS];\n" + + programSetup + + "DP4 r0.x, mvp[0], iPos;\n" + + "DP4 r0.y, mvp[1], iPos;\n" + + "DP4 r0.z, mvp[2], iPos;\n" + + "DP4 r0.w, mvp[3], iPos;\n" + "\n" + "# do perspective divide\n" + - "RCP R1.x, R0.w;\n" + - "MUL R4, R0, R1.x;\n" + + "RCP r1.x, r0.w;\n" + + "MUL r4, r0, r1.x;\n" + "\n" + "# calculate distance from centre\n" + - "MUL R1.x, R4.x, R4.x;\n" + - "MAD R1.x, R4.y, R4.y, R1.x;\n" + - "RSQ R1.x, R1.x; " + + "MUL r1.x, r4.x, r4.x;\n" + + "MAD r1.x, r4.y, r4.y, r1.x;\n" + + "RSQ r1.x, r1.x;\n" + "\n" + - "RCP R1.x, R1.x; " + + "RCP r1.x, r1.x;\n" + "\n" + - "MUL R1.x, R1.x, c[61].x; # wave frequency\n" + - "ADD R1.x, R1.x, c[60].x; # phase animation\n" + + "MUL r1.x, r1.x, sinFreqAmplitude.x; # wave frequency\n" + + "ADD r1.x, r1.x, phaseAnim.x; # phase animation\n" + "\n" + "# reduce to period of 2*PI\n" + - "MUL R2, R1.x, c[62].x; # R2 = R1 / 2.0 * PI\n" + - "EXP R4, R2.x; # R4.y = R2.x - floor(R2.x)\n" + - "MUL R1.x, R4.y, c[62].y;\n" + + "MUL r2, r1.x, sinTaylorConst2.x; # r2 = r1 / 2.0 * PI\n" + + "EXP r4, r2.x; # r4.y = r2.x - floor(r2.x)\n" + + "MUL r1.x, r4.y, sinTaylorConst2.y;\n" + "\n" + "# offset to -PI - PI\n" + - "ADD R1.x, R1.x, -c[62].z;\n" + + "ADD r1.x, r1.x, -sinTaylorConst2.z;\n" + "\n" + - "# R3.x = sin(R1.x)\n" + - "MUL R2, R1.x, R1.x;\n" + - "MAD R3, -R2, c[63].w, c[63].z;\n" + - "MAD R3, R3, -R2, c[63].y;\n" + - "MAD R3, R3, -R2, c[63].x;\n" + - "MUL R3, R3, R1.x;\n" + + "# r3.x = sin(r1.x)\n" + + "MUL r2, r1.x, r1.x;\n" + + "MAD r3, -r2, sinTaylorConst1.w, sinTaylorConst1.z;\n" + + "MAD r3, r3, -r2, sinTaylorConst1.y;\n" + + "MAD r3, r3, -r2, sinTaylorConst1.x;\n" + + "MUL r3, r3, r1.x;\n" + "\n" + - "MUL R3.x, R3.x, c[61].y;\n" + + "MUL r3.x, r3.x, sinFreqAmplitude.y;\n" + "\n" + "# move vertex towards centre based on distance\n" + - "MAD R0.xy, R0, -R3.x, R0;\n" + + "MAD r0.xy, r0, -r3.x, r0;\n" + "\n" + "# lighting\n" + - "DP3 R2.x, c[4], v[NRML]; # normal x MV-1T -> lighting normal\n" + - "DP3 R2.y, c[5], v[NRML];\n" + - "DP3 R2.z, c[6], v[NRML];\n" + - "DP3 R3, c[32], R2; # light position DOT normal\n" + - "MUL o[COL0].xyz, R3, c[35]; # col = ldotn * diffuse\n" + + "DP3 r2.x, mvit[0], iNorm; # normal x MV-1T -> lighting normal\n" + + "DP3 r2.y, mvit[1], iNorm;\n" + + "DP3 r2.z, mvit[2], iNorm;\n" + + "DP3 r3, lightPos, r2; # light position DOT normal\n" + + "MUL oCol0.xyz, r3, diffuseCol; # col = ldotn * diffuse\n" + "\n" + - "MOV o[TEX0], v[TEX0];\n" + + "MOV oTex0, iTex;\n" + "\n" + - "MOV o[HPOS], R0;\n" + + "MOV oPos, r0;\n" + "\n" + - "END", + "END\n", // // Twist // - "!!VP1.0 # Twist\n" + - "MOV R0, v[OPOS];\n" + + "!!ARBvp1.0\n" + + "# Twist\n" + + programSetup + + "MOV r0, iPos;\n" + "\n" + - "MUL R1.x, R0.x, c[61].x; # frequency\n" + + "MUL r1.x, r0.x, sinFreqAmplitude.x; # frequency\n" + "\n" + "# calculate sin(angle) and cos(angle)\n" + - "ADD R1.y, R1.x, -c[62].w; # R1.y = R1.x + PI/2.0\n" + + "ADD r1.y, r1.x, -sinTaylorConst2.w; # r1.y = r1.x + PI/2.0\n" + "\n" + "# reduce to period of 2*PI\n" + - "MUL R2, R1, c[62].x; # R2 = R1 / 2.0 * PI\n" + - "EXP R3.y, R2.x; # R2.y = R2.x - floor(R2.x)\n" + - "MOV R3.x, R3.y;\n" + - "EXP R3.y, R2.y; # R2.y = R2.x - floor(R2.x)\n" + - "MAD R2, R3, c[62].y, -c[62].z; # R2 = (R3 * 2.0*PI) - M_PI\n" + - "\n" + - "# R4.x = sin(R2.x);\n" + - "# R4.y = cos(R2.y);\n" + + "MUL r2, r1, sinTaylorConst2.x; # r2 = r1 / 2.0 * PI\n" + + "EXP r3.y, r2.x; # r2.y = r2.x - floor(r2.x)\n" + + "MOV r3.x, r3.y;\n" + + "EXP r3.y, r2.y; # r2.y = r2.x - floor(r2.x)\n" + + "MAD r2, r3, sinTaylorConst2.y, -sinTaylorConst2.z; # r2 = (r3 * 2.0*PI) - M_PI\n" + + "\n" + + "# r4.x = sin(r2.x);\n" + + "# r4.y = cos(r2.y);\n" + "# parallel taylor series\n" + - "MUL R3, R2, R2;\n" + - "MAD R4, -R3, c[63].w, c[63].z;\n" + - "MAD R4, R4, -R3, c[63].y;\n" + - "MAD R4, R4, -R3, c[63].x;\n" + - "MUL R4, R4, R2;\n" + + "MUL r3, r2, r2;\n" + + "MAD r4, -r3, sinTaylorConst1.w, sinTaylorConst1.z;\n" + + "MAD r4, r4, -r3, sinTaylorConst1.y;\n" + + "MAD r4, r4, -r3, sinTaylorConst1.x;\n" + + "MUL r4, r4, r2;\n" + "\n" + "# x y z w\n" + "# R:\n" + @@ -928,38 +961,38 @@ public class VertexProgWarp { "# s = sin(a)\n" + "\n" + "# calculate rotation around X\n" + - "MOV R1, R0;\n" + + "MOV r1, r0;\n" + "\n" + - "MUL R1.y, R0.y, R4.y;\n" + - "MAD R1.y, R0.z, -R4.x, R1.y; # ny = y*cos(a) - z*sin(a)\n" + + "MUL r1.y, r0.y, r4.y;\n" + + "MAD r1.y, r0.z, -r4.x, r1.y; # ny = y*cos(a) - z*sin(a)\n" + "\n" + - "MUL R1.z, R0.y, R4.x;\n" + - "MAD R1.z, R0.z, R4.y, R1.z; # nz = y*sin(a) + z*cos(a)\n" + + "MUL r1.z, r0.y, r4.x;\n" + + "MAD r1.z, r0.z, r4.y, r1.z; # nz = y*sin(a) + z*cos(a)\n" + "\n" + - "DP4 o[HPOS].x, c[0], R1; # object x MVP -> clip\n" + - "DP4 o[HPOS].y, c[1], R1;\n" + - "DP4 o[HPOS].z, c[2], R1;\n" + - "DP4 o[HPOS].w, c[3], R1;\n" + + "DP4 oPos.x, mvp[0], r1; # object x MVP -> clip\n" + + "DP4 oPos.y, mvp[1], r1;\n" + + "DP4 oPos.z, mvp[2], r1;\n" + + "DP4 oPos.w, mvp[3], r1;\n" + "\n" + "# rotate normal\n" + - "MOV R2, v[NRML];\n" + - "MUL R2.y, v[NRML].y, R4.y;\n" + - "MAD R2.y, v[NRML].z, -R4.x, R2.y; # ny = y*cos(a) - z*sin(a)\n" + + "MOV r2, iNorm;\n" + + "MUL r2.y, iNorm.y, r4.y;\n" + + "MAD r2.y, iNorm.z, -r4.x, r2.y; # ny = y*cos(a) - z*sin(a)\n" + "\n" + - "MUL R2.z, v[NRML].y, R4.x;\n" + - "MAD R2.z, v[NRML].z, R4.y, R2.z; # nz = y*sin(a) + z*cos(a)\n" + + "MUL r2.z, iNorm.y, r4.x;\n" + + "MAD r2.z, iNorm.z, r4.y, r2.z; # nz = y*sin(a) + z*cos(a)\n" + "\n" + "# diffuse lighting\n" + - "DP3 R1.x, c[4], R2; # normal x MV-1T -> lighting normal\n" + - "DP3 R1.y, c[5], R2;\n" + - "DP3 R1.z, c[6], R2;\n" + + "DP3 r1.x, mvit[0], r2; # normal x MV-1T -> lighting normal\n" + + "DP3 r1.y, mvit[1], r2;\n" + + "DP3 r1.z, mvit[2], r2;\n" + "\n" + - "DP3 R3, c[32], R1; # light position DOT normal\n" + - "MUL o[COL0].xyz, R3, c[35]; # col = ldotn * diffuse\n" + + "DP3 r3, lightPos, r1; # light position DOT normal\n" + + "MUL oCol0.xyz, r3, diffuseCol; # col = ldotn * diffuse\n" + "\n" + - "MOV o[TEX0], v[TEX0];\n" + + "MOV oTex0, iTex;\n" + "\n" + - "END" + "END\n" }; private void runExit() { -- cgit v1.2.3