Ich bin wirklich verwirrt mit allen Typ-Formate in OpenGL. Ich würde im Wesentlichen gerne eine Textur erstellen, die ich integers schreiben kann, und lesen Sie auch ganze Zahlen aus. Ich habe folgendes versucht:Wie schreibe ich Integer in einen Textur-Puffer in OpenGL
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32I, bufferRes.x, bufferRes.y, 0, GL_RED, GL_INT, NULL);
Das gibt mir einen "UNGÜLTIGEN BETRIEB" -Fehler. Wenn ich GL_R32I
zu GL_RED
ändere, erhalte ich diesen Fehler nicht. Aber ist nicht GL_R32I
das richtige Format? Wenn nicht, wofür ist das?
Auch, wenn ich diese Textur im Shader als Schwimmer lesen wollte, weiß ich, dass ein anderen Fall in dem ich 16-Bit-Integer verwenden ich getan habe:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16_SNORM, width, height, 0, GL_RED, GL_SHORT, NULL)
Und dies war der richtige Weg, es zu tun . Aber es gibt keine GL_R32_SNORM
. Ich bin wirklich verwirrt mit all diesen, weil ich mich erinnere, GL_R16I
funktioniert, aber GL_R32I
ist nicht.
Was ist Ihre Hardware? Wahrscheinlich unterstützt Ihre Hardware das interne Format 'GL_R32I' nicht. – Rabbid76
@Rabbid Es unterstützt es, stellt sich heraus, ich hatte das falsche Format für das 7. Argument, sollte GL_RED_INTEGER anstelle von GL_RED gewesen sein. Ich habe eine Antwort hinzugefügt, wenn es irgendjemandem hilft. – Zebrafish