即使 google nexus 6P 没有被归类为“Daydream-Ready”,它也可以用作 Daydream 的开发平台。有没有人在 Nexus 6P 上测试过 Async Reprojection 并且可以确认它支持 Front-Buffer bzw。单缓冲区渲染,还是支持 Android 7 上的 EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 扩展?
3 回答
6P确认了。Async Reprojection 是 Front-buffer 渲染功能。与没有它的 80+ms 相比,延迟约为 20ms。
它将在新线程上使用 Timewrapping 进行渲染。
我发现这个站点http://opengles.gpuinfo.org/gles_generatereport.php?reportID=932列出了大多数手机的 EGL 扩展。根据规范,EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 顺便说一句。Nexus 6P 支持 EGL_KHR_mutable_render_buffer。支持“前端缓冲区渲染”并因此能够进行“异步重投影”的其他手机是:Nexus6P、Nexus 5X 和 Google Pixel。令人惊讶的是,这些是仅有的几部手机,尽管截至 2016 年 11 月 28 日,Moto Z 被宣传为“准备好做白日梦”。可能 Moto Z 的数据库尚未更新。所以 Nexus6P 的硬件能够进行异步重投影(因此低于 20 毫秒的运动到光子延迟)并且可能支持白日梦异步重投影,即使没有被归类为白日梦就绪。
我现在还可以确认,在 Nexus5X 和 Nexus6P 上都可以创建一个允许渲染到前端缓冲区的有效 EGL 配置。通过添加以太
EGL_SURFACE_TYPE,EGL_MUTABLE_RENDER_BUFFER_BIT_KHR
到上下文属性列表,然后在前后缓冲区之间切换,或者只需添加
EGL_RENDER_BUFFER,EGL_SINGLE_BUFFER 到表面属性列表。
这将创建一个仅在单缓冲区模式下工作的表面,并且还可以在所有 Android 7 设备上工作,甚至是没有“可变”扩展的设备。但是我无法在具有 android 7 但没有“可变”扩展名的手机上测试第二种方法。
当然,由于谷歌决定不将 Nexus5X 归类为“Daydream-ready”,异步重投影仅适用于 Nexus6P(以及其他各种支持 Daydream 的手机)。
但是在 Nexus5X 上也可以通过直接绘制到前端缓冲区并将每只眼睛的渲染与显示扫描输出同步来实现低于 20 毫秒的运动到光子延迟,正如我在开发一种称为“眼睛”的方法时发现的那样- 使用顶点位移失真校正交替前缓冲区渲染”。