我試圖用DevIL加載圖像,然後創建一個紋理。我有一個名爲Texture
的類,我在構造函數中完成了所有這些工作。一個有效的上下文已經創建。我在第一次致電glTextureParameteri()
時遇到了訪問衝突,所以我猜想紋理沒有正確綁定。我只看到沒有理由爲什麼它不會綁定。使用OpenGL和DevIL調用glTextureParameteri時的訪問衝突
這裏的構造函數:
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,因爲不執行,如果塊中的代碼。這裏是錯誤(我正在使用Visual Studio 2013):
projectSDL.exe中0x74E1CB49未處理的異常:0xC0000005:執行位置0x00000000的訪問衝突。
'glTextureParameter()'在OpenGL 4.5中是標準的。我希望人們第一次看到它時會把它和glTexParameter()混淆起來。有時你想知道OpenGL中的API設計選擇...... – 2014-10-27 15:14:01
工作!事實上,容易搞砸那些功能... – Heiski 2014-10-27 15:17:33