[英]Android NDK OpenGL ES 2.0 Texture Pitch
有什么方法可以在 opengl es 2.0 中以不同于其宽度的间距对纹理进行 blit。 通常我会通过使用 PBO 或通过 glPixelStore 调整 GL_PACK_ROW_LENGTH 来解决这个问题。 但是,Android 平台上似乎既不存在用于将缓冲区绑定到的 GL_PIXEL_UNPACK_BUFFER 也不存在 GL_PACK_ROW_LENGTH。
glTex(Sub)Image2D 不支持这个。
有小费吗?
在某些情况下,这可以通过调整纹理坐标来解决。
假设我有一个512
X 512
纹理以512
* bitdepth
但我想使用的数据是256
* bitdepth
我在前面 go 和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 纹理。 您要使用的宽度和高度可以是等于或低于最大尺寸的任何尺寸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.