【问题标题】:OES_texture_float in WebGL on Mobile移动端 WebGL 中的 OES_texture_float
【发布时间】: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


【解决方案1】:

您是否检查过可以渲染到浮点纹理?我不认为你可以在移动设备上。

在您创建附加了浮点纹理的帧缓冲区后,您是否调用gl.checkFramebufferStatus 并检查结果是否为gl.FRAMEBUFFER_COMPLETE?如果不完整,则硬件不支持渲染到浮点纹理。

【讨论】:

  • 这就是答案!但是,为什么浏览器在调用 gl.getExtension("WEBGL_color_buffer_float") 时会返回 null,即使浏览器支持该功能?
  • 据我所知,没有浏览器愿意实现WEBGL_color_buffer_float。说来话长。基本上,他们添加了OES_texture_float,人们在检查帧缓冲区状态后开始渲染到浮点纹理。只是后来有人指出OES_texture_float 不足以允许渲染浮动纹理,因为规范说颜色被限制在 0.0 到 1.0 之间。所以他们添加了WEBGL_color_buffer_float,但实际上执行它会破坏许多现有页面,因此它没有实现。因此它不是一个批准扩展
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多