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

是的,有一种方法,但你几乎没有理由使用它。您使用完全不同的功能创建它们。glCompileShader您会使用完全不同的功能( vs. glLinkProgram)导致错误。如果您不知道在您的程序中检测到可能的错误是哪个点,那么您确实需要重组您的代码。

如果您完全找不到重构代码的方法(而且这不可能),那么您可以使用glIsShaderglIsProgram来测试它们。但我什至会说,即使调用这些函数也是一种代码味道,表明某处出现了严重错误。

于 2013-01-05T07:48:05.700 回答