2

このコードを使用して、glslシェーダーが正常にコンパイルされたかどうかを確認しています。

    glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength);

    if (infologLength > 1)
    {
        int charsWritten  = 0;
        char * const infoLog = new char[infologLength];
        glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog);
        tError(infoLog, false);
        delete infoLog;
    }
}

返される文字列の長さは、nvidiaおよびATIカードでは空ですが、Intelカードでは、これは「エラーなし」の文字列を返します。

本当にエラーがないかどうかを確認するための最良の方法は何ですか?この文字列をチェックする必要がありますか?または、この関数glGetInfoLogARBが返す必要のある規則はありますか?

4

1 に答える 1

8

試す

bool CompileSuccessful(int obj) {
  int status;
  glGetShaderiv(obj, GL_COMPILE_STATUS, &status);
  return status == GL_TRUE;
}

シェーダーが正常にコンパイルされたかどうかを確認し、

bool LinkSuccessful(int obj) {
  int status;
  glGetProgramiv(obj, GL_LINK_STATUS, &status);
  return status == GL_TRUE;
}

プログラム全体が正常にリンクされたかどうかを確認します。

于 2010-04-18T17:43:07.253 に答える