Android NDK OpenGL ES 2.0纹理间距

Android NDK OpenGL ES 2.0纹理间距,android,opengl-es,textures,pbo,Android,Opengl Es,Textures,Pbo,在opengl es 2.0中,是否有任何方法可以使用不同于纹理宽度的间距来blit纹理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_长度来解决这个问题。然而,Android平台上似乎既不存在用于绑定缓冲区的GL_PIXEL_UNPACK_缓冲区,也不存在GL_PACK_ROW_长度 glTex(Sub)Image2D不支持此功能 有什么建议吗?引用@ 在某些情况下,这可以通过调整纹理坐标来解决 假设我有一个512x512纹理在512*位深度 但是我要使用的

在opengl es 2.0中,是否有任何方法可以使用不同于纹理宽度的间距来blit纹理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_长度来解决这个问题。然而,Android平台上似乎既不存在用于绑定缓冲区的GL_PIXEL_UNPACK_缓冲区,也不存在GL_PACK_ROW_长度

glTex(Sub)Image2D不支持此功能

有什么建议吗?

引用@

在某些情况下,这可以通过调整纹理坐标来解决


假设我有一个
512
x
512
纹理在
512
*
位深度

但是我要使用的数据被调高到
256
*
位深度

我继续并将
glSubTexImage2D
调整为
0
256/512

而不是
0
1


换句话说,去掉我没有使用的纹理部分

这听起来可能有点过分(甚至不太符合您的期望),但您可以简单地利用光栅化器和帧缓冲区对象:
创建一个以纹理作为颜色缓冲区的FBO,然后。。。借助一个简单的顶点+碎片着色器,在其中绘制一些纹理四边形:您可以使用一个简单的正交。顶点着色器中的投影矩阵,并在片段着色器中使用点采样纹理采样。

因为我在评论中回答了这个问题,这里有一个更直接的答案:

// 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;

现在使用这些texcoords进行渲染,您可以在512x512缓冲区中粘贴256x256纹理。您要使用的宽度和高度可以是等于或低于最大尺寸的任何尺寸。

在这里回答我自己的问题。在某些情况下,这可以通过调整纹理坐标来解决。假设我有一个512*bitdepth的512x512纹理,但我想使用的数据是256*bitdepth。我继续并仍然使用glSubTexImage2D,但将纹理坐标调整为0到(256/512),而不是0到1。换句话说,去掉我没有使用的部分纹理。你能把你的解决方案贴在下面吗?谢谢。谢谢你发这个。对不起,我让它死了。我编辑了我的问题来澄清。