= 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 ***/]]>