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?
Haben Sie meine Lösung getestet? – 246tNt