有没有办法在OpenGL ES 2.0中使用与宽度不同的间距的方式将纹理blit。通常我会使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来修复此问题。然而,在Android平台上,绑定缓冲区的GL_PIXEL_UNPACK_BUFFER和GL_PACK_ROW_LENGTH似乎都不存在。
glTex(Sub)Image2D不支持此功能。
有什么提示吗?
有没有办法在OpenGL ES 2.0中使用与宽度不同的间距的方式将纹理blit。通常我会使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来修复此问题。然而,在Android平台上,绑定缓冲区的GL_PIXEL_UNPACK_BUFFER和GL_PACK_ROW_LENGTH似乎都不存在。
glTex(Sub)Image2D不支持此功能。
有什么提示吗?
引用 @Halsafar
在某些场景下,可以通过调整纹理坐标来解决这个问题。
假设我有一个 512
x 512
的纹理,其位深度为 bitdepth
* 512
但是我要使用的数据是按 bitdepth
* 256
来排列的
我仍然使用 glSubTexImage2D
,但将纹理坐标调整为0
到(256/512
)
而不是 0
到 1
。
换句话说,去掉我不使用的纹理部分。
既然我在评论中回答了,这里是更直接的答案:
// width and height is 256 and max is 512
// texture coordinates
float uMax = (width / max);
float vMax = (height / max);
_texCoords[0] = 0.0; _texCoords[1] = vMax;
_texCoords[2] = uMax; _texCoords[3] = vMax;
_texCoords[4] = 0.0; _texCoords[5] = 0.0;
_texCoords[6] = uMax; _texCoords[7] = 0.0;
现在使用这些纹理坐标进行渲染,您可以将256x256的纹理粘贴到512x512的缓冲区中。您想要使用的宽度和高度可以是任何小于或等于最大尺寸的大小。