シェーダー コード ファイルからテキストを読み込む関数を作成しています。ポインターに関して奇妙なことに遭遇しましたが、その理由がわかりません。
Loadという名前の関数があります。この関数では、ファイル ストリームから取得したテキストを出力変数にコピーします。
static void Load(const GLchar* source_path, GLchar* output,GLint& count )
{
string code;
// loading logic here
code= vShaderStream.str(); // copying the string from the stream
count = code.length();
output = new GLchar[count];
std::size_t length = code.copy(output, count, 0);
output[length]= '\0';
}
Loadは次のように呼び出されます。
for (size_t i = 0; i < d_n_fragment; i++)
{
Load(d_fragment_source_path, d_fragment_code[i], d_fragment_string_count[i]);
}
ここで、d_fragment_codeは、既に初期化されている Glchar** の double ポインターです。Load 関数が呼び出された後、ポインタd_fragment_code[i]にはテキストが含まれていません。Load 関数のシグネチャを次のように変更しようとしました。
static void Load(const GLchar* source_path, GLchar*& output,GLint& count )
したがって、ポインターを参照渡しします。関数が呼び出された後、d_fragment_codeはファイルからロードされたテキストを正しく保持しますが、ポインターが参照によって渡される理由がわかりません。
その内容を変更するには、ポインターを渡すだけで十分だと思いました。私は混乱しています、あなたはそれに光を当てることができますか?