我正在尝试使用 DevIL 加载图像,然后创建纹理。我有一个名为 Texture 的类,我在构造函数中做所有这些事情。已创建有效上下文。我在第一次调用 glTextureParameteri() 时遇到访问冲突,所以我猜纹理没有正确绑定(bind)。我只是看不出为什么它不会绑定(bind)。

这是构造函数:

Texture::Texture(const std::string& filename){
//DevIL handle for the image
unsigned int ilID;

ilGenImages(1, &ilID);

ilBindImage(ilID);

ilEnable(IL_ORIGIN_SET);
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);

if (!ilLoad(IL_BMP, (ILstring)filename.c_str())){
    DebugUtility::gl_log_err("Failed to load image &s\n", filename.c_str()); //Just function that prints to log file
    return;
}
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);

glGenTextures(1, &texture);

//"texture" is global GLuint
glBindTexture(GL_TEXTURE_2D, texture);

//LINE BELOW CAUSES ACCESS VIOLATION!
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTextureParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTextureParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT),
    0, GL_RGBA, GL_UNSIGNED_BYTE, ilGetData());

ilDeleteImages(1, &ilID);
//Again, prints to log file
DebugUtility::gl_log("Succefully loaded and created texture %s", filename.c_str());
}
ilLoad 返回 true,因为该 if 块中的代码未执行。这是错误(我使用的是 Visual Studio 2013):

最佳答案

函数 glTextureParameteri() 是一个扩展,尝试使用 glTexParameteri() 并绑定(bind)一个事件纹理单元 glActiveTexture(GL_TEXTURE0)glTextureParameteri() 还需要纹理 ID,而不是目标。

关于c++ - 使用 OpenGL 和 DevIL 调用 glTextureParameteri 时出现访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26589683/

10-11 17:55