我正在尝试将图像的子集上传到纹理。所以,我这样做:
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, x_offset);
glPixelStorei(GL_UNPACK_SKIP_ROWS, y_offset);
glTexSubImage2D(GL_TEXTURE_2D, 0, x_offset, y_offset, width, height,
GL_BGRA, GL_UNSIGNED_BYTE, NULL);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
当x和y偏移设置为0并且宽度和高度设置为纹理宽度和高度时,此代码可以正常工作。但是,每当我尝试一个子集时,我都可以完全垃圾化看起来像噪音的图像。
我可以理解我的纹理的一部分是有噪声的,因为它不会用适当的值初始化(由于代码只读取一个子集)但我希望表示该子集的块具有正确的值。