WebGL:使用单通道纹理格式真的能节省(纹理)内存吗?
WebGL: does using a single-channel texture format actually save (texture) memory?
GL_LUMINANCE: Each element is a single luminance value. The GL
converts it to floating point, then assembles it into an RGBA element
by replicating the luminance value three times for red, green, and
blue and attaching 1 for alpha.
这也适用于 WebGL 吗?如果是这样,这是否意味着与使用 RGBA 相比,使用具有较少通道(例如 LUMINANCE)格式化的纹理不会节省 VRAM?
RAM 怎么样?
GL_LUMINANCE
在 OpenGL 3.2 中被弃用并移除。如今,您可以使用 GL_R8
等枚举明确指定内部格式。实现以指定的格式分配它们的内部存储(即使根据假设规则,OpenGL 规范中不存在此保证)。我也建议不要在 WebGL 中使用 GL_LUMINANCE
。只需使用显式内部格式并根据需要在着色器中扩展它,或者通过纹理调整。
Does this apply to WebGL too?
是的
does this imply that using textures formatted with less channels such as LUMINANCE does not save VRAM compared to using RGBA
不,虽然这是特定于实现的(并且一些实现确实选择在上传之前将数据扩展为 RGBA)扩展应该在运行中发生,基本上只是为每个颜色分量提供一个相同的值在着色器中从这样的纹理中采样。
And how about RAM?
一旦您调用 texImage2D
,数据就会上传到 VRAM,只要您不这样做(例如,通过保留数据引用),数据就不会保存在 RAM 中。
GL_LUMINANCE: Each element is a single luminance value. The GL converts it to floating point, then assembles it into an RGBA element by replicating the luminance value three times for red, green, and blue and attaching 1 for alpha.
这也适用于 WebGL 吗?如果是这样,这是否意味着与使用 RGBA 相比,使用具有较少通道(例如 LUMINANCE)格式化的纹理不会节省 VRAM?
RAM 怎么样?
GL_LUMINANCE
在 OpenGL 3.2 中被弃用并移除。如今,您可以使用 GL_R8
等枚举明确指定内部格式。实现以指定的格式分配它们的内部存储(即使根据假设规则,OpenGL 规范中不存在此保证)。我也建议不要在 WebGL 中使用 GL_LUMINANCE
。只需使用显式内部格式并根据需要在着色器中扩展它,或者通过纹理调整。
Does this apply to WebGL too?
是的
does this imply that using textures formatted with less channels such as LUMINANCE does not save VRAM compared to using RGBA
不,虽然这是特定于实现的(并且一些实现确实选择在上传之前将数据扩展为 RGBA)扩展应该在运行中发生,基本上只是为每个颜色分量提供一个相同的值在着色器中从这样的纹理中采样。
And how about RAM?
一旦您调用 texImage2D
,数据就会上传到 VRAM,只要您不这样做(例如,通过保留数据引用),数据就不会保存在 RAM 中。