【发布时间】:2014-06-25 17:34:18
【问题描述】:
我一直在努力寻找一个明确的答案,但似乎没有人明确提出这个问题。
我可以在 WebGL Chrome、Firefox、Safari、IE 等中使用一维采样器和一维纹理吗?
编辑
可以理解,1 确实是 2 的幂 (2^0=1),这意味着您可以有效地使用 2D 采样器和使用高度为 1 和宽度为 256 或 512 等的纹理来复制一维纹理。
1D 纹理没有实际意义,它们之所以存在,是因为它们不仅有目的,而且旨在转化为 GPU 本身的优化(与 2D 纹理相反)。请记住,每个参数都需要时间加载到调用堆栈上,几乎所有 GPU 编程都是优化每一个可能的操作的艺术。
计算着色器经常需要一个没有额外维度的浮点列表,使用 1D 纹理和采样器提供与强类型相同的清晰度。即以一维结构表示一维数据,并以二维结构表示二维数据。它还删除了索引到行/列转换所需的额外操作。
问题不是他们是否有充分的理由,而是他们是否得到支持。
在 WebGL 1.0 中基于 OpenGL ES 2.0 自 09/MAY/2014
- 目前没有一维纹理或采样器支持。
【问题讨论】:
-
我会将“yet”更改为“WebGL 1.0”或类似的东西。 WebGL 2 肯定会拥有它们。
-
@BartekBanachewicz:他们为什么要添加一维纹理?它们是一个完全多余的功能。它们不允许你做任何你不能用 2D 纹理做的事情。正如下面的答案所暗示的,您创建了一个高度为 1 的 2D 纹理,并具有 1D 纹理。事实上,如果 API 是从头开始创建的,那么只有 3D 纹理就足够了。 2D 和 1D 纹理只是 3D 纹理的简化情况。
-
@RetoKoradi:没有ARB_texture_non_power_of_two extension mipmapping 和 GL_CLAMP_TO_EDGE 以外的包裹模式仅支持二次幂纹理,因此一维纹理有合法的用例。
-
@JensNolte:好点。我认为下一个主要的 WebGL 版本将基于 ES 3.0?这解除了 ES 2.0 中对 NPOT 纹理的限制。
-
@RetoKoradi:不完全是。缓冲区纹理实际上是精美的 1D 纹理,可让您远远超过
GL_MAX_TEXTURE_SIZE^2(2D 限制)的存储空间。但是您不能将它们与一维坐标以外的任何东西一起使用。
标签: glsl webgl shader fragment-shader glsles