/*************************************************************//** * * @brief シェーダーのリンクを行う * @param なし * @return 正常終了:true * @return 異常終了:false * ****************************************************************/ bool C_BaseShader::Link() { assert(programObjectHandle_ != 0); // リンク済みの場合は何もしない if (linkFlag_ == true) return true; // プログラムをリンクする glLinkProgram(programObjectHandle_); // リンクの結果 GLint linkResult = 0; // プログラムのステータスを取得 glGetProgramiv(programObjectHandle_, GL_LINK_STATUS, &linkResult); if (linkResult == GL_FALSE) { PrintLog("[ C_BaseShader::Link ] : プログラムのリンクに失敗しました。\n"); // エラーを出力 PrintLinkError(programObjectHandle_); return false; } // リンク済みフラグを立てる linkFlag_ = true; // アクティブな属性とユニフォーム変数を出力 PrintActiveAttributes(); PrintActiveUniforms(); return true; }
GLuint ShaderPair::GetUniformLocation(const char* varName) { GLuint asint; asint = glGetUniformLocation(program, varName); if(asint == 0xFFFFFFFF) { LogError("Could not get UniformLocation of %s\n", varName); PrintActiveUniforms(); assert(asint != 0xFFFFFFFF); } return asint; }