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();
}
OriginalL'auteur Steve Johnson | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
Le seul "GL" Approuvé façon d'obtenir la version d'opengl est à l'aide de glGetString(GL_VERSION), et présente des rapports de la version d'opengl pris en charge par le pilote.
Mesa peut mettre en œuvre n'importe quelle version de OpenGL, même si elle est implémentée dans le logiciel ou le matériel, dans votre cas, vous avez OpenGL 1.5 mise en œuvre par MESA 7.7.1, qui est l'implémentation OpenGL.
La seule façon de savoir ce que d'un certain MATÉRIEL prend en charge un certain GL version est de vérifier les spécifications du fabricant, puisque les conducteurs peuvent être obsolètes et de soutenir une ancienne version d'opengl. Un exemple est GeForce 8 cartes, à l'origine pris en charge jusqu'à OpenGL 2.1, et quand OpenGL 3.x est apparu, ils ont soutenu aussi, mais seulement en utilisant des pilotes mis à jour.
OriginalL'auteur Matias Valdenegro
glxinfo vous dira si vous avez réellement l'accélération matérielle ou non. Avec Ubuntu, vous avez généralement besoin d'installer de façon explicite (ATI ou NVIDIA) les pilotes via Synaptic pour obtenir l'accélération matérielle.
OriginalL'auteur Eric