OpenGL / GLSL проверяет, правильно ли скомпилирован шейдер на картах Intel - PullRequest
2 голосов
/ 18 апреля 2010

Я использую этот код, чтобы проверить, нормально ли скомпилирован мой 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 должна возвращать?

1 Ответ

8 голосов
/ 18 апреля 2010

Попробуйте

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;
}

чтобы проверить, была ли вся программа успешно связана.

...