Quelle est l'initialisation OpenGL appropriée sur Intel HD 3000 ?
Problème :
Sur une carte graphique Intel HD 3000 , la création de plusieurs contextes OpenGL dans une seule application entraîne un comportement imprévisible :
- Les anciennes versions de l'application ne parviennent pas à créer un deuxième contexte de rendu.
- Après des modifications apportées au logiciel basé sur OpenGL , le deuxième contexte de rendu peut être créé mais devient invalide après la publication.
Initialisation actuelle et code de sortie :
<code class="c++">// Initialization code
int OpenGLscreen::init(void *f, int textures)
{
// ...
hrc = wglCreateContext(hdc);
// ...
if(wglMakeCurrent(hdc, hrc) == false)
{
// ...
}
// ...
}
// Exit code
void OpenGLscreen::exit()
{
if (!_init) return;
wglMakeCurrent(hdc,hrc); // use this context if multiple OpenGLs are used
// ...
wglMakeCurrent(NULL, NULL); // release current rendering context
wglDeleteContext(hrc); // destroy rendering context
hrc=NULL;
_init=0;
}</code>
Copier après la connexion
Questions :
- Le code d'initialisation/sortie OpenGL actuel est-il incorrect ?
- Existe-t-il une meilleure façon d'initialiser et de quitter OpenGL ?
- Comment basculer correctement entre les différents contextes de rendu ?
Réponse :
- Le code d'initialisation et de sortie OpenGL actuel semble correct, mais l'utilisation d'une bibliothèque de chargement telle que GLEW est recommandée.
- Utilisez une bibliothèque de chargement telle que GLEW ou glfw. Ces bibliothèques simplifient la création de contexte OpenGL et le chargement de fonctions.
- Votre utilisation de wglMakeCurrent semble correcte, mais vous devrez peut-être étudier les bizarreries spécifiques à Intel pour le changement de contexte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!