glTexImage2D与宽度/高度相关的Segfault

Ste*_* Lu 6 opengl textures image

当我尝试加载771x768图像时,我遇到了段错误.

尝试24x24和768x768图像,他们工作,没问题.

这是预期的吗?为什么它不会因GL错误而优雅地失败?

分段错误发生在glTexImage2D调用中.我正在加载PPM二进制文件,因此每像素打包24位.这个奇数与奇数维相结合可能产生一个非4字节(甚至2字节)的对齐结构(并且在我足够分配的缓冲区之外引用可能是错误的原因但是gdb没有向我显示内存地址(我可以用来查明是否是导致它的原因)).

glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, dataptr);
// in this specific case of failure, width = 771, height = 768,
// dataptr contains 1776384 bytes of binary RGB image data (771*768*3 = 1776384)
Run Code Online (Sandbox Code Playgroud)

dat*_*olf 16

这个奇数与奇数维相结合可能会产生一个非4字节(甚至2字节)的对齐结构(并且在我足够分配的缓冲区之外引用可能是错误的原因

这可能是原因.幸运的是,您可以设置对齐OpenGL使用读取像素数据.右键调用之前glTexImage…(…)

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
Run Code Online (Sandbox Code Playgroud)