OpenGL - SOIL不会加载JPG或PNG图像

问题描述 投票:1回答:1

我正在尝试在OpenGL中创建一个上下文加载器,我无法通过SOIL来加载图像。

这是代码:

Texture2D TextureLoader::loadSprite(const char* path)
{
    int width, height;
    GLuint texture = SOIL_load_OGL_texture(path, SOIL_LOAD_RGBA, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y);

    if (texture == 0)
    {
        Texture2D failedTexture;
        return failedTexture;
    }

    glBindTexture(GL_TEXTURE_2D, texture);

    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glBindTexture(GL_TEXTURE_2D, 0);

    Texture2D texture2d(texture, width, height);
    return texture2d;
}

它始终在纹理== 0检查时失败。映像文件与构建项目时生成的可执行文件位于同一目录中。我已经尝试了PNG和JPG,它也无法使用。

c++ opengl glfw soil
1个回答
1
投票

尽管你似乎假设,SOIL_load_OGL_texture几乎肯定不会检查可执行文件的目录。相对路径相对于过程的current working directory。根据您的描述,我假设您使用的是Visual Studio IDE。默认情况下,Visual Studio将在运行程序时使用项目文件的目录作为工作目录。您可以在项目属性>调试>工作目录中更改该设置。我建议将此更改为您计划运行的已完成应用程序的任何目录。

如果您确实想要指定相对于可执行文件路径的图片路径,那么我建议使用绝对路径。不幸的是,没有办法在标准C ++中可靠地找到可执行文件的路径。在Windows上,您可以使用GetModuleFileName()。有关此主题的更多信息,请查看this question。获得可执行文件的绝对路径后,提取目录的路径并附加文件名。如果你可以使用C ++ 17,std::filesystem可以帮助你处理路径......

© www.soinside.com 2019 - 2024. All rights reserved.