わかりましたので、IDE から実行する際の癖を説明するために、私が行った小さなテストを示します。これが、VS で相対パスがどのように機能するかを理解するのに役立つことを願っています。
したがって、私のフォルダー階層は次のようになります。
/_Sandbox
_Sandbox.sln
/Debug
_Sandbox.exe
/shaders
color.vert
/_Sandbox
_Sandbox.proj
main.cpp
コードは次のようになります。
#include <iostream>
#include <string>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
struct stat info;
std::string path = "shaders/color.vert"; // To not I get the same behavior with "shaders\\color.vert"
int ret = stat(path.c_str(), &info);
ret == 0 ? std::cout << "File found." << std::endl : std::cout << "File doesn't exist." << std::endl;
std::cin.get();
return 0;
}
したがって、これを IDE で実行すると、「ファイルが存在しません」というメッセージが表示され、IDE の外部でこれを実行すると、「ファイルが見つかりました」というメッセージが表示されます。プログラムが VS 内からシェーダー ファイルを見つけるには、次のようにシェーダー フォルダーを配置する必要があります。
/_Sandbox
_Sandbox.sln
/Debug
_Sandbox.exe
/_Sandbox
/shaders
color.vert
_Sandbox.proj
main.cpp
ただし、IDE の内外からフォルダーを見つけるためのコードを取得できます。あなたがしなければならないことは、プロジェクトの設定に行くことです。「デバッグ」で、「作業ディレクトリ」を$(SolutionDir)$(Configuration)\
うまくいけば、これで問題が解決します。