2016-05-29 10 views
2

Ich kann keine Dokumentation für eine separate Schablone Textur für Framebuffer-Objekte finden. Im Grunde ist das was ich bis jetzt habe:Openfr Framebuffer separate Schablone Textur

glBindTexture(GL_TEXTURE_2D, this->mTextures[FRAMEBUFFER_STENCIL_TEXTURE]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, width, height, 0, GL_RED_INTEGER, GL_INT, 0); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, this->mTextures[FRAMEBUFFER_STENCIL_TEXTURE], 0); 

Aber das verursacht einen Erstellungsfehler. Ist mein Format falsch oder ist es etwas anderes?

Antwort

1

Ja, diese Formatwerte sind falsch für eine Stencil-Textur. Sie müssen spezifische Schablonen enums sowohl für das internalFormat als auch das Format verwenden. Der Aufruf sollte für einen 8-Bit-Schablone Textur wie folgt aussehen:

glTexImage2D(GL_TEXTURE_2D, 0, GL_STENCIL_INDEX8, 
      width, height, 0, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, 0); 

Wie in den Kommentaren, reinen Schablone Texturen sind nur verfügbar, wies darauf hin, in OpenGL 4.4 und höher ist.

Eine Alternative besteht darin, eine Tiefen-/Schablonentextur zuzuweisen und nur den Tiefenbereich nicht zu verwenden. Sampling vom Schablonenteil einer Tiefen-/Schablonentextur erfordert jedoch OpenGL 4.3 oder höher, sodass nur die Versionsanforderung um eine Nebenversion reduziert wird.

+0

Vielen Dank für diese Antwort. Ich habe es versucht, aber es stürzt leider immer noch ab. Ich habe es auf der offiziellen OpenGL-Dokumentation gefunden, aber es scheint, dass dies nur OpenGL 4.4+ ist ... Ich bin auf OpenGL 2, also stecke ich nur mit Tiefen- und Schablonen-kombinierten Texturen fest? – Jas

+0

@Jas OpenGL 2.x hat keine Framebuffer-Objekte, daher gilt das hier nicht. –

+0

Nun, ich benutze Shader-Versionen 130, die für OpenGL 2 sein sollen, denke ich ... Aber ich habe Zugriff auf Framebuffer-Objekte. – Jas

Verwandte Themen