質問: vec4(color, 1.0); } ``` ブレークポイントなどで調べてみたところ、glShaderSource()関数でシェーダオブジェクトへソースコードをロードした後、シェーダオブジェクトの中身は改行文字"\0"しか格納されておらず。それが原因かと考えているのですが。試行錯誤してもうまくいきませんでした。 使用しているPCが対応しているバージョンは以下の通りです。 OpenGL:4.30 GLSL:4.30 参考資料 OpenGL4.0シェーディング言語 よろしくお願いします!
回答: まず、質問でコードを張るときは`三つの行で挟んでください ReadFileが問題です。 std::string::c_strの返すポインタの生存期間はそれを呼んだオブジェクトと同じです。 ローカル変数のstd::string::c_strを返しても関数を抜けるとそのポインタの指す文字列は解放済みです。 CやC++などのGCの無い言語を扱う場合はそのオブジェクトの寿命を把握しましょう。 ``` std::string ReadFile(const GLchar* file) { ifstream inFile(file); //ファイル読み込み if (!inFile) { fprintf(stderr, "Error opening file: %s\n", file); exit(1); } stringstream code; code << inFile.rdbuf(); inFile.close(); return code.str(); } //使用する箇所 std::string vertShaderCode = ReadFile("shader/basic.vert"); //ファイルを読み込み const GLchar* vertShaderCodeArry[] = { vertShaderCode.c_str() }; //配列にソースコードへのポインタを格納 ```