2011-01-24 65 views
2

我的問題是,當使用 glutInitContextProfile(GLUT_CORE_PROFILE)而不是glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE)紋理區域保持黑色。我只是爲了強調:與兼容性配置文件,一切正常,我期望它的工作方式)使用核心配置文件時OpenGL紋理問題

我加載我的紋理與Devil,通常與ilutGLLoadImage(文件名),因爲我不知道如果tex參數由魔鬼正確設置,我也加載一些紋理與該代碼:

ILuint img; 
ilGenImages(1, &img); 
ilBindImage(img); 
ILboolean ret = false; 
if((ret = ilLoadImage("...jpg"))){ 
    ret = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); 
    if(!ret){ 
    std::cout << "image conversion failed" << std::endl; 
    } 

    glGenTextures(1, &texture[20]); 
    glBindTexture(GL_TEXTURE_2D, texture[20]); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); 
    /*char imageData[27] = { 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    127, 127, 127, 
    };*/ 
    //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 

    glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH), 
     ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, 
     ilGetData()); 
} 
else{ 
    std::cout << "image file not found" << std::endl; 
} 
ilDeleteImages(1, &img); 

我沒有成功測試了不同的TEX-參數,與那些使用,但至少應該不涉及mipmap處理相關的問題。 當我使用帶有imagedata-array的註釋部分時,一切正常,所以我想這對綁定,繪圖和着色沒有任何問題。如果您認爲可能會出現該簽名的問題,我會發布更多的代碼。

我知道,在覈心配置文件中,由於某些原因紋理可以被認爲是「不完整的」,但我無法找到爲什麼應該發生。我從DevIL或OpenGL都沒有收到任何錯誤。

感謝您的幫助。

回答

4

您應該檢查GL錯誤,ilGetInteger(IL_IMAGE_BPP)返回每個像素的字節數,這不是一個內部格式的枚舉值。改爲使用GL_RGB或GL_RGBA等枚舉。這在兼容性配置文件中是有效的,但不在覈心配置文件中。

+0

作品,非常感謝你! GL錯誤是無效的,儘管我有這個錯誤已經有一段時間了,現在它終於打到我了;) – waixo 2011-01-24 09:41:56