c++ - glGenerateMipmap 中的 GL_INVALID_OPERATION(不完整的立方体贴图)

标签 c++ opengl textures mipmaps skybox

我正在尝试学习 OpenGL,并且正在使用 SOIL 加载图像。

我有以下代码:

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 ----

并且根本没有显示任何立方体贴图。 你看到这段代码有什么错误吗?

最佳答案

您实际上从未为立方体贴图面指定纹理图像。您改为在所有立方体面的 GL_TEXTURE_2D 目标上调用 glTexImage2D

关于c++ - glGenerateMipmap 中的 GL_INVALID_OPERATION(不完整的立方体贴图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463623/

相关文章:

c++ - OpenGL Y 纹理坐标行为异常

将所有纹理绑定(bind)到一个巨大的描述符集上

c++ - nlohmann JSON C++ 包含问题

opengl - FBO 和 mipmap 纹理

View 空间中的 openGL 立方体贴图反射是错误的

opengl - opengl 中的 mipmap 生成 - 是硬件加速吗?

android - 来自 Drawable 的 AndEngine 纹理

c++ - Qt 5.6 alpha QtWebEngine。如何使用 QWebEngineUrlRequestJob?

c++ - 如何跟踪检测到的对象

c++ - 成员函数作用域变量