Android NDK OpenGL ES 2.0纹理间距

时间:2011-06-13 23:54:29

标签: android opengl-es textures pbo

是否有任何方法可以在opengl es 2.0中使用与宽度不同的音高来设置纹理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来解决这个问题。但是,似乎在Android平台上都没有用于绑定缓冲区的GL_PIXEL_UNPACK_BUFFER或GL_PACK_ROW_LENGTH。

glTex(Sub)Image2D不支持此功能。

任何提示?

3 个答案:

答案 0 :(得分:2)

引用@ Halsafar

  

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


假设我有一个 512 x {strong> 512 纹理 512 * bitdepth

但我要使用的数据是 256 * bitdepth

我继续glSubTexImage2D仍然可以将纹理坐标调整为 0 为( 256/512

而不是 0 1

换句话说, 剥离我未使用的纹理部分

答案 1 :(得分:1)

它可能听起来有点矫枉过正(甚至不太符合您的期望),但也许您可以简单地利用光栅化器和帧缓冲区对象: 使用纹理作为颜色缓冲区创建一个FBO,并在...中绘制一些纹理四边形,这要​​归功于一个简单的顶点+片段着色器:您将使用简单的Ortho。顶点着色器中的投影矩阵,并在片段着色器中使用点采样纹理采样。

答案 2 :(得分:0)

由于我在评论中回答这里是一个更直接的答案:

// 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纹理。您要使用的宽度和高度可以是等于或小于最大尺寸的任何尺寸。