【问题标题】:Switching from OpenGL ES 1.0 to 2.0从 OpenGL ES 1.0 切换到 2.0
【发布时间】:2013-04-16 22:23:29
【问题描述】:

很长一段时间以来,我一直在使用 OpenGL 1.0 开发一个 Android 应用程序,使用一种简单的渲染方法,基本上每帧调用 glColor4f(...) 和 glDrawArrays(...) 并使用 FloatBuffers。随着我添加更多 UI 元素并且绘制调用的数量增加,我遇到了图形成为巨大瓶颈的地步。

所以我现在正在寻找将所有这些调用组合为一个(或两个或三个)绘图调用的最佳方法。看起来最干净、最有效和最规范的方法是使用 VBO 对象,可从 OpenGL ES 2.0 开始使用。但是,这需要我进行巨大的重构才能将我的整个图形后端从 ES 1.0 切换到 ES 2.0。我不确定这是否是一个好的决定,或者是否有可以接受的方法在 1.0 中对我的绘图调用进行分组,这对于相对简单的 2D 数据(正方形、圆角矩形 TRIANGLE_FAN 等)可以正常工作,或者是否真的可能值得硬着头皮做出改变。我还可能会提到,我非常依赖 ES 1.0 的固定管道非常方便的转换和缩放。

环顾四周,我惊讶地发现几乎没有人在我的位置上谈论这种转换的权衡和复杂性。有什么想法吗?

【问题讨论】:

    标签: java android opengl-es


    【解决方案1】:

    我非常依赖平移和缩放

    请注意,如果您在绘制调用之间更改模型视图矩阵,则无法批处理任何内容。 (ES2 没有改变这一点)。

    vbo a 可从 opengl ES 1.1 获得。它们可能适用于您的目标设备。 Even for ES1.0 (ARB_vertex_buffer_object)

    您可以创建一个具有世界空间几何形状的大型 VBO(=使用 cpu 解决缩放和平移)并绘制它。即使您每帧更新此 vbo,根据我的经验,它也足够快。发送数千个小的 drawcall 几乎总是最慢的。

    从一个固定的管道移动到一个完整的顶点/片段着色器管道并不容易。它需要大量的 3d 知识。小心。先写一个原型。 (世界空间或物体空间照明?如何转换法线?...)

    薇薇安

    【讨论】:

    • 感谢您的想法。我正朝着使用 VBO 将发生在同一个视图矩阵上的所有绘图批处理到尽可能少的调用中前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多