当我尝试加载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)
答案 0 :(得分: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);
答案 1 :(得分:1)
我在opengl论坛上看过这个:
width must be 2^m + 2(border) for some integer m.
height must be 2^n + 2(border) for some integer n.
我发现了这一点,我相信它澄清了正在发生的事情:
1. What should this extension be called?
STATUS: RESOLVED
RESOLUTION: ARB_texture_non_power_of_two. Conventional OpenGL
textures are restricted to size dimensions that are powers of two.