私は現在、プログラムが実行されているアセットフォルダへのパスを提供する "fromAssets"関数を作成しています。アセットパス:絶対値対生成
この関数は、次のコード部分に由来します。
ヘッダファイル:
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
namespace path {
static fs::path BUILD_PATH;
const void initialiseBuildPath(const char *argv);
const char * fromAssets(const char * path);
}
ソースファイル:
using namespace path;
const void path::initialiseBuildPath(const char *argv0) {
BUILD_PATH = fs::initial_path<fs::path>();
BUILD_PATH = fs::system_complete(fs::path(argv0))
.parent_path()
.parent_path();
}
const char * path::fromAssets(const char * path) {
std::string strPath = std::string(path);
return (BUILD_PATH.string() + "/assets/" + strPath).c_str();
}
用途:
const char * absolute = "/Users/thomaspetillot/CLionProjects/glDiscoverProject/build/assets/shader/basic.vert.glsl";
const char * generated = path::fromAssets("shader/basic.vert.glsl");
cout << strcmp(absolute, generated) << endl; // show 0
// Work
auto * shader = new Shader(absolute,
path::fromAssets("shader/basic.frag.glsl"));
// Doesn't work
auto * shader = new Shader(generated,
path::fromAssets("shader/basic.frag.glsl"));
フォルダ構造:
build
├── assets
│ ├── img
│ │ ├── pepe.jpg
│ │ └── snoop.jpg
│ └── shader
│ ├── basic.frag.glsl
│ └── basic.vert.glsl
└── bin
└── program
どのようにフラグ・シェーダのためではなく、他のために働くことができますか?
私たちはどのように知っていますか? 'path :: fromAssets(" shader/basic.vert.glsl ")の結果とはどのようなものですか?/Users/a/b/c/build/assets/shader/basic.vert.glslとはどう違うのですか? 「? – BDL
彼らは違いはありません、strcmpは0を返します - それは謎がどこから来るかです。 – Pixeuh
ああ、問題を見つけました。 – BDL