2016-01-29 1 views
0

Chaque fois que j'appelle glBufferStorage (...) le glBindBuffer suivant (..) se bloque toujours. Ex:OpenGL glBufferStorage se bloque

glBindBuffer(GL_SHADER_STORAGE_BUFFER, 1); 
    glBufferStorage(GL_SHADER_STORAGE_BUFFER, sizeof(unsigned int) * 100, NULL, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT | GL_MAP_READ_BIT); 

    glBindBuffer(GL_SHADER_STORAGE_BUFFER, 2); // <- CRASH HERE! 

Si je retire le glBufferStorage (...) appel, les appels subséquents glBindBuffer DonT les accidents!

Ce code fonctionnait normalement dans mon bureau sous GTX650 Ti et PhenonII x6, avec openGl installé via NugeT sur VS2015 (paquet nupengl.core). Ensuite, j'ai collé l'intégralité du dossier du projet sur mon Notebook (GeForce 740M/i7), j'ai retiré le paquetage de pépites openGl et je l'ai réinstallé.

Comment puis-je procéder pour examiner ce qui ne va pas? Est-ce une erreur logique ou peut-être une erreur de pilote gpu?

+0

Vérifiez que vous utilisez correctement la fonction (tous les indicateurs sont corrects) et assurez-vous que cela ne fait pas partie d'une version d'OpenGL que votre matériel ne prend pas en charge. – Xirema

+0

@Xirema Mon matériel actuel prend en charge OpenGL 4.5 et l'ancien support OpenGL 4.3, mais le code fonctionne sur le matériel plus ancien. Est-ce acceptable? – Pavarine

+0

'glBindBuffer (GL_SHADER_STORAGE_BUFFER, 1);' Que pensez-vous que cela fait? Vous liez un nombre, pas un objet tampon réel. –

Répondre

0

Je pourrais le faire.

Comme indiqué, j'ai déplacé mon projet de bureau à ordinateur portable. Mon ordinateur portable a un support OpenGL plus récent que Desktop, mais mon ordinateur portable utilisait les graphiques CPU (Intel HD Graphics) au lieu du GPU GeForce 740M dédié.

De cette façon, mon programme OpenGL exécutait sur un appareil qui prend en charge pas des nouvelles fonctionnalités OpenGL, comme la cible GL_SHADER_STORAGE_BUFFER, et voilà pourquoi il se bloque.

+0

Vous devez vérifier les extensions avant de les utiliser. Avoir votre segfault app au lieu d'échouer gracieusement si le GPU ne supporte pas quelque chose va dérouter les utilisateurs. –

+0

@ColonelThirtyTwo Je savais que mon code fonctionnait parce que je l'avais testé auparavant avec un autre GPU (plus ancien), et le nouveau GPU est de loin plus performant en termes d'extensions et autres. Mon problème était que mon SO essayait d'exécuter le programme OpenGL dans le vga Intel HD Graphics, au lieu de GPU dédié. J'apprécie votre aide, merci! – Pavarine