我在Android上制作游戏,但颜色太闪亮了,我无法改变精灵,所以我决定实现一个着色器:
const char* fETCShader = "\
uniform mediump sampler2D sTexture
uniform mediump sampler2D sTexture_alpha
\
varying mediump vec4 vColor
varying mediump vec2 vTexCoord
uniform lowp mat4 cCorrection
\
void main()\
{\
lowp vec4 color = vec4(texture2D(sTexture, vTexCoord).rgb, texture2D(sTexture_alpha, vTexCoord).r) * vColor
gl_FragColor = cCorrection * color
}"
但fps急剧下降(如20)
有没有人知道这样做是否存在成本较低的操作。
感谢。
答案 0 :(得分:1)
不是分别使用3个和1个通道的2个纹理,而是制作一个4通道RGBA纹理,这样你只需要进行1次纹理提取。
手机上的碎片着色器很快成为瓶颈。始终尽量减少碎片着色器必须完成的工作量。
您的着色器看起来像这样:
const char* fETCShader = "\
uniform mediump sampler2D sTexture
uniform mediump sampler2D sTexture_alpha
\
varying mediump vec4 vColor
varying mediump vec2 vTexCoord
uniform lowp mat4 cCorrection
\
void main()\
{\
gl_FragColor = cCorrection * texture2D(sTexture, vTexCoord) * vColor;
}"
答案 1 :(得分:0)
你能不能一次更改精灵,当它们第一次加载时,然后使用你之前使用的任何机制?如果做不到这一点,至少要将两个纹理合二为一。