Opengl es 不带多缓冲区附件的较大GLSL片段输出

Opengl es 不带多缓冲区附件的较大GLSL片段输出,opengl-es,glsl,webgl,fragment-shader,fbo,Opengl Es,Glsl,Webgl,Fragment Shader,Fbo,如果实现不支持多个FBO缓冲区附件或“深”缓冲区格式,是否有任何方法从GLSL片段着色器发出超过4个字节 例如,当使用WebGL或OpenGL ES时,如果必须在多个过程中重复部分计算以获得更多的输出通道,则限制每个片段的RGBA输出会使复杂的计算效率极低 您的输出不是以字节为单位的,而是以组件为单位的。每个图像只能存储四个组件,因此每个输出图像只能输出四个组件 如果您的硬件可以输出更多数据,那么它将允许您输出更多图像。它可以通过一个扩展来暴露这一点。如果不存在这样的扩展,那么硬件就不能,因此您

如果实现不支持多个FBO缓冲区附件或“深”缓冲区格式,是否有任何方法从GLSL片段着色器发出超过4个字节


例如,当使用WebGL或OpenGL ES时,如果必须在多个过程中重复部分计算以获得更多的输出通道,则限制每个片段的RGBA输出会使复杂的计算效率极低

您的输出不是以字节为单位的,而是以组件为单位的。每个图像只能存储四个组件,因此每个输出图像只能输出四个组件

如果您的硬件可以输出更多数据,那么它将允许您输出更多图像。它可以通过一个扩展来暴露这一点。如果不存在这样的扩展,那么硬件就不能,因此您也不能


请注意,NVIDIA有,因此他们的支持ES的硬件可能能够做到这一点。

不,没有办法比常规通道更有效地输出。这意味着需要在多个过程中完成具有更多输出的计算。使用多个输出共享昂贵中间结果的计算可能会在以前将中间结果作为附加过程进行计算,但是,开销很可能会耗尽所获得的任何性能优势。

这不是纯粹的硬件问题,例如,当使用桌面OpenGL时,WebGL只公开我的系统看到的功能的一个子集,这甚至可能在浏览器之间发生变化。@dronus:是的,这就是为什么必须使用扩展。WebGL 1.0仅公开基本的最低功能;如果硬件可以做得更多,那么这些实现就可以公开适当的扩展来实现它。就个人而言,我不明白他们为什么不把它设为GL 3.0或EXT_FBO中的可查询限制…另一方面,对于计算需求,我不太感兴趣缓冲区的“组件”是什么,如RGB或深度,但我可以从着色器中总共发射多少字节,因为作为最后手段,我可以将数据从一个组件表示打包和解包到另一个组件表示。好的,谢谢,我现在将对公开的扩展做一个小调查,看看它们在浏览器和桌面驱动程序之间是否匹配。我想这需要检查很多平台。我尝试过的一些平台都不支持多附件的扩展。