/*************************************************************//**
 *
 *  @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;
}
示例#2
0
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;
}