我正在尝试在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,但都无法使用。
答案 0 :(得分:1)
尽管您似乎假设,SOIL_load_OGL_texture
几乎可以肯定不会检查可执行文件的目录。相对路径相对于流程的current working directory。根据您的描述,我假设您正在使用Visual Studio IDE。默认情况下,Visual Studio在运行程序时会将项目文件的目录用作工作目录。您可以在项目属性>调试>工作目录中更改该设置。我建议将其更改为计划在其中运行完成的应用程序的任何目录。
如果您确实要指定图片相对于可执行文件路径的路径,则建议使用绝对路径。不幸的是,无法在标准C ++中可靠地找到可执行文件的路径。在Windows上,您可以使用GetModuleFileName()
。请查看this question,以获取有关此主题的更多信息。拥有可执行文件的绝对路径后,将路径提取到目录并附加文件名。如果您可以使用C ++ 17,std::filesystem
可以帮助您使用路径...