347 lines
11 KiB
Plaintext
347 lines
11 KiB
Plaintext
//
|
|
// Interaction shader which allows a separate alpha testing mask (the default alpha test one uses the
|
|
// diffuse alpha channel) this allows speparate scrolls,...
|
|
// (Set usking mask and maskMatrix renderbindings)
|
|
//
|
|
|
|
renderProgram ambient/separate_depth {
|
|
hwSkinningVersion ambient/separate_depth_skinning_matrix ambient/separate_depth_hardskinning_matrix
|
|
|
|
state force {
|
|
depthFunc less // so it looks at what's already in the depth buffer
|
|
//blend GL_ZERO, GL_ONE
|
|
//blend GL_ONE, GL_ZERO
|
|
}
|
|
|
|
program vertex arb { <%
|
|
OPTION ARB_position_invariant;
|
|
|
|
TEMP bitangent;
|
|
TEMP R0, R1, R2;
|
|
|
|
PARAM defaultTexCoord = { 0, 0.5, 0, 1 };
|
|
|
|
XPD bitangent, $normalAttrib, $tangentAttrib;
|
|
MUL bitangent, bitangent, $tangentAttrib.w;
|
|
|
|
# textures 1 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[1], defaultTexCoord;
|
|
DP4 result.texcoord[1].x, $texCoordAttrib, $bumpMatrix_s;
|
|
DP4 result.texcoord[1].y, $texCoordAttrib, $bumpMatrix_t;
|
|
|
|
# textures 4 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[4], defaultTexCoord;
|
|
DP4 result.texcoord[4].x, $texCoordAttrib, $diffuseMatrix_s;
|
|
DP4 result.texcoord[4].y, $texCoordAttrib, $diffuseMatrix_t;
|
|
|
|
# textures 2 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[0], defaultTexCoord;
|
|
DP4 result.texcoord[0].x, $texCoordAttrib, $maskMatrix_s;
|
|
DP4 result.texcoord[0].y, $texCoordAttrib, $maskMatrix_t;
|
|
|
|
# generate the vertex color, which can be 1.0, color, or 1.0 - color
|
|
MAD result.color, $colorAttrib, $colorModulate, $colorAdd;
|
|
|
|
# build tangent space -> world space conversion matrix
|
|
DP3 result.texcoord[5].x, $transposedModelMatrix_x, $tangentAttrib;
|
|
DP3 result.texcoord[6].x, $transposedModelMatrix_y, $tangentAttrib;
|
|
DP3 result.texcoord[7].x, $transposedModelMatrix_z, $tangentAttrib;
|
|
|
|
DP3 result.texcoord[5].y, $transposedModelMatrix_x, bitangent;
|
|
DP3 result.texcoord[6].y, $transposedModelMatrix_y, bitangent;
|
|
DP3 result.texcoord[7].y, $transposedModelMatrix_z, bitangent;
|
|
|
|
DP3 result.texcoord[5].z, $transposedModelMatrix_x, $normalAttrib;
|
|
DP3 result.texcoord[6].z, $transposedModelMatrix_y, $normalAttrib;
|
|
DP3 result.texcoord[7].z, $transposedModelMatrix_z, $normalAttrib;
|
|
|
|
# flat ambient lookup texcoord
|
|
MOV result.texcoord[2], defaultTexCoord;
|
|
DP4 R0.x, $transposedModelMatrix_x, $positionAttrib;
|
|
DP4 R0.y, $transposedModelMatrix_y, $positionAttrib;
|
|
ADD R0, R0, 16384;
|
|
MUL result.texcoord[2], R0, 0.000030517578125;
|
|
%> }
|
|
|
|
program fragment arb { <%
|
|
OPTION ARB_precision_hint_fastest;
|
|
|
|
TEMP R0, R1, color, localNormal, ambient, localAmbient, mask;
|
|
|
|
PARAM subOne = { -1, -1, -1, -1 };
|
|
PARAM scaleTwo = { 2, 2, 2, 2 };
|
|
|
|
# lookup mask texture
|
|
TEX mask, fragment.texcoord[0], $mask, 2D;
|
|
SUB R1, mask.a, $parameters.x;
|
|
KIL R1;
|
|
|
|
# lookup normal map
|
|
TEX localNormal, fragment.texcoord[1], $bumpMap, 2D;
|
|
$if !r_dxnNormalMaps
|
|
MOV localNormal.x, localNormal.a;
|
|
$endif
|
|
MAD localNormal, localNormal, scaleTwo, subOne;
|
|
|
|
$if r_normalizeNormalMaps
|
|
MOV localNormal.z, 0;
|
|
DP3 R1.x, localNormal,localNormal;
|
|
ADD R1.x, 1, -R1.x;
|
|
RSQ R1.x, R1.x;
|
|
RCP localNormal.z, R1.x;
|
|
$endif
|
|
|
|
|
|
# put normal into world space
|
|
DP3 R0.x, fragment.texcoord[5], localNormal;
|
|
DP3 R0.y, fragment.texcoord[6], localNormal;
|
|
DP3 R0.z, fragment.texcoord[7], localNormal;
|
|
|
|
# get ambient from cubemap
|
|
TEX ambient, R0, $ambientCubeMap, CUBE;
|
|
MUL ambient, ambient, $ambientBrightness;
|
|
|
|
# modulate by the diffuse map and constant diffuse factor
|
|
TEX R0, fragment.texcoord[4], $diffuseMap, 2D;
|
|
MUL color, R0, $diffuseColor;
|
|
|
|
# modulate by ambient
|
|
MUL color, ambient, color;
|
|
|
|
# multiply with ambient brightness
|
|
MUL color, $ambientScale.x, color;
|
|
|
|
# modify by the vertex color
|
|
MUL result.color, color, fragment.color;
|
|
SUB result.color.a, 1, R0.a;
|
|
%> }
|
|
}
|
|
|
|
|
|
renderProgram ambient/separate_depth_skinning_matrix {
|
|
|
|
state force {
|
|
depthFunc less // so it looks at what's already in the depth buffer
|
|
}
|
|
|
|
program vertex arb { <%
|
|
TEMP bitangent, tangent, normal, position;
|
|
TEMP R0, R1, R2;
|
|
|
|
PARAM defaultTexCoord = { 0, 0.5, 0, 1 };
|
|
|
|
useTemplate skinningMatrix_ARB< "position", "normal", "tangent", "bitangent" >
|
|
|
|
# textures 1 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[1], defaultTexCoord;
|
|
DP4 result.texcoord[1].x, $texCoordAttrib, $bumpMatrix_s;
|
|
DP4 result.texcoord[1].y, $texCoordAttrib, $bumpMatrix_t;
|
|
|
|
# textures 4 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[4], defaultTexCoord;
|
|
DP4 result.texcoord[4].x, $texCoordAttrib, $diffuseMatrix_s;
|
|
DP4 result.texcoord[4].y, $texCoordAttrib, $diffuseMatrix_t;
|
|
|
|
# textures 2 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[0], defaultTexCoord;
|
|
DP4 result.texcoord[0].x, $texCoordAttrib, $maskMatrix_s;
|
|
DP4 result.texcoord[0].y, $texCoordAttrib, $maskMatrix_t;
|
|
|
|
# generate the vertex color, which can be 1.0, color, or 1.0 - color
|
|
MAD result.color, $colorAttrib, $colorModulate, $colorAdd;
|
|
|
|
# build tangent space -> world space conversion matrix
|
|
DP3 result.texcoord[5].x, $transposedModelMatrix_x, tangent;
|
|
DP3 result.texcoord[6].x, $transposedModelMatrix_y, tangent;
|
|
DP3 result.texcoord[7].x, $transposedModelMatrix_z, tangent;
|
|
|
|
DP3 result.texcoord[5].y, $transposedModelMatrix_x, bitangent;
|
|
DP3 result.texcoord[6].y, $transposedModelMatrix_y, bitangent;
|
|
DP3 result.texcoord[7].y, $transposedModelMatrix_z, bitangent;
|
|
|
|
DP3 result.texcoord[5].z, $transposedModelMatrix_x, normal;
|
|
DP3 result.texcoord[6].z, $transposedModelMatrix_y, normal;
|
|
DP3 result.texcoord[7].z, $transposedModelMatrix_z, normal;
|
|
|
|
# flat ambient lookup texcoord
|
|
MOV result.texcoord[2], defaultTexCoord;
|
|
DP4 R0.x, $transposedModelMatrix_x, position;
|
|
DP4 R0.y, $transposedModelMatrix_y, position;
|
|
ADD R0, R0, 16384;
|
|
MUL result.texcoord[2], R0, 0.000030517578125;
|
|
%> }
|
|
|
|
program fragment reference ambient/separate_depth
|
|
}
|
|
|
|
renderProgram ambient/separate_depth_hardskinning_matrix {
|
|
|
|
state force {
|
|
depthFunc less // so it looks at what's already in the depth buffer
|
|
}
|
|
|
|
program vertex arb { <%
|
|
TEMP bitangent, tangent, normal, position;
|
|
TEMP R0, R1, R2;
|
|
|
|
PARAM defaultTexCoord = { 0, 0.5, 0, 1 };
|
|
|
|
useTemplate hardSkinningMatrix_ARB< "position", "normal", "tangent", "bitangent" >
|
|
|
|
# textures 1 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[1], defaultTexCoord;
|
|
DP4 result.texcoord[1].x, $texCoordAttrib, $bumpMatrix_s;
|
|
DP4 result.texcoord[1].y, $texCoordAttrib, $bumpMatrix_t;
|
|
|
|
# textures 4 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[4], defaultTexCoord;
|
|
DP4 result.texcoord[4].x, $texCoordAttrib, $diffuseMatrix_s;
|
|
DP4 result.texcoord[4].y, $texCoordAttrib, $diffuseMatrix_t;
|
|
|
|
# textures 2 takes the base coordinates by the texture matrix
|
|
MOV result.texcoord[0], defaultTexCoord;
|
|
DP4 result.texcoord[0].x, $texCoordAttrib, $maskMatrix_s;
|
|
DP4 result.texcoord[0].y, $texCoordAttrib, $maskMatrix_t;
|
|
|
|
# generate the vertex color, which can be 1.0, color, or 1.0 - color
|
|
MAD result.color, $colorAttrib, $colorModulate, $colorAdd;
|
|
|
|
# build tangent space -> world space conversion matrix
|
|
DP3 result.texcoord[5].x, $transposedModelMatrix_x, tangent;
|
|
DP3 result.texcoord[6].x, $transposedModelMatrix_y, tangent;
|
|
DP3 result.texcoord[7].x, $transposedModelMatrix_z, tangent;
|
|
|
|
DP3 result.texcoord[5].y, $transposedModelMatrix_x, bitangent;
|
|
DP3 result.texcoord[6].y, $transposedModelMatrix_y, bitangent;
|
|
DP3 result.texcoord[7].y, $transposedModelMatrix_z, bitangent;
|
|
|
|
DP3 result.texcoord[5].z, $transposedModelMatrix_x, normal;
|
|
DP3 result.texcoord[6].z, $transposedModelMatrix_y, normal;
|
|
DP3 result.texcoord[7].z, $transposedModelMatrix_z, normal;
|
|
|
|
# flat ambient lookup texcoord
|
|
MOV result.texcoord[2], defaultTexCoord;
|
|
DP4 R0.x, $transposedModelMatrix_x, position;
|
|
DP4 R0.y, $transposedModelMatrix_y, position;
|
|
ADD R0, R0, 16384;
|
|
MUL result.texcoord[2], R0, 0.000030517578125;
|
|
%> }
|
|
|
|
program fragment reference ambient/separate_depth
|
|
}
|
|
|
|
renderProgram interaction/separate_depth {
|
|
interaction
|
|
|
|
amblitVersion interaction/separate_depth_amblit
|
|
ambientVersion ambient/separate_depth
|
|
hwSkinningVersion interaction/separate_depth_skinning_matrix interaction/separate_depth_hardskinning_matrix
|
|
|
|
state {
|
|
depthFunc lequal
|
|
maskDepth
|
|
blend GL_ONE, GL_ONE
|
|
}
|
|
|
|
program vertex reference interaction/basic
|
|
|
|
program fragment reference interaction/basic
|
|
}
|
|
|
|
renderProgram interaction/separate_depth_amblit {
|
|
interaction
|
|
|
|
ambientVersion ambient/separate_depth
|
|
hwSkinningVersion interaction/basic_skinning_matrix interaction/basic_hardskinning_matrix
|
|
|
|
state force {
|
|
depthFunc less
|
|
}
|
|
|
|
program vertex arb { <%
|
|
$define enable_separate_depth
|
|
$include "interaction/basic_vertex.inc"
|
|
%> }
|
|
|
|
program fragment arb { <%
|
|
$define enable_separate_depth
|
|
$define ambient
|
|
$define amblit
|
|
$include "interaction/basic_fragment.inc"
|
|
%> }
|
|
}
|
|
|
|
renderProgram interaction/separate_depth_skinning_matrix {
|
|
interaction
|
|
|
|
amblitVersion interaction/separate_depth_skinning_matrix_amblit
|
|
state {
|
|
depthFunc equal
|
|
maskDepth
|
|
blend GL_ONE, GL_ONE
|
|
}
|
|
|
|
program vertex reference interaction/basic_skinning_matrix
|
|
|
|
program fragment reference interaction/basic
|
|
}
|
|
|
|
renderProgram interaction/separate_depth_skinning_matrix_amblit {
|
|
interaction
|
|
|
|
state force {
|
|
depthFunc less
|
|
}
|
|
|
|
// program vertex reference interaction/basic_skinning_matrix
|
|
program vertex arb { <%
|
|
$define enable_separate_depth
|
|
$include "interaction/basic_skinning_matrix_vertex.inc"
|
|
%> }
|
|
|
|
// program fragment reference interaction/basic_amblit
|
|
program fragment arb { <%
|
|
$define enable_separate_depth
|
|
$define ambient
|
|
$define amblit
|
|
$include "interaction/basic_fragment.inc"
|
|
%> }
|
|
}
|
|
|
|
renderProgram interaction/separate_depth_hardskinning_matrix {
|
|
interaction
|
|
|
|
amblitVersion interaction/separate_depth_hardskinning_matrix_amblit
|
|
state {
|
|
depthFunc equal
|
|
maskDepth
|
|
blend GL_ONE, GL_ONE
|
|
}
|
|
|
|
program vertex reference interaction/basic_hardskinning_matrix
|
|
|
|
program fragment reference interaction/basic
|
|
}
|
|
|
|
renderProgram interaction/separate_depth_hardskinning_matrix_amblit {
|
|
interaction
|
|
|
|
state force {
|
|
depthFunc less
|
|
}
|
|
|
|
// program vertex reference interaction/basic_hardskinning_matrix
|
|
program vertex arb { <%
|
|
$define enable_separate_depth
|
|
$include "interaction/basic_hardskinning_matrix_vertex.inc"
|
|
%> }
|
|
|
|
program fragment arb { <%
|
|
$define enable_separate_depth
|
|
$define ambient
|
|
$define amblit
|
|
$include "interaction/basic_fragment.inc"
|
|
%> }
|
|
// program fragment reference interaction/basic_amblit
|
|
}
|