2011-06-21 310 views
1

我有以下片段着色器。OpenGl碎片着色器纹理速度

varying highp vec2 tCoord; 

void main() { 
    vec4 hc = texture2D(hair, tCoord); 
    gl_FragColor = hc; 
} 

在我的程序中,我在屏幕上绘制了15个图像(只有2D,没有3D操作)。我允许用手指移动所有的图像。因此,当图像在屏幕上时,我可以获得40 fps,但是当我将它们移出屏幕(用手指)时,我可以获得60 fps。 (这消除了程序或顶点着色器中的瓶颈)。我对Galaxy Tab的7" 运行此。

由于这是一个非常简单的着色器,我希望60 fps的所有的时间。有什么理由,这是慢?

+2

要排除纹理瓶颈,试着绘制1x1纹理(“图像”然后是单色矩形,但是谁在乎)。绘制1x1纹理意味着数据是最小的,并且需要获取的任何内容都会从缓存中提取出来。如果该修改使帧速率跳转到60,那么您将受到纹理限制。如果它没有改变,那很可能是一个填充率问题。 – Damon

+0

我会如何去“绘制1x1纹理”?改变我正在绘制的纹理?另外,如果它们是1x1,它们将不会填满整个屏幕(因为它们现在就是这样),所以它会因为片段着色器运行次数减少而提高帧率。 –

+1

为了让它们填满屏幕,请使用纹理四边形替代glDrawTexOES – datenwolf

回答

2

highp可能不会加速嵌入式硬件,如大多数Android设备,它有助于使用默认的精度?为什么你认为你需要在低分辨率屏幕上的纹理坐标这么高的精度?

+0

我把所有东西都改成了lowp,而且它仍然是相同的fps。 –

0

我使用android 3.2开发了tegra平台。 1和opengl es 2.0。

如果你可以在不需要变量的情况下生活,t直接分配。我经历了变量创建和分配,成本高达3-5帧/秒。 texture2d在fps中的成本也在这个范围内。

varying highp vec2 tCoord; 

void main() { 
    gl_FragColor = texture2D(hair, tCoord); 
} 
相关问题