gpt4 book ai didi

Android Opengl ES 2 绘制大纹理速度慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:54:58 29 4
gpt4 key购买 nike

我对 OpenGL 非常陌生。

我正在尝试绘制带纹理的四边形(2 个三角形)。纹理的大小是 900x900px。我对一个四边形没有问题,但当我尝试绘制 5-10 个四边形时,我发现速度明显变慢。

也许我做错了什么......

代码:

public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
... matrix calculation ...
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
}

顶点着色器:

uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
attribute vec2 a_TexCoordinate;
varying vec2 v_TexCoordinate;
void main() {
gl_Position = uMVPMatrix*vPosition;
v_TexCoordinate = a_TexCoordinate;
}

fragment 着色器:

    precision mediump float;
uniform sampler2D u_PreviewTexture;
varying vec2 v_TexCoordinate;

void main() {
vec4 color = texture2D(u_PreviewTexture, v_TexCoordinate);
gl_FragColor = color;
}

测试平台为 Galaxy S3。在探查器中,我看到大约 60 毫秒需要调用 eglSwapBuffers。

如何快速绘制大纹理的四边形?

最佳答案

这可能是由于您的纹理大小和您正在使用的设备的 OpenGL 驱动程序实现所致。

大多数现代 GPU 在 NPOT(非二的幂)纹理方面做得很好,但这会导致每次需要将纹理绘制到最接近的 2 的幂(在您的情况下为 1024X1024)时重新缩放纹理。

尝试使用以下两种解决方案:

1- 将您的纹理转换为 1024x1024 并使用几何中的坐标仅绘制您需要的内容 (900x900)

2- 尝试生成 mipmap,如果你有很多缩放,这在许多情况下都是性能救星。

关于Android Opengl ES 2 绘制大纹理速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com