Android OpenGl片段着色器纹理速度

Android OpenGl片段着色器纹理速度,android,opengl-es,shader,fragment-shader,Android,Opengl Es,Shader,Fragment Shader,我有下面的片段着色器 varying highp vec2 tCoord; void main() { vec4 hc = texture2D(hair, tCoord); gl_FragColor = hc; } 在我的程序中,我在屏幕上绘制了大约15幅图像(只有2D,没有3D操作)。我允许用手指移动所有图像。因此,当图像出现在屏幕上时,我得到40 fps,但当我将它们移出屏幕(用手指)时,我得到60 fps。(这消除了程序或顶点着色器中的任何瓶颈)。我在Galaxy Ta

我有下面的片段着色器

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的速度。有什么原因会导致速度变慢吗?

highp
在嵌入式硬件(如大多数android设备)上可能不会加速。使用默认精度有帮助吗?为什么您认为在低分辨率屏幕上需要如此高的纹理坐标精度?

我使用安卓3.2.1和opengl es 2.0在tegra平台上工作

如果你不需要中间的变量,可以直接赋值。我经历过变量创建和赋值的代价是3-5 fps。texture2d也会在这个范围内花费一些fps

varying highp vec2 tCoord;

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

要排除纹理瓶颈,请尝试绘制1x1纹理(然后“图像”将是单色矩形,但谁在乎呢).Drawing 1x1纹理意味着数据是最小的,需要提取的任何内容都会从缓存中取出。如果该修改使帧速率跳到60,则您是纹理绑定的。如果它没有更改,则很可能是填充率问题。我如何改为“Drawing 1x1纹理”"? 更改我正在绘制的纹理?此外,如果它们是1x1,它们将不会填满整个屏幕(就像现在一样),因此它将是一个改进的帧速率,因为片段着色器运行的次数更少。要使它们填满屏幕,请使用带纹理的四边形而不是GLDRAWTEXOES,必须绑定任何1x1纹理(无论什么颜色)而不是真实的纹理。如果这有区别的话,它是纹理绑定的。如果它是纹理绑定的,我怎么能让它更快呢?我把所有的东西都改成了lowp,它仍然是相同的fps。