【发布时间】:2015-07-27 12:36:43
【问题描述】:
我正在开发一个 WebGL 应用程序,但我遇到了 Retina Display Macbook Pros 的一些非常严重的性能问题。我正在使用 Intel Iris Pro GPU 的 15 英寸 Macbook 上进行测试,以全分辨率渲染,这为我提供了 3810x2030 的画布分辨率和全屏 Chrome 窗口。我的应用程序每帧渲染大约 100k 个顶点。
现在,当我将应用程序设置为以 1 的设备像素比运行(意味着没有视网膜缩放)时,应用程序的性能稳定,从不低于 60 fps,但图像质量不可接受。当我切换到视网膜的设备像素比为 2 时,图像质量显着提高,但我的帧率下降到 20-30 fps 左右。
现在,我对 GPU 编程并不陌生,所以发生这种情况的原因对我来说是显而易见的。我想知道的是,有没有人找到任何解决方法或方法来优化 WebGL 绘图,以使用像视网膜 Macbook Pro 这样的坏 GPU 的超高分辨率显示器?人们是否通过反复试验找到了任何不明显的提示或技巧来解决这个问题,或者至少让它稍微好一点?
任何帮助将不胜感激。谢谢。
编辑:带有有趣发现的小更新。我将浏览器窗口放入连接到 Macbook 的外部显示器中,当以 1 的 DPR 进行渲染时,外部显示器上的性能甚至比 macbook 上的性能更高,即使分辨率完全相同,图像质量要好得多。
因此,即使您在 Macbook Pro 上渲染缩小的帧缓冲区,它仍然会放大,这可能是导致图像质量不佳的原因(它使用双线性过滤放大,使其比实际更模糊如果原始图像显示不受影响)。
【问题讨论】:
-
如果您有能力选择 DPI,您是否尝试过将其保持在
1但使用两倍大的纹理,并缩小它们? -
问题是如果最终的帧缓冲区没有设置为视网膜显示器的最大分辨率,它仍然看起来像垃圾。视网膜显示非常有趣:当您以预期的分辨率渲染时,它看起来很棒,但如果您以低于该分辨率的分辨率渲染,它看起来就像完全垃圾。
-
可能是您遇到了(人为的)驱动程序分辨率限制。一个疯狂的尝试是在 2x2 表中运行 4 个 webgl 上下文,并使用调整后的相机渲染给每个上下文。这会给你 4 倍的 api 开销,但可能会跳过一些愚蠢的限制?
-
这里有一篇好文章如何处理这样的问题:khronos.org/webgl/wiki/HandlingHighDPI
-
这听起来可能不直观,而且确实有点不了解,但你描述的问题让我想起了我在使用 Java 2d API 时遇到的问题。我通过将渲染过采样到 2 倍像素然后缩放到目标分辨率来克服这个问题。我得到了我想要的性能、图像质量和分辨率,但我没有考虑帧速率,也没有渲染顶点。您的“放大”图像质量问题让我想起了这一点。
标签: javascript webgl