Comment savoir si un ordinateur prend en charge OpenGL 2.0? (Je veux écrire des shaders)

Je suis intéressé par l'écriture de shaders OpenGL, mais je ne suis pas sûr que ma carte graphique est assez bonne à l'appui de cette ou si mon système est configuré pour utiliser le logiciel alternatif (Mesa). Comment puis-je savoir si mon ordinateur peut prendre en charge OpenGL shaders? (J'utilise Ubuntu 10.04), j'ai essayé trois tests jusqu'à présent, et je reçois des réponses contradictoires: l'

1) j'ai téléchargé, compilé et a rencontré le succès avec un OpenGL shader programme à partir de l'exemple de code dans OpenGL Un Apprêt 3e Édition situé ici. Cependant, certains autres exemples de code à partir de ce même chapitre, de mettre en œuvre d'autres shaders OpenGL ne fonctionne pas. Certains d'entre eux, même la cause de mon ordinateur tombe en panne ou la fenêtre de sortie pour faire de drôles de choses avec les éclats de couleurs, très étrange.

2) j'ai exécuté la commande suivante et a obtenu:

$ glxinfo | grep "OpenGL version"
OpenGL version string: 1.5 Mesa 7.7.1

Cela semblerait indiquer que je suis à cours d'OpenGL 1.5, mais la version Mesa (qui, comme je comprends qu'il s'agit d'un logiciel de mise en œuvre de l'OpenGL 2.0. Pas aussi rapide, mais même fonctionnellement comme la vraie affaire dans le matériel) semble être assez bonne pour courir OpenGL 2.0. Comment puis-je savoir quel lecteur de mon code, OpenGL 1.5 ou Mesa 7.7.1?

3) j'ai écrit certains de code à la sortie de la version d'OpenGL sur l'ordinateur et a obtenu le résultat suivant:

$ ./version
OpenGL Version major=1, minor=5
GLSL Version major=0, minor=0

Cela ne veut pas dire quelque chose à propos de Mesa, et me porterait à croire que je suis à cours d'OpenGL 1.5. Merci de m'aider à comprendre de quelle version je suis en cours d'exécution, pour que je puisse savoir si j'ai besoin de courir au magasin et acheter une nouvelle carte graphique avant que je puisse être sûr de shaders sera exécuté. Merci!!!!

P. S. Voici le code:

#include <GL/glut.h>
#include <stdio.h>
#include <string.h>

void getGlVersion(int *major, int *minor)
{
  const char *verstr = (const char *) glGetString(GL_VERSION);
  if ((verstr == NULL) || (sscanf(verstr,"%d.%d", major, minor) != 2))
    {
      *major = *minor = 0;
      fprintf(stderr, "Invalid GL_VERSION format!!!\n");
    }
}

void getGlslVersion(int *major, int *minor)
{
  int gl_major, gl_minor;
  getGlVersion(&gl_major, &gl_minor);
  *major = *minor = 0;
  if(gl_major == 1)
    {
      /* GL v1.x can provide GLSL v1.00 only as an extension */
      const char *extstr = (const char *) glGetString(GL_EXTENSIONS);
      if ((extstr != NULL) &&
      (strstr(extstr, "GL_ARB_shading_language_100") != NULL))
    {
      *major = 1;
      *minor = 0;
    }
    }
  else if (gl_major >= 2)
    {
      /* GL v2.0 and greater must parse the version string */
      const char *verstr =
    (const char *) glGetString(GL_SHADING_LANGUAGE_VERSION);
      if((verstr == NULL) ||
     (sscanf(verstr, "%d.%d", major, minor) != 2))
    {
      *major = *minor = 0;
      fprintf(stderr,
          "Invalid GL_SHADING_LANGUAGE_VERSION format!!!\n");
    }
    }
}

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);

  glBegin(GL_POLYGON);
  glVertex2f(-0.5, -0.5);
  glVertex2f(-0.5, 0.5);
  glVertex2f(0.5, 0.5);
  glVertex2f(0.5, -0.5);
  glEnd();

  glFlush();

  int major, minor;
  getGlVersion(&major, &minor);
  fprintf(stderr, "OpenGL Version major=%i, minor=%i\n", major, minor);

  getGlslVersion(&major, &minor);
  fprintf(stderr, "GLSL Version major=%i, minor=%i\n", major, minor);
}

void init() {}

int main(int argc, char** argv)
{
  glutInit(&argc,argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(500,500);
  glutInitWindowPosition(0,0);
  glutCreateWindow("simple");
  glutDisplayFunc(display);
  init();
  glutMainLoop();
}
Vous devriez parler de ce que la Carte Graphique ne vous appartiennent!

OriginalL'auteur Steve Johnson | 2011-04-21