有没有什么办法在opengl es 2.0中以不同于宽度的间距对纹理进行blit处理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来解决此问题。不过,在Android平台上,GL_PIXEL_UNPACK_BUFFER似乎无法将缓冲区绑定到或GL_PACK_ROW_LENGTH。Android NDK OpenGL ES 2.0纹理间距
glTex(Sub)Image2D不支持这个。
任何提示?
有没有什么办法在opengl es 2.0中以不同于宽度的间距对纹理进行blit处理。通常我会通过使用PBO或通过glPixelStore调整GL_PACK_ROW_LENGTH来解决此问题。不过,在Android平台上,GL_PIXEL_UNPACK_BUFFER似乎无法将缓冲区绑定到或GL_PACK_ROW_LENGTH。Android NDK OpenGL ES 2.0纹理间距
glTex(Sub)Image2D不支持这个。
任何提示?
因为我回答了在这里评论是更直接的答案:
// 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来呈现,你可以在512×512缓冲坚持256x256的质感。您想要使用的宽度和高度可以是等于或小于您的最大尺寸的任何尺寸。
它可能听起来有点矫枉过正(或者甚至不符合你的期望),但也许你可以简单地利用光栅化器和帧缓冲区对象: 创建一个FBO纹理作为颜色缓冲区和。通过一个简单的顶点+片段着色器,在它中画出一些纹理四边形(S):你将使用一个简单的Ortho。在顶点着色器中使用投影矩阵,并在片段着色器中使用点采样纹理采样。
在这里回答我自己的问题。 在某些情况下,这可以通过调整纹理坐标来解决。假设我有一个512x512纹理以512 * bitdepth投射,但我想要使用的数据投射到256 * bitdepth。我继续前进,并且glSubTexImage2D仍然是,但是将纹理坐标调整为0到(256/512)而不是0到1.换句话说,剥掉我没有使用的纹理部分。 – Halsafar 2011-06-15 04:20:14
您可以将您的解决方案作为下面的答案发布吗?谢谢。 – 2011-06-15 12:34:14