当我将我的内容渲染到一个绑定了纹理的FBO上,然后使用基本着色器将此绑定纹理渲染到全屏四边形时,性能下降得非常糟糕。
例如:
直接渲染到屏幕(使用基本着色器):
当首先渲染到纹理时,然后使用全屏四边形渲染纹理:(使用相同的基本着色器,通常会出现模糊或绽放):
任何人都知道如何加快速度?由于目前的表现不可用。我也使用GLKit
作为基本的OpenGL内容。
答案 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调用一起修复它们的建议。逐步完成这些并修复每个。性能应该大大提高。
以下是一些完成此操作的参考资料: