Como posso descobrir qual das extensões do OpenGL que diferem de duas máquinas está faltando na segunda máquina?

1

Eu sei que esta pergunta pode soar um pouco boba, mas eu gostaria de saber se existe uma maneira de fazer o que eu finjo sem "Forçar Brute".

Estou desenvolvendo um aplicativo grande que usa algumas coisas do OpenGL, para fins de GUI. Eu tenho usado muitas extensões do OpenGL. Tudo foi feito em uma máquina com um bom Cartão Gráfico, então tudo sempre funcionou bem.

Agora testei meu aplicativo em uma máquina com cartão gráfico mais fraco - O primeiro suporta muitos recursos do opengl 4, o segundo apenas alguns da versão 3 - e, infelizmente, algumas coisas não estão sendo exibido.

Eu diria que o motivo é que, de alguma forma, estou usando uma extensão que não é suportada na máquina mais fraca, no entanto, não tenho nenhuma pista sobre qual extensão ou recurso pode não ser suportado.

Então, a questão é se existe alguma maneira de descobrir qual extensão é, por exemplo, desabilitando uma extensão de alguma forma e verificando se ela ainda funciona na boa máquina. Meu problema é que o código é muito grande para começar a comentar linha por linha na boa máquina até que eu experimente o mesmo problema.

    
por filipehd 02.10.2012 / 15:15

2 respostas

2

Você pode enumerar as extensões OpenGL disponíveis usando a chamada

glGetString(GL_EXTENSIONS);

O teste para uma extensão, em particular, requer um pouco de cuidado. Esta função pode ser encontrada no wiki do 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 == '
glGetString(GL_EXTENSIONS);
' ) 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 == '
// 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 == '%pre%' )
    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 == '%pre%' )
        return 1;

    start = terminator;
  }

  return 0;
}
' ) return 1; start = terminator; } return 0; }
    
por 02.10.2012 / 17:00
0

Normalmente, você pode obter uma lista das extensões por meio de chamadas para a API do OpenGL. Por exemplo. no linux use glxinfo para ver uma lista das extensões.

    
por 02.10.2012 / 15:21