繁体   English   中英

Android NDK OpenGL ES 2.0 纹理间距

[英]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 不支持这个。

有小费吗?

引用@Halsafar

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


假设我有一个512 X 512纹理以512 * bitdepth

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

我在前面 go 和glSubTexImage2D仍然但是将纹理坐标调整为0到( 256/512

而不是01

换句话说,去掉我不使用的纹理部分

这听起来可能有点矫枉过正(甚至不符合您的期望),但也许您可以简单地利用光栅化器和帧缓冲区对象:创建一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM