OpenGL ES 2.0绘制Fullscreen Quad非常慢

时间:2014-03-21 14:51:59

标签: ios objective-c opengl-es opengl-es-2.0 glkit

当我将我的内容渲染到一个绑定了纹理的FBO上,然后使用基本着色器将此绑定纹理渲染到全屏四边形时,性能下降得非常糟糕。

例如:

直接渲染到屏幕(使用基本着色器):

enter image description here

当首先渲染到纹理时,然后使用全屏四边形渲染纹理:(使用相同的基本着色器,通常会出现模糊或绽放):

enter image description here

任何人都知道如何加快速度?由于目前的表现不可用。我也使用GLKit作为基本的OpenGL内容。

2 个答案:

答案 0 :(得分:3)

需要在需要的地方使用精确度。
lowp - 用于颜色,纹理坐标,法线等 highp - 用于矩阵和顶点/位置
Quick reference,检查精确度范围,在" Qualifiers"中的3页上。

//  BasicShader.vsh
precision mediump float;

attribute highp vec2 position;
attribute lowp vec2 texCoord;
attribute lowp vec4 color;

varying lowp vec2 textureCoord;
varying lowp vec4 textureColor;

uniform highp mat4 projectionMat;
uniform highp mat4 worldMat;

void main() {
    highp mat4 worldProj = worldMat * projectionMat;
    gl_Position = worldProj * vec4(position, 0.0, 1.0);
    textureCoord = texCoord;
    textureColor = color;
}

//  BasicShader.fsh
precision mediump float;

varying lowp vec2 textureCoord;
varying lowp vec4 textureColor;

uniform sampler2D sampler;

void main() {
    lowp vec4 Color = texture2D(sampler, textureCoord);
    gl_FragColor = Color * textureColor;
}

答案 1 :(得分:1)

这很可能是由性能不佳的openGL ES API调用造成的。

您应该附加一个真实设备并执行openGL ES帧捕获。 (它确实需要一个真实的设备,模拟器无法使用帧捕获选项。)

帧捕获将指示内存和其他警告以及与每个API调用一起修复它们的建议。逐步完成这些并修复每个。性能应该大大提高。

以下是一些完成此操作的参考资料: