GLSL Fragment Shader with Alpha Override and Partial Color
#version 100 precision mediump int; precision mediump float;
// Author: yh
uniform sampler2D uBaseTexture; uniform mediump float fUseAlpha; // If greater than 1, use this value instead of the alpha value in the texture #ifdef PARTIAL_COLOR uniform sampler2D uPartialMaskTexture; uniform int uIsPartialMask; uniform vec3 uTexTransformFactor; varying vec3 vPartialColor; #endif
varying vec2 vTextureCoord0; varying vec4 vVertexColor;
#ifdef ENABLE_FOG varying vec4 vFogColor; #endif
void main (void) { vec4 base = texture2D(uBaseTexture, vTextureCoord0.st);
#ifdef ALPHA_TEST if(base.a <= 0.0) discard ; #endif
#ifdef PARTIAL_COLOR if(bool(uIsPartialMask)) { vec4 maskColor = texture2D(uPartialMaskTexture, vTextureCoord0.st*uTexTransformFactor.x + uTexTransformFactor.yz); vec3 col = base.rgb; col.r *= vPartialColor.r; col.g *= vPartialColor.g; col.b *= vPartialColor.b; base.rgb = mix(base.rgb, col.rgb, maskColor.a); } else { base.r *= vPartialColor.r; base.g *= vPartialColor.g; base.b *= vPartialColor.b; } #endif
vec4 col = base;
#ifndef DISABLE_AMBIENT_LIGHT col *= vVertexColor; #endif
#ifdef ENABLE_FOG col = mix(col, vFogColor, vFogColor.a); #endif
float al = base.a;
if (fUseAlpha >= 1.0)
{
al = fUseAlpha - 1.0;
}
gl_FragColor = vec4(base.rgb, al);;
}
原文地址: https://www.cveoy.top/t/topic/neqv 著作权归作者所有。请勿转载和采集!