【发布时间】:2012-12-27 19:12:45
【问题描述】:
我们正在尝试在原生屏幕尺寸为 1080p 的设备上运行复杂的 OpenGL 应用。不幸的是,该设备的 3D 芯片组对于这种尺寸的帧速率来说还不够好。
我们更愿意以 720p(或更低)渲染,然后进行硬件加速放大以填满屏幕。
我知道 Android 可以自动处理 2D 内容(使用 ANativeWindow_lock() 和朋友)。有没有办法自动为 3D 内容执行此操作?
【问题讨论】:
-
渲染到更小尺寸的 FBO - 然后将其内容渲染到全屏对你有用吗?
-
是的,但如果可能的话,我真的很想避免这种情况 --- Android 上的屏幕外表面是一团糟:blog.vlad1.com/2010/07/01/… 它会爆炸成一百万种不同的难以测试的代码路径。因此,我渴望内置机制......
-
我已经多次使用 FBO,但从未发现它们有任何问题。在任何情况下,它们都是以较小分辨率 AFAIK 渲染的唯一方法。使用 FBO 只会添加 FBO 创建代码 - 渲染到 FBO - 并且毕竟将 FBO 复制到屏幕缓冲区。不应该有太多的逻辑使得测试比没有 FBO 更难。
-
我也建议使用 FBO。恕我直言,这将是您问题的最佳解决方案。一个技巧-以RGBA格式创建FBO-某些硬件显然不支持RGB FBO-带有Mali的galaxy s2。还要记住当应用程序进入后台时上下文丢失 - 当应用程序恢复时您必须重新创建 FBO。
-
不幸的是,FBO 在这里不合适 --- 我不允许在应用程序的 GL 上下文中添加东西,而是必须创建一个新的;所以它必须是pbuffers。这就是为什么我想完全避免整个问题......关于失去上下文,你不会相信我们必须处理多少代码。有时它甚至可以工作。
标签: android opengl-es native-activity