gpt4 book ai didi

c++ - 使用 Devil 将纹理段错误加载到 OpenGL 中

转载 作者:行者123 更新时间:2023-11-28 02:32:24 30 4
gpt4 key购买 nike

我正在尝试使用 Devil 将纹理加载到 OpenGL 中,但在调用此构造函数时出现段错误

Sprite::Sprite(const char *path){

ILuint tex = 0;

ilutEnable(ILUT_OPENGL_CONV);
ilGenImages(1, &tex);
ilBindImage(tex);
ilLoadImage(path);
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
width = (GLuint*)ilGetInteger(IL_IMAGE_WIDTH);
height = (GLuint*)ilGetInteger(IL_IMAGE_HEIGHT);

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
width,
height,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
&tex);

ilBindImage(0);
ilDeleteImages(1, &tex);
ilutDisable(ILUT_OPENGL_CONV);

}

纹理是 protected 成员

GLuint texture;

一旦调用此构造函数,我就会收到段错误并退出,我正在使用 freeglut、gl、il、ilu 和 ilut。任何帮助将不胜感激

编辑:

我还决定采用不同的方法并使用

texture = ilutGLLoadImage(path)

函数只是将它直接加载到 gl 纹理中,因为我找到了来自

的段错误
ilLoadImage(path)

但是编译器告诉我 ilutGLLoadImage() 没有在此范围内声明,我有 IL/il.h IL/ilu.h 和 IL/ilut.h 都包含并初始化

最佳答案

我从未使用过 DevIL,但是 glTexImage2D 希望将指向像素数据的指针作为最后一个参数,而您将指针传递给那里的局部变量 tex,它分配在堆栈上并且不包含预期的信息。所以 glTexImage2D 读取了你的堆栈并最终尝试访问它不应该访问的内存,你得到了段错误。

我猜你想改用 ilGetData()

关于c++ - 使用 Devil 将纹理段错误加载到 OpenGL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640238/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com