$ifndef instance $ifndef deform OPTION ARB_position_invariant; $endif $endif TEMP bitangent; TEMP R0, R1, R2; $ifdef instance TEMP _pos; TEMP _nrm; TEMP _tan; DP4 _pos.x, vertex.texcoord[5], $positionAttrib; DP4 _pos.y, vertex.texcoord[6], $positionAttrib; DP4 _pos.z, vertex.texcoord[7], $positionAttrib; MOV _pos.w, $positionAttrib.w; DP3 _nrm.x, vertex.texcoord[5], $normalAttrib; DP3 _nrm.y, vertex.texcoord[6], $normalAttrib; DP3 _nrm.z, vertex.texcoord[7], $normalAttrib; DP3 _tan.x, vertex.texcoord[5], $tangentAttrib; DP3 _tan.y, vertex.texcoord[6], $tangentAttrib; DP3 _tan.z, vertex.texcoord[7], $tangentAttrib; MOV result.texcoord[6].w, vertex.texcoord[2]; PARAM mvp[4] = { state.matrix.mvp }; OUTPUT oPos = result.position; # Transform the vertex to clip coordinates. DP4 oPos.x, mvp[0], _pos; DP4 oPos.y, mvp[1], _pos; DP4 oPos.z, mvp[2], _pos; DP4 oPos.w, mvp[3], _pos; $else $ifdef deform TEMP _pos; PARAM mvp[4] = { state.matrix.mvp }; OUTPUT oPos = result.position; # Transform the vertex to clip coordinates. MAD R0.xyz, $parameters.x, $normalAttrib, $positionAttrib; MOV R0.w, $positionAttrib.w; DP4 oPos.x, mvp[0], R0; DP4 oPos.y, mvp[1], R0; DP4 oPos.z, mvp[2], R0; DP4 oPos.w, mvp[3], R0; $else ATTRIB _pos = $positionAttrib; $endif $if !r_32ByteVtx ATTRIB _nrm = $normalAttrib; ATTRIB _tan = $tangentAttrib; $else TEMP _nrm, _tan; MOV _nrm, $normalAttrib; MOV _tan, $tangentAttrib; $endif $endif PARAM defaultTexCoord = { 0, 0.5, 0, 1 }; # derive bitangent XPD bitangent, _nrm, _tan; MUL bitangent, bitangent, $tangentAttrib.w; # calculate vector to light in R0 SUB R0, $lightOrigin, _pos; # reduce range for R0, this fixes a problem on nv 5700 MUL R0, R0, 0.1; # put into texture space for TEX0 DP3 result.texcoord[0].x, _tan, R0; DP3 result.texcoord[0].y, bitangent, R0; DP3 result.texcoord[0].z, _nrm, R0; # 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; # texture 2 has one texgen MOV result.texcoord[2], defaultTexCoord; DP4 result.texcoord[2].x, _pos, $lightFalloff_s; # texture 3 has three texgens DP4 result.texcoord[3].x, _pos, $lightProject_s; DP4 result.texcoord[3].y, _pos, $lightProject_t; DP4 result.texcoord[3].w, _pos, $lightProject_q; # 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 5 takes the base coordinates by the texture matrix MOV result.texcoord[5], defaultTexCoord; DP4 result.texcoord[5].x, $texCoordAttrib, $specularMatrix_s; DP4 result.texcoord[5].y, $texCoordAttrib, $specularMatrix_t; $if !r_usePerFragmentSpecular # texture 6's texcoords will be the halfangle in texture space # calculate normalized vector to light in R0 SUB R0, $lightOrigin, _pos; DP3 R1, R0, R0; RSQ R1, R1.x; MUL R0, R0, R1.x; # calculate normalized vector to viewer in R1 SUB R1, $viewOrigin, _pos; DP3 R2, R1, R1; RSQ R2, R2.x; MUL R1, R1, R2.x; # add together to become the half angle vector in object space (non-normalized) ADD R0, R0, R1; # put into texture space DP3 result.texcoord[6].x, _tan, R0; DP3 result.texcoord[6].y, bitangent, R0; DP3 result.texcoord[6].z, _nrm, R0; $else # calculate vector to light in R0 SUB R0, $viewOrigin, _pos; # put into texture space for TEX6 DP3 result.texcoord[6].x, _tan, R0; DP3 result.texcoord[6].y, bitangent, R0; DP3 result.texcoord[6].z, _nrm, R0; $endif $ifdef parallax # calculate vector to light in R0 SUB R0, $viewOrigin, _pos; # put into texture space for TEX6 DP3 result.texcoord[7].x, _tan, R0; DP3 result.texcoord[7].y, bitangent, R0; DP3 result.texcoord[7].z, _nrm, R0; $endif # generate the vertex color, which can be 1.0, color, or 1.0 - color # for 1.0 : env[16] = 0, env[17] = 1 # for color : env[16] = 1, env[17] = 0 # for 1.0-color : env[16] = -1, env[17] = 1 MAD result.color, $colorAttrib, $colorModulate, $colorAdd; $ifdef enable_detail_fade PARAM mv[4] = { state.matrix.modelview }; DP4 R0.w, -mv[2], _pos; SUB R0.w, R0.w, $detailFade.x; MAD result.texcoord[1].w, R0.w, $detailFade.y, 1; $endif $if ( r_megaDrawMethod != 0 ) SUB R2, _pos, $viewOrigin; DP3 R1.x, R2, R2; RSQ R1.y, R1.x; MUL R1.x, R1.y, R1.x; MAD result.color.secondary, R1.x, $fogDepths.z, $fogDepths.w; $endif $ifdef enable_separate_depth DP4 result.texcoord[2].z, $texCoordAttrib, $maskMatrix_s; DP4 result.texcoord[2].w, $texCoordAttrib, $maskMatrix_t; $endif