为什么启动OpenGL可执行文件时启动目录很重要?



我正在做一个openGL项目,并从。vert和。fragglsl文件读取我的着色器。我使用CMake扩展自动忍者文件生成以及。这是我的readfile代码:

std::string readFile(const char *filePath) {
std::string content;
std::ifstream fileStream(filePath, std::ios::in);
if(!fileStream.is_open()) {
std::cerr << "Could not read file " << filePath << ". File does not exist." << std::endl;
return "";
}
std::string line = "";
while(!fileStream.eof()) {
std::getline(fileStream, line);
content.append(line + "n");
}
fileStream.close();
return content;
}

我花了很长时间认为我疯了,因为从我的构建目录我正在做。/app/NAME_OF_APP.exe,但着色器没有被应用只是黑色。只有当我在文件资源管理器中点击它时,它才能工作,所以我cd到build/app/并调用。/NAME_OF_APP.exe,然后它就工作了。为什么会发生这种行为?起始目录是否影响实际应用程序的相对路径?我觉得很奇怪。谢谢。

如果您从命令行运行程序,则当前目录是该命令提示符中的当前目录。如果从资源管理器运行程序,则当前目录是存放可执行文件的目录。

你可以使用像GetModuleFileName这样的函数(以NULL作为hModule参数)来获取可执行文件的路径,然后在最后一个处切断,然后更改到该目录,然后程序将不依赖于程序运行的目录。

最新更新