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)