#version 110 //Pixel Shader for TEV stages //2 TEV stages, 1 texgens, 0 IND stages uniform sampler2D samp0, samp1, samp2, samp3, samp4, samp5, samp6, samp7; uniform vec4 Kcolor[8]; // Colour Matrix, the two have been merged uniform vec4 alphaRef[1]; uniform vec4 texdim[8]; uniform vec4 czbias[2]; uniform vec4 cindscale[2]; uniform vec4 cindmtx[6]; uniform vec4 cfog[3]; vec4 colors_0 = gl_Color; //: COLOR0, vec4 colors_1 = gl_SecondaryColor; //: COLOR1 varying vec4 rawpos; void main(void /* out vec4 ocol0 : COLOR0, in vec4 rawpos : WPOS, */) { vec4 c0 = Kcolor[1], c1 = Kcolor[2], c2 = Kcolor[3], prev = vec4(0.0, 0.0, 0.0, 0.0), textemp = vec4(0.0, 0.0, 0.0, 0.0), rastemp = vec4(0.0, 0.0, 0.0, 0.0), konsttemp = vec4(0.0, 0.0, 0.0, 0.0); vec3 comp16 = vec3(1.0, 255.0, 0.0), comp24 = vec3(1.0, 255.0, 255.0*255.0); vec4 alphabump = vec4(0, 0, 0, 0); vec3 tevcoord; vec2 wrappedcoord, tempcoord; vec4 cc0, cc1, cc2, cprev,crastemp,ckonsttemp; //TEST vec3 uv0 = gl_TexCoord[0].xyz; // TEXCOORD0 vec4 clipPos = gl_TexCoord[1]; clipPos = vec4(rawpos.x, rawpos.y, clipPos.z, clipPos.w); uv0.xy = uv0.xy * texdim[0].zw; rastemp = colors_0.rgba; crastemp = fract(rastemp * (255.0/256.0)) * (256.0/255.0); textemp = vec4(1.0, 1.0, 1.0, 1.0); cc0 = fract(c0 * (255.0/256.0)) * (256.0/255.0); cc1 = fract(c1 * (255.0/256.0)) * (256.0/255.0); prev.rgb = clamp(mix((cc0.rgb), (cc1.rgb), (crastemp.rgb)), 0.0, 1.0); prev.a = clamp(vec4(0.0, 0.0, 0.0, 0.0).a, 0.0, 1.0); tevcoord.xy = uv0.xy; textemp=texture2D(samp0,tevcoord.xy * texdim[0].xy).rgba; cprev = prev; prev.rgb = clamp((cprev.rgb)*(textemp.rgb), 0.0, 1.0); prev.a = clamp(textemp.a+vec4(0.0, 0.0, 0.0, 0.0).a, 0.0, 1.0); if(!( (prev.a >= alphaRef[0].r + (0.25/255.0)) || (prev.a >= alphaRef[0].g + (0.25/255.0)))){gl_FragData[0] = vec4(0.0,0.0,0.0,0.0);discard;return;} float zCoord = czbias[1].x + (clipPos.z / clipPos.w) * czbias[1].y; float ze = cfog[1].x / (cfog[1].y - (zCoord / cfog[1].w)); // Base Enable { float x_adjust = (2.0 * (clipPos.x / cfog[2].y)) - 1.0 - cfog[2].x; x_adjust = sqrt(x_adjust * x_adjust + cfog[2].z * cfog[2].z) / cfog[2].z; ze *= x_adjust; } float fog = clamp(ze - cfog[1].z, 0.0, 1.0); prev.rgb = mix(prev.rgb,cfog[0].rgb, fog); gl_FragData[0] = prev; }