OpenGL ES 3.0 Fragment Shader with Partial Color and Alpha Control
// version 300 es
precision mediump float; precision mediump int;
// Author: yh
uniform sampler2D uBaseTexture; uniform mediump float fUseAlpha; // 如果该只大于1则使用该值
#ifdef PARTIAL_COLOR uniform sampler2D uPartialMaskTexture; uniform int uIsPartialMask; uniform vec3 uTexTransformFactor; varying vec3 vPartialColor; #endif
in vec2 vTextureCoord0; in vec4 vVertexColor;
#ifdef ENABLE_FOG in vec4 vFogColor; #endif
out vec4 fragColor;
void main() { vec4 base = texture(uBaseTexture, vTextureCoord0);
#ifdef ALPHA_TEST if(base.a <= 0.0) discard; #endif
#ifdef PARTIAL_COLOR if(bool(uIsPartialMask)) { vec4 maskColor = texture(uPartialMaskTexture, vTextureCoord0*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;
}
fragColor = vec4(base.rgb, al);
}
原文地址: https://www.cveoy.top/t/topic/neqi 著作权归作者所有。请勿转载和采集!