1

我在 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 )

有谁知道是否存在更便宜的操作来做到这一点。

谢谢。

4

2 回答 2

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; 
}"
于 2012-07-31T20:44:49.330 回答
0

你能不能只改变一次精灵,当它们第一次加载时,然后使用你以前使用的任何机制?如果做不到这一点,至少将两种纹理合二为一。

于 2012-07-31T20:46:05.907 回答