OpenGL で使用するために、GLSL 頂点/フラグメント シェーダー ソースを const char* 配列に読み込もうとしています。私がそれを行うために使用している機能は
const char* loadSource(const char* path)
{
string line;
stringstream output;
ifstream source(path);
if(source.is_open())
{
while(source.good())
{
getline(source, line);
output << line << endl;
}
source.close();
}
return output.str().c_str();
}
ソース入力は、最初の呼び出しで正常に機能します。ただし、2 番目のソースを呼び出すと、最初のソースが「破損」します (両方の呼び出しが 1 つの関数のスコープ内にあります)。
const char* vs_source = loadSource("vertex.vert"); // vs_source loads fine
const char* fs_source = loadSource("fragment.frag"); // fs_source loads fine. vs_source is terminated sooner than after previous call.
注: vs_source を *.cpp ファイルに直接コーディングして、両方のシェーダーをコンパイルしようとしました。これは、loadSource 関数でばかげたことをしているに違いないという事実を示しています。
質問:テキスト入力のこのような奇妙な動作の原因は何ですか?