WebGL:使用单通道纹理格式实际保存(纹理)内存吗?

时间:2017-07-27 13:11:16

标签: webgl

来自Khronos ref pages

  

GL_LUMINANCE:每个元素都是单个亮度值。 GL   将其转换为浮点,然后将其组装成RGBA元素   通过将亮度值复制三次,分别为红色,绿色和   蓝色并附加1表示alpha。

这也适用于WebGL吗?如果是这样,这是否意味着与使用RGBA相比,使用较少通道格式化的纹理(如LUMINANCE)保存VRAM?

RAM怎么样?

2 个答案:

答案 0 :(得分:2)

  

这也适用于WebGL吗?

是的,

  

这是否意味着与使用RGBA相比,使用较少通道格式化的纹理(如LUMINANCE)无法保存VRAM

不,虽然这是特定于实现的(并且一些实现确实选择在上载之前将数据扩展到RGBA)但扩展应该在运行中发生,基本上只是在从采样时为每个颜色分量提供一个相同的值。着色器中的这种纹理。

  

RAM怎么样?

一旦您致电texImage2D,数据就会上传到VRAM,只要您不这样做就不会保存在RAM中(例如,通过保留数据参考)。

答案 1 :(得分:0)

GL_LUMINANCE在OpenGL 3.2中已被弃用并删除。现在,您使用GL_R8之类的枚举显式指定内部格式。实现使用指定的格式分配其内部存储(即使OpenGL规范中没有此保证,按照as-if规则)。我建议不要在WebGL中使用GL_LUMINANCE。只需使用显式内部格式,并根据需要在着色器中展开它,或者通过纹理调整。