打开gles 2着色器性能

时间:2012-07-31 20:40:38

标签: android opengl-es

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

有没有人知道这样做是否存在成本较低的操作。

感谢。

2 个答案:

答案 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)

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