我一直在尝试使用多重采样在 iOS 4 上的 iPhone 和 iPad 上进行全场景抗锯齿。一般机制使用 Apple 的 APPLE_framebuffer_multisample 扩展 ( http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt ),并在该问题的答案中进行了描述: How do you activate multisampling in OpenGL ES on the iPhone?并由 Apple 在其 OpenGL ES 编程指南中记录。
它的工作原理与描述的一样,但是当我将样本数设置为 2 时,我的测试应用程序的绘图性能下降了大约 50%。我主要在 iPhone 4 上进行测试,使用不支持视网膜的应用程序。我正在使用 Apple 在其文档中提供的其他性能建议(使用 glDiscardFramebufferEXT 丢弃附加到多重采样帧缓冲区的渲染缓冲区,使用 glClear 在帧开始时清除整个帧缓冲区等)。
以这种方式启用多重采样的性能开销对我来说似乎出奇地大。你们是否看到了类似的结果,或者这是否表明我做错了什么?
最佳答案
您提到您正在 iPhone 4 上运行此程序。您的 OpenGL ES 层是否以完整的 2X Retina 显示比例因子进行渲染?也就是说,您是否将 OpenGL ES 托管层上的 contentScaleFactor
设置为 [[UIScreen mainScreen] scale]
?如果是这样,那么您一开始就推送了大量像素。
在应用多重采样抗锯齿之前,您的填充率是否受到限制?要进行检查,请针对正在运行的应用程序使用 Instruments 中的 OpenGL ES 工具,并启用 Tiler Utilization 和 Renderer Utilization 统计信息。如果您的应用程序在未启用 MSAA 的情况下显示较高的渲染器利用率,则填充率一开始就会受到限制。由于这个瓶颈,在此基础上添加 MSAA 可能会显着降低帧速率。
在我拥有的一个受几何限制而不是填充率限制的应用程序中,在 iPhone 4 上使用 4X MSAA 时,我没有看到那么大的减速。我猜测您的应用程序中的瓶颈就是将像素推到屏幕上。
关于iphone - 在 iOS 上使用多重采样抗锯齿会对性能产生什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716983/