3

我仅使用 GLES20 上下文渲染了 2 个覆盖整个表面的三角形。现在的问题是,以这种方式仅绘制一个纹理似乎异常缓慢。帧率从 58fps 下降到 21fps。

  • 问题确实似乎是所有四边形一起绘制的整体像素区域
  • 位图在加载时调整为 pow2
  • 位图以正确的内部 GL 格式加载
  • 使用 8888 或 565 位图不会改变任何东西
  • 顶点和片段着色器代码绝对是最少的
  • 启用/禁用混合不会改变任何东西
  • 在一个图块或多个图块中绘制整个位图没有帮助
  • glDrawTexiOES 似乎不适用于 GLES20(GL 枚举错误)

我在这里不知所措;我认为在 GL 中对单个图像进行 blitting 至少应该与使用 Canvas 一样快,但似乎并非如此。

有人可以提供有关此性能影响的提示或解释吗?

更新:

我刚刚调整了我的渲染线程以支持画布而不是 EGL 上下文,我做的完全一样;显示 fps 文本和 blitting 背景纹理。猜猜看:只显示文本我得到 58fps,添加背景图片我得到...... 57fps!

现在我正式并且非常生气。我希望我只是不够聪明,不能很好地使用 GLES20,否则似乎如果你想对 2D 图形进行 blit - 你就拿 Canvas;并且当且仅当您想要许多 3D 三角形时,您才可以使用 OpenGL。

OpenGL 不应该总是至少与 Canvas 提供的 2D API 一样快吗?

4

2 回答 2

1

这可能是由于纹理尺寸较大且没有 mipmap(因为内存访问不能很好地优化),或者纹理不是 2 的幂(因为地址计算更难 - 需要使用乘法而不是轮班)。

希望这可以帮助 ...

于 2012-01-20T09:19:32.517 回答
0

No offense, but going from 58 to 57 fps for a fullscreen texture is not too bad. Whether 2d or 3d a phone or tablet cpu/gpu will always be fillrate limited.

于 2012-01-25T21:30:59.407 回答