2016-06-09 7 views
0

Ich versuche zu verwenden:glTexSubImage2D 1282 - ungültige Operation in gl es 3,1

layout (binding = 0, rgba8ui) readonly uniform uimage2D input; 

in einem Compute-Shader. Um eine Textur, dies zu binden Ich verwende:

glBindImageTexture(0, texture_name, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8); 

und es scheint, dass für diese binden, um die Textur zu arbeiten unveränderlich sein muss, so habe ich wechselte von:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

zu:

glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8UI, width, height); 
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

Aber dies erzeugt "Invalid Operation" (speziell der glTexSubImage2D() Aufruf generiert es). Ich habe in der Dokumentation entdeckt, dass dieser Anruf 1282 aus den folgenden Gründen verursachen kann:

aber keiner von diesen ist mein Fall.

Der erste von ihnen scheinen mag, das Problem zu sein (unter Berücksichtigung Ich bin mit glTexStorage2D(), nicht glTexImage2D()), aber das ist nicht das Problem, weil im Falle von Float Textur der gleiche Mechanismus funktioniert:

glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, width, height); 
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_FLOAT, pixels); 

statt:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, pixels); 

Dies ist wahrscheinlich irrelevant, aber beide Methoden funktionieren gut auf dem PC.

Irgendwelche Vorschläge, warum passiert das?

+0

Haben Sie meine Lösung getestet? – 246tNt

Antwort

2

Die internalFormat Sie in glTexImage2D und glBindImageTexture verwenden sollten mit Ihrem Sampler gleich und seine kompatibel sein. Versuchen Sie für eine uimage2DGL_RGBA8UI überall zu verwenden.

Auch für den Transfer zu GL_RGBA8UI (und anderen Integer-Formaten) Sie benötigenGL_RGBA_INTEGER als Format zu verwenden.

glBindImageTexture(0, texture_name, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8UI, width, height, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, pixels); 

Mit dem FormatGL_RGBA_INTEGER sollte auch die glTexSubImage2D Variante Arbeit machen.

+0

Ich habe es versucht. Es hat keinen Fehler verursacht, aber auch keine Daten in meine Textur hochgeladen. Die Lösung, die ich fand, war, GL_RGBA8 für internes Format und GL_RGBA für Format zu verwenden. Danke für Ihren Vorschlag. – markwalberg

Verwandte Themen