1

私は現在、OGL 2.1 に取り組んでいます。シェーダー作成手順では、シェーダーのコンパイルまたはプログラムのリンクが次のように失敗した場合に、入力がプログラムまたはシェーダー オブジェクトであるというメッセージを出力するエラー手順を作成したいと考えています。

void err(GLuint object)
{
    char *errMsg;
    int errLen, errRetrieved;

    if (object is program) {
        glGetProgramiv(object, GL_INFO_LOG_LENGTH, &errLen);
        ...
    } else {    
        glGetShaderiv(object, GL_INFO_LOG_LENGTH, &errLen);
        ...
    }

    cout << errMsg << endl;
    ...
}

しかし、オブジェクトがプログラム オブジェクトかシェーダー オブジェクトかを判断するにはどうすればよいでしょうか?

4

1 に答える 1

4

はい、方法はありますが、それを使用する理由はほとんどありません。まったく異なる機能でそれらを作成します。まったく異なる機能でエラーが発生します(glCompileShadervs. glLinkProgram)。プログラムでエラーの可能性を検出した時点でどれがどれかわからない場合は、コードを再構築する必要があります。

コードを再構築する方法がまったく見つからない場合 (そしてそれを可能にする方法がない場合) は、glIsShaderglIsProgramを使用してそれらをテストできます。しかし、私は、これらの関数を呼び出すことでさえ、コードの臭いであり、どこかで何かが深刻に間違っていることを示しているとまで言っています。

于 2013-01-05T07:48:05.700 に答える