绘制分层 OpenGL ES 内容的最佳方式是啥?
Posted
技术标签:
【中文标题】绘制分层 OpenGL ES 内容的最佳方式是啥?【英文标题】:What's the best way of drawing layered OpenGL ES content?绘制分层 OpenGL ES 内容的最佳方式是什么? 【发布时间】:2009-09-07 01:59:03 【问题描述】:有谁知道在 iPhone 上绘制多层 2D OpenGL ES 内容的最佳做法是什么?
例如,假设我要绘制一个复杂的全屏背景纹理,然后是旋转纹理,然后是顶部的另一个 alpha 混合纹理。
有没有办法只绘制一次背景纹理,并且只在必要时绘制上层的变化?
到目前为止,我发现的所有内容都表明您应该始终使用 glClear(),然后以正确的顺序绘制所有内容、每一帧、每一个刻度。但是,如果它不改变,那么每秒绘制 60 次是没有意义的......
谢谢!
【问题讨论】:
【参考方案1】:如果您的绘图要覆盖每个像素(并且您没有与清晰颜色混合 alpha),则不必使用 glClear()。 (你不必画你看不到的东西。)
但在大多数情况下,您需要在每一帧中绘制背景。如果您的动画只发生在比屏幕小的矩形中(其余部分保持静态),您可能只能重绘该矩形,但这可能比它的价值更麻烦。
是什么让你的背景纹理如此复杂?它只是大(512x512)吗?
【讨论】:
其实我只是以此为例……实际上,我正在绘制复杂的分层内容。在后台,它实际上是一堆线条。在此之上,我正在绘制一个不断旋转的纹理,在此之上,另一个系列的纹理。由于背景很复杂(不仅仅是 1 个纹理),渲染需要时间,我想看看我是否可以通过只绘制一次来缓存它。每帧绘制所有 3 层被证明太慢了。到目前为止,我已经通过拥有 2 个 EAGLViews 解决了这个问题,顶部的一个设置为 opaque=NO。我只是想知道是否有更好的方法来做到这一点。 您可以将所有线条渲染到纹理一次,然后每帧渲染该纹理。如果画线速度很慢,那应该会有所帮助。 (你已经分析过了,对吧?)以上是关于绘制分层 OpenGL ES 内容的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章