Webgl 带浮动的单分量纹理

Webgl 带浮动的单分量纹理,webgl,Webgl,有没有办法只创建每个像素具有单个组件浮点值的纹理? 我想将阴影贴图绘制到纹理中,我不想使用深度格式的扩展,因为它不适合多缓冲区绘制 我知道我可以为每种颜色使用UBYTE RGBA纹理和分割浮点值,但我担心该解决方案的性能影响 我知道OpenGL4中有一个纹理格式gl.RED,如果有这样的纹理格式,它适合这种情况。但是WebGL似乎没有这样的功能。 首先,我以为gl.ALPHA就是那个,但它似乎是另一回事。亮度似乎也是另一回事 有没有办法在WebGL中实现浮动纹理的单个组件?将浮动打包到rgba通

有没有办法只创建每个像素具有单个组件浮点值的纹理? 我想将阴影贴图绘制到纹理中,我不想使用深度格式的扩展,因为它不适合多缓冲区绘制

我知道我可以为每种颜色使用UBYTE RGBA纹理和分割浮点值,但我担心该解决方案的性能影响

我知道OpenGL4中有一个纹理格式gl.RED,如果有这样的纹理格式,它适合这种情况。但是WebGL似乎没有这样的功能。 首先,我以为gl.ALPHA就是那个,但它似乎是另一回事。亮度似乎也是另一回事


有没有办法在WebGL中实现浮动纹理的单个组件?

将浮动打包到rgba通道中。只需使用标准的每通道8位rgba纹理

    "vec4 pack_float(float f){",
    "   const vec4 bit_shift = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0);",
    "   const vec4 bit_mask = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);",
    "   vec4 res = fract(f * bit_shift);",
    "   res -= res.xxyz * bit_mask;",
    "   return res;",
    "}",


是什么让你相信使用
depth\u纹理
扩展不利于多缓冲区绘图?!如果它是颜色纹理类型,则可用于多个目标。但是,我认为深度缓冲区不能接受多个纹理。您可以启用
OES\u texture\u float
,然后创建
gl.LUMINANCE,gl.float
gl.ALPHA,gl.float
纹理。Not
OES\u texture\u float
几乎只在非移动的台式机上可用。如果我只需要rgb(24位),我可以使用pack\u float(某物).gba作为压缩值,对吗?我相信是这样,但我从未尝试过。虽然如果需要24位深度缓冲区,为什么不直接输出到depth_纹理?仅供参考多重渲染输出指的是多重颜色纹理,但如果启用了扩展,则始终可以输出到深度纹理。通过使用多重渲染目标,我认为这将有助于提高性能。但是,深度纹理不能附加到ColorTarget,对吗?所以,我认为我不能在一次绘制调用中多次使用深度纹理。你可以在一次绘制调用中渲染多个颜色目标和一个深度纹理目标。使用
gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH\u附件,gl.TEXTURE\u 2D,DEPTH\u纹理,0)用于深度纹理。我的意思是如果可以的话,我想用一个绘制调用渲染多个“阴影贴图”。所以,我认为最好不要使用深度连接。我认为最好将阴影贴图绘制为颜色缓冲区。
    "float unpack_float(vec4 rgba){",
    "   const vec4 bit_shift = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0);",
    "   float res = dot(rgba, bit_shift);",
    "   return res;",
    "}",