1

Я знаю, что этот вопрос может показаться немного глупым, но я хотел бы знать, есть ли способ сделать то, что я притворяюсь, без "грубого принуждения".

Я разрабатываю довольно большое приложение, которое использует некоторые OpenGL Stuff для целей графического интерфейса. Я использовал много расширений OpenGL. Все было сделано на машине с хорошей графической картой, поэтому все всегда работало нормально.

Теперь я протестировал свое приложение на машине с более слабой графической картой - первая поддерживает множество функций opengl 4, вторая - только несколько из версии 3 - и, к сожалению, некоторые вещи не отображаются.

Я бы сказал, что причина в том, что каким-то образом я использую расширение, которое не поддерживается на более слабой машине, однако у меня нет единой подсказки, какое расширение или функция может не поддерживаться.

Итак, вопрос в том, можно ли как-то узнать, какое это расширение, например, как-то отключить одно расширение и проверить, работает ли оно на хорошей машине. Моя проблема в том, что код достаточно большой, чтобы начинать комментировать построчно на хорошей машине, пока я не столкнусь с той же проблемой.

2 ответа2

2

Вы можете перечислить доступные расширения OpenGL, используя вызов

glGetString(GL_EXTENSIONS);

В частности, тестирование расширения требует некоторой осторожности. Эту функцию можно найти в вики OpenGL:

// Helper to check for extension string presence.  Adapted from:
//   http://www.opengl.org/resources/features/OGLextensions/
static int isExtensionSupported(const char *extList, const char *extension)
{

  const char *start;
  const char *where, *terminator;

  /* Extension names should not have spaces. */
  where = strchr(extension, ' ');
  if ( where || *extension == '\0' )
    return 0;

  /* It takes a bit of care to be fool-proof about parsing the
     OpenGL extensions string. Don't be fooled by sub-strings,
     etc. */
  for ( start = extList; ; ) {
    where = strstr( start, extension );

    if ( !where )
      break;

    terminator = where + strlen( extension );

    if ( where == start || *(where - 1) == ' ' )
      if ( *terminator == ' ' || *terminator == '\0' )
        return 1;

    start = terminator;
  }

  return 0;
}
0

Обычно вы можете получить список расширений через вызовы API OpenGL. Например, в linux используйте glxinfo чтобы увидеть список расширений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .