image - glTexImage2D 与宽度/高度相关的段错误

标签 image opengl textures

当我尝试加载 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)

最佳答案

This odd number combined with an odd dimension probably produces a not-4-byte (or even 2-byte) aligned structure (and referencing outside of my exactly enough allocated buffer may be the cause of the error

这可能是原因。幸运的是,您可以设置 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);

关于image - glTexImage2D 与宽度/高度相关的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380773/

相关文章:

c++ - OpenGL 4.2 glBindAttribLocation 无效值?

iphone - 如何在 iPhone 上的 OpenGL ES 中设置/获取纹理上的像素?

Imagemagick:转换为固定高度,比例宽度

ruby - 如何仅在宽度超过 Graphics/Image Magick 时调整图像大小

cocoa - 如何从 OpenGL 纹理创建 CVOpenGLTextureRef

c - 强制软件实现 opengl 3.x

cocoa OpenGL : draw texture and round corners

Three.js 白色纹理渲染为灰色

python - 使用 RSA 算法进行编码解码时图像数据被损坏

html - 使用base64编码图片的优缺点