2015-11-01 128 views
0

我想學習OpenGL,我使用SOIL來加載圖像。GL_INVALID_OPERATION在glGenerateMipmap(不完整的立方體貼圖)

我有以下一段代碼:

GLuint texID = 0; 

bool loadCubeMap(const char * baseFileName) { 

    glActiveTexture(GL_TEXTURE0); 

    glGenTextures(1, &texID); 
    glBindTexture(GL_TEXTURE_CUBE_MAP, texID); 

    const char * suffixes[] = { "posx", "negx", "posy", "negy", "posz", "negz" }; 
    GLuint targets[] = { 
     GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 
     GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 
     GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 
    }; 

    for (int i = 0; i < 6; i++) { 
     int width, height; 
     std::string fileName = std::string(baseFileName) + "_" + suffixes[i] + ".png"; 
     std::cout << "Loading: " << fileName << std::endl;   
     unsigned char * image = SOIL_load_image(fileName.c_str(), &width, &height, 0, SOIL_LOAD_RGB); 
     if (!image) { 
      std::cerr << __FUNCTION__ << " cannot load image " << fileName << " (" << SOIL_last_result() << ")" << std::endl; 
      return false; 
     } 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); 
     SOIL_free_image_data(image); 
    } 

    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 
    glGenerateMipmap(GL_TEXTURE_CUBE_MAP); 

    glBindTexture(GL_TEXTURE_CUBE_MAP, 0); 
    return true; 

} 

當我的話,這個圖像加載成功,但後來我得到一個錯誤控制檯:

---- OGL DEBUG ---- 
message <1>: 'API' reported 'Error' with 'High' severity: 
GL_INVALID_OPERATION in glGenerateMipmap(incomplete cube map) 
---- BACKTRACE ---- 

並沒有立方體貼圖的顯示在所有。 你看到這段代碼有什麼錯誤嗎?

回答

4

你從來沒有真正指定立方體貼圖面的紋理圖像。對於所有立方體的面孔,您改爲在GL_TEXTURE_2D目標上調用glTexImage2D

+0

那麼應該在那裏呢?目標[i](GL_TEXTURE_CUBE_MAP_POSITIVE_X,...)? – Youda008

+0

@ Youda008:是的。目前,你甚至不使用你設置的'targets'數組... – derhass