是否有任何方法可以在opengl es 2.0中使用与宽度不同的音高来设置纹理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来解决这个问题。但是,似乎在Android平台上都没有用于绑定缓冲区的GL_PIXEL_UNPACK_BUFFER或GL_PACK_ROW_LENGTH。
glTex(Sub)Image2D不支持此功能。
任何提示?
答案 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纹理。您要使用的宽度和高度可以是等于或小于最大尺寸的任何尺寸。