2017-03-25 1 views
0

Ich versuche, eine Okklusion Abfrage mit openGL 3.3 zu erstellen, mit GLFW, GLEWglGenQueries immer wieder zurückkehren Nicht-Abfrage Objekte, glBeginQuery Rückkehr Fehler

Ladefunktion:

uint32_t glQueryID; 
glGenQueries(1, &glQueryID); 
if (glIsQuery(glQueryID)) //just for testing its always false ! 
{ 
... it must be always true !?! 
} 

Zeichenfunktion:

glBeginQuery(GL_ANY_SAMPLES_PASSED, glQueryID); 
glGetError();// 1282 invalid operation 

jedoch alle meine anderen glCalls korrekt funktionierte ohne Fehler

Runnin g auf Mac OS X, Intel HD 4000

+1

Zeichnung Gibt es einen Grund, warum Sie darauf bestehen, auf OpenGL gefragt Wenn es das getan hat, was du ihm gesagt hast? –

+0

Liebst du nicht OpenGL, wo der Aufruf von 'glGenFoo' kein' Foo' generiert, nur das Binden/Verwenden von ihnen zum ersten Mal? – peppe

+0

Hahahaha, ja ich liebe es, und ja das ist der Grund! Danke – mofed8461

Antwort

2

Aus der Dokumentation von glIsQuery:

glIsQuery kehrt GL_TRUE wenn id zur Zeit der Name eines Abfrageobjekt ist. Wenn ID gleich Null ist oder ein Wert ungleich Null ist, der derzeit nicht der Name eines Abfrageobjekts ist, oder wenn ein Fehler auftritt, gibt glIsQuery GL_FALSE zurück.

Ein Name, der von glGenQueries zurückgegeben wird, aber noch nicht durch das Aufrufen von glBeginQuery mit einem Abfrageobjekt verknüpft ist, ist nicht der Name eines Abfrageobjekts.

Da Sie glIsQuery vor assinging ein Abfrageobjekt zu nennen (zum Beispiel glBeginQuery durch den Aufruf), hat der Rückgabewert GL_FALSE sein.

+0

Vielen Dank, Ich würde erwähnen, dass das Problem gelöst wurde, indem Sie die Abfrage mit leeren Anfang und Ende initialisieren. Ich weiß nicht, was die Ursache des ungültigen Vorgangs Fehler war 'glGenQueries (1, & glQueryID); glBeginQuery (GL_SAMPLES_PASSED, glQueryID); glEndQuery (GL_SAMPLES_PASSED); ' – mofed8461

0

Das Problem wird durch die Initialisierung Abfrage gefolgt von leer begin/end Abfrage

glGenQueries(1, &glQueryID); 
glBeginQuery(GL_SAMPLES_PASSED, glQueryID); 
glEndQuery(GL_SAMPLES_PASSED); 

dies beheben gelöst wurde Fehler 1282 (ungültige Operation), wenn später

Verwandte Themen