始终使用1的对齐方式有什么缺点?

glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
它会影响现代GPU的性能吗?

最佳答案



这强烈表明缺乏对row alignment in pixel transfer operations means的理解。

传递给OpenGL的图像数据应分为几行。每行包含width像素数,每个像素的大小由format和type参数定义。因此,带有GL_RGB类型的GL_UNSIGNED_BYTE格式将导致像素大小为24位。否则,预计像素将被打包,因此这些像素中的16行将占用48个字节。

每行都应按照GL_PACK/UNPACK_ALIGNMENT定义的特定值对齐。这意味着您添加到指针以获取下一行的值是:align(pixel_size * width, GL_*_ALIGNMENT)。如果像素大小是3个字节,宽度是2,并且对齐方式是1,则行字节大小是6。如果对齐方式是4,则行字节大小是 8

看到问题了吗?

可能来自某些图像加载器加载的某些图像文件格式的图像数据具有行对齐方式。有时这是1字节对齐的,有时则不是。 DDS图像具有指定为格式的对齐方式。在许多情况下,图像具有4字节的行对齐方式。因此,小于32位的像素大小将在具有特定宽度的行末尾填充。如果您给OpenGL的对齐方式与之不匹配,那么您将得到格式错误的纹理。

您设置对齐方式以匹配图像格式的对齐方式。如果您知道或以其他方式可以确保行对齐始终为1(除非您已经编写了自己的图像格式或DDS编写器,否则这不太可能),则需要将行对齐设置为与图像格式完全相同。

关于c++ - glPixelStorei(GL_UNPACK_ALIGNMENT,1)缺点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11042027/

10-11 18:34