Android NDK OpenGL ES 2.0纹理间距

| 有什么方法可以在opengl es 2.0中以不同于其宽度的间距涂抹纹理。通常,我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来解决此问题。但是,Android平台上似乎不存在用于绑定缓冲区的GL_PIXEL_UNPACK_BUFFER或GL_PACK_ROW_LENGTH。 glTex(Sub)Image2D不支持此功能。 有小费吗?     
已邀请:
        引用@Halsafar   在某些情况下,可以通过调整纹理坐标来解决。 假设我有一个
512
x
512
纹理,间距为
512
*
bitdepth
但我要使用的数据的间距为
256
*
bitdepth
我继续前进,仍然是
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进行渲染,您可以将256x256纹理粘贴在512x512缓冲区中。您要使用的宽度和高度可以是等于或小于最大尺寸的任何尺寸。     

要回复问题请先登录注册