我的问题是做什么时
Shader* s = new Shader("Shaders\\test.vert", "Shaders\\test.frag");
或
Texture texture("test.png");
visual studio拒绝找到它们,但在打开.exe文件时,一切正常。做
Shader* s = new Shader("C:\\Users\\Public\\Google Drive\\vs projects\\Engine\\Debug\\Shaders\\test.vert", "C:\\Users\\Public\\Google Drive\\vs projects\\Engine\\Debug\\Shaders\\test.frag");
确实解决了visual studio的问题,但它并不是我想要的。
我正在阅读文件的方式:
static std::string read_file(const char* path)
{
FILE* file = fopen(path, "rt");
fseek(file, 0, SEEK_END);
unsigned long length = ftell(file);
char* data = new char[length + 1];
memset(data, 0, length + 1);
fseek(file, 0, SEEK_SET);
fread(data, 1, length, file);
fclose(file);
std::string result(data);
delete[] data;
return result;
}
我确保我在调试(x86)模式下运行项目。任何解决方案?
答案 0 :(得分:1)
这是因为从Visual Studio运行时,Visual Studio中C ++项目的工作目录将设置为项目目录,而不是包含可执行文件的目录。资料来源:Project Settings for a C++ Debug Configuration
工作目录
- 指定正在调试的程序的工作目录,相对于EXE所在的项目目录。 如果将此处留空,则工作目录为项目目录。对于远程调试,项目目录将位于远程服务器上
因此,Shaders\test.vert
的绝对路径是
${path_to_your_project}\Shaders\test.vert
在你的情况下,它是
C:\Users\Public\Google Drive\vs projects\Engine\Shaders\test.vert
或
C:\Users\Public\Google Drive\vs projects\Engine\{project_name}\Shaders\test.vert
如果Engine是解决方案文件夹
只需将文件移动到正确的目录(项目目录),您的代码即可运行。