我知道除了 GL_TEXTURE_RECTANGLE 之外,大多数纹理都是标准化的。
但是,我找不到关于 GL_TEXTURE_EXTERNAL_OES 的信息。坐标是标准化的还是在 [0, imageWidth], [0, imageHeight] 的范围内?
如果您提及您从哪里获得信息,我也将不胜感激。我在khronos 网站上找不到它。
像你一样,令人沮丧的是,我无法很快找到一个明确的声明。然而...
OES_EGL_image_external的扩展文档提到:
他们的默认最小过滤器是
LINEAR
.INVALID_ENUM
将 min 过滤器值设置为LINEAR
or以外的任何值都是错误的NEAREST
。
和:
默认的 s 和 t 换行模式是
CLAMP_TO_EDGE
,INVALID_ENUM
将换行模式设置为任何其他值都是错误的。
如果您习惯于处理非二次幂纹理,那么这些非常清楚的线索表明坐标没有标准化。事实上,扩展的整个基调——可以使用一到三个硬件采样单元,可能会丢失一些变化,并且只允许一个细节级别——强烈保留执行完全相同的权利就好像您从非二次方源中分别对 Y、U 和 V 进行采样,然后自己将它们进行算术组合。
但就提供彻底的纸上回答而言: 由相应的手册页CLAMP_TO_EDGE
定义为:
GL_CLAMP_TO_EDGE
导致坐标被钳制到 range(1/2N, 1 - 1/2N)
,其中N
是在钳制方向上的纹理大小。
...再次,如果坐标被规范化(尽管它实际上不会是未定义的),这也没什么意义。
所以我愿意赌他们没有正常化。
他们使用标准化的纹理坐标。您可以使用 [0.0, 1.0] 范围内的纹理坐标来处理它们。虽然在扩展规范中指出这一点可能很好,但他们可能认为没有必要,因为它就像 OpenGL ES 中的所有其他纹理一样。
资料来源:在 Kindle Fire HDX 7" 平板电脑上试用过。