= 64.0; /************* UN-TWEAKABLES **************/ float4x4 WorldITXf : WorldInverseTranspose < string UIWidget="None"; >; float4x4 WorldViewProjectionXf : WorldViewProjection < string UIWidget="None"; >; float4x4 WorldXf : World < string UIWidget="None"; >; float4x4 ViewIXf : ViewInverse < string UIWidget="None"; >; float2 ScreenSize : VIEWPORTPIXELSIZE < string UIWidget="None"; >; /************ Texture ***********/ float4 mip_colors(float2 Pos:POSITION,float2 dP:PSIZE) : COLOR { float d = 1.0/((dP.x+dP.y)/2.0); float3 p = 0; if (d < 8) { p = 1; } else { float q = log(d)/log(2); q = floor(q+.5); if (fmod(q,3) == 0) { p.x = .5;} if (fmod(q,6) == 0) { p.x = 1;} if (fmod(q,2) == 0) { p.y = .5;} if (fmod(q,4) == 0) { p.y = 1;} q = q / TEX_LEVELS; p.z = q; } return float4(p,1); } texture MipTex < string TextureType = "2D"; string function = "mip_colors"; string UIWidget = "None"; int width = TEX_RESO; int height = TEX_RESO; >; sampler MipSamp = sampler_state { texture = ; AddressU = WRAP; AddressV = WRAP; MIPFILTER = LINEAR; MINFILTER = LINEAR; MAGFILTER = LINEAR; }; /************* DATA STRUCTS **************/ /* data from application vertex buffer */ struct appdata { float3 Pos : POSITION; float4 UV : TEXCOORD0; // float4 Normal : NORMAL; // superfluous for now // float4 Tangent : TANGENT0; // float4 Binormal : BINORMAL0; }; /* data passed from vertex shader to pixel shader */ struct vertexOutput { float4 HPosition : POSITION; float2 UV : TEXCOORD0; }; /*********** vertex shader for all ******/ vertexOutput simpleVS(appdata IN) { vertexOutput OUT; float4 Po = float4(IN.Pos,1.0); OUT.HPosition = mul(Po, WorldViewProjectionXf); OUT.UV = IN.UV.xy; return OUT; } /********* utility functions for pixel shaders ********/ float4 vecColor(float4 V) { float3 Nc = 0.5 * ((V.xyz) + ((1.0).xxx)); return float4(Nc,1); } float4 vecColor(float3 V) { float3 Nc = 0.5 * ((V.xyz) + ((1.0).xxx)); return float4(Nc,1); } float4 vecColorN(float4 V) { float3 Nc = 0.5 * (normalize(V.xyz) + ((1.0).xxx)); return float4(Nc,1); } float4 vecColorN(float3 V) { float3 Nc = 0.5 * (normalize(V.xyz) + ((1.0).xxx)); return float4(Nc,1); } /********* pixel shaders ********/ float4 uvcPS(vertexOutput IN) : COLOR { return float4(IN.UV,0,1); } float4 uvDerivsPS(vertexOutput IN) : COLOR { float2 dd = Scale * (abs(ddx(IN.UV)) + abs(ddy(IN.UV))); return float4(dd,0,1); } float4 dv_col(float2 d) { float4 dd = float4(0,0,0,1); if (d.x > TwoTD) { dd.x = 1.0;} if (d.y > TwoTD) { dd.y = 1.0;} if (d.x < HalfTD) { dd.z = 1.0;} //if (d.y < HalfTD) { dd.z = 1.0;} return(dd); } float4 texSizeXPS(vertexOutput IN) : COLOR { return dv_col(abs(ddx(IN.UV))); } float4 texSizeYPS(vertexOutput IN) : COLOR { return dv_col(abs(ddy(IN.UV))); } float4 texSizeDPS_old(vertexOutput IN) : COLOR { float2 dx = ddx(IN.UV); float2 dy = ddy(IN.UV); float2 du = float2(dx.x,dy.x); float2 dv = float2(dx.y,dy.y); float d = sqrt(dot(du,du) + dot(dv,dv)); float4 yc = dv_col(abs(ddy(IN.UV))); float4 dd = float4(0,0,0,1); if (d > TwoDiag) { dd.x = 1.0;} if (d > TwoDiag) { dd.y = 1.0;} if (d < HalfDiag) { dd.z = 1.0;} //if (d.y < HalfDiag) { dd.z = 1.0;} return(dd); } float4 texSizeDPS(vertexOutput IN) : COLOR { float2 dx = ddx(IN.UV); float2 dy = ddy(IN.UV); float d = sqrt(dot(dx,dx) + dot(dy,dy)); float4 yc = dv_col(abs(ddy(IN.UV))); float4 dd = float4(0,0,0,1); if (d > TwoDiag) { dd.x = 1.0;} if (d > TwoDiag) { dd.y = 1.0;} if (d < HalfDiag) { dd.z = 1.0;} //if (d.y < HalfDiag) { dd.z = 1.0;} return(dd); } float4 mtPS(vertexOutput IN) : COLOR { return tex2D(MipSamp,IN.UV); } /****************************************************************/ /****************************************************************/ /******* TECHNIQUES *********************************************/ /****************************************************************/ /****************************************************************/ #define TECH(name,vertShader,pixShader) technique name { pass p0 { \ VertexShader = compile vs_2_0 vertShader (); \ ZEnable = true; ZWriteEnable = true; CullMode = None; \ PixelShader = compile ps_2_a pixShader (); } } #define TECH3(name,vertShader,pixShader) technique name { pass p0 { \ VertexShader = compile vs_3_0 vertShader (); \ ZEnable = true; ZWriteEnable = true; CullMode = None; \ PixelShader = compile ps_3_0 pixShader (); } } TECH(texRezDiagonal,simpleVS,texSizeDPS) TECH(texRezX,simpleVS,texSizeXPS) TECH(texRezY,simpleVS,texSizeYPS) TECH(uvValues,simpleVS,uvcPS) TECH(uvDerivs,simpleVS,uvDerivsPS) TECH(mipTex,simpleVS,mtPS) /***************************** eof ***/]]>