9

有什么方法可以在opengl es 2.0中以不同于其宽度的间距对纹理进行blit。通常我会通过使用 PBO 或通过 glPixelStore 调整 GL_PACK_ROW_LENGTH 来解决这个问题。但是,Android 平台上似乎既不存在用于将缓冲区绑定到的 GL_PIXEL_UNPACK_BUFFER 也不存在 GL_PACK_ROW_LENGTH。

glTex(Sub)Image2D 不支持这个。

有小费吗?

4

3 回答 3

2

引用@Halsafar

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


可以说我有一个512X512纹理定位在512*bitdepth

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

我继续前进,glSubTexImage2D但将纹理坐标调整0为 ( 256/512)

而不是0to 1

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

于 2011-08-04T15:04:51.983 回答
1

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

于 2011-11-26T08:52:09.973 回答
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 纹理。您要使用的宽度和高度可以是等于或低于最大尺寸的任何尺寸。

于 2012-01-17T07:46:46.410 回答