【发布时间】:2016-02-11 02:36:49
【问题描述】:
我在 WebGL 中使用 OES_texture_float 纹理制作了延迟着色渲染器来存储 G 缓冲区数据。
此功能在 PC 浏览器(Chrome、Firefox、Safari、Edge...)中清晰可见 但是,这个 G-buffer 似乎在移动浏览器中不起作用。
我试图找出原因,但我无法做到。我就是这样调试的。
- 检查是否支持 OES_texture_float。
我当然这样做了。我确保我的调试设备支持 OES_texture_float。 我试图 getExtension 并且该方法没有返回 undefined。
我还查看了网站以检查 WebGL 扩展兼容性(http://renderingpipeline.com/webgl-extension-viewer/)。
- 我尝试使用 readPixels 获取浮点值纹理的像素
我无法为移动浏览器执行此操作。但是,在 PC 端的 Chrome 中,readPixels 读取浮点值纹理可以正常工作。
我猜即使支持 OES_texture_float 也不能确保这些类型的纹理的 readPixels 工作。
我知道这很难回答,但我无法在此处粘贴我的代码,因为这些代码非常庞大。现在我猜 OES_texture_float 只是支持从纹理中获取纹理值,比如texture2D(floatingTexture,uv),并没有确保用于渲染纹理本身。
我想要任何调试建议。而且,如果您知道任何使用浮动值纹理并在移动设备中工作的示例,请粘贴 url 以工作。我想检查一下。
【问题讨论】:
-
哦,我没有写我用来在移动设备上调试的设备。我用过 iPhone6SPlus 和华硕 zenfone(我不记得 zenfone 的版本号。)。
-
您是否在控制台中使用 remote debugging 收到任何警告? Afaik 如果支持浮点纹理,您应该能够
readPixels,但是如果您要渲染到浮点纹理,您应该检查并启用WEBGL_color_buffer_float扩展。 See the last point in the Overview section of the extension spec. -
查看这个答案stackoverflow.com/a/31974179/4168648。此外,您可以通过避免 G 缓冲区中的浮点数来解决该问题。根据您要在 G 缓冲区中存储的内容,可以使用各种打包策略。还要检查您的设备是否支持 MRT。如果不支持 MRT,则绘制浮点数的几率约为 0%。
-
哦,我不知道还有这样的扩展名
WEBGL_color_buffer_float。我想知道这是原因....
标签: opengl-es webgl opengl-es-2.0