2016-10-07 4 views
0

Ich muss zu Buffer texture rendern. Warum TBO? TBO kann leicht als CUDA-Ressource für grafische Interop abgebildet werden. Es kann auch Byte große Daten speichern, was ich brauche. Ich habe versucht, verwandte Informationen in GL-Spezifikationen zu finden. Here wird festgestellt, dass:Rendern nach TBO

Buffer Texturen wie 1D Textur arbeiten, nur haben sie ein einziges Bild, von Mipmapstufe identifiziert 0.

Aber wenn ich versuche TBO zu FBO ich befestigen bekomme immer einen "Fehlende Anhang" -Fehler, wenn ich die Vollständigkeit überprüfe, was zu der Schlussfolgerung führt, dass GL_TEXTURE_BUFFER nicht als FBO-Anhang unterstützt wird.

Zwei Fragen:

  1. Ist es wahr?
  2. ist die einzige Alternative, hier zu SSBO

Detailliertere Informationen zu schreiben:

Ich

GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT

bekommen Wenn ich die TBO zu befestigen versuchen zum Framebuffer. Es hat keinen Sinn, den ganzen Code hier anzuhängen, wie es bo ist th stark abstrahiert API und glaube mir, ich bin ziemlich erfahren in der Verwendung von OpenGL und framebuffers.Attaching eine regelmäßige GL_TEXTURE_2D funktioniert gut. Hier ist der Brocken der TBO Schöpfung und die Befestigungsstufe:

GLuint tbo; 
GLuint tboTex; 
glGenBuffers(1, &tbo); 
glBindBuffer(GL_TEXTURE_BUFFER, tbo); 
glBufferData(GL_TEXTURE_BUFFER, viewportWidth * viewportHeight * 4, NULL, GL_DYNAMIC_DRAW); 
glBindBuffer(GL_TEXTURE_BUFFER, 0); 
glGenTextures(1, &tboTex); 
glBindTexture(GL_TEXTURE_BUFFER, tboTex); 
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA8, tbo); 
glBindTexture(GL_TEXTURE_BUFFER, 0); 

Dann FBO anbringt:

glBindFramebuffer(GL_FRAMEBUFFER, fbo); 
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tboTex, 0); 

///also tried: 
/// glFramebufferTexture1D 
/// glFramebufferTexture2D 
+0

Haben Sie OpenGL-Fehler erhalten? Können wir Ihren Code sehen? –

+0

@ NicolBolas sehe mein Update. –

+0

Und was ist mit OpenGL-Fehlern? –

Antwort

1

Buffer textures cannot be attached to FBOs:

GL_INVALID_OPERATION erzeugt durch [sic], wenn texture ist eine Puffertextur.

Eine gute Erinnerung für, warum Sie immer Ihre OpenGL-Fehler überprüfen sollten.

ist die einzige Alternative, hier zu SSBO

zu schreiben Wenn Ihr Ziel ist eine Aufbereitungsoperation zu verwenden ist Zeug zu einem Puffer-Objekt zu schreiben, könnten Sie auch Image Load/Store operations mit Puffern Texturen verwenden. Aber wenn Ihre Hardware damit umgehen könnte, sollte es auch SSBOs behandeln.

Sie könnten auch versuchen, geometry shaders und transform feedback operations zu verwenden, um zu schreiben, was auch immer Sie versuchen zu schreiben.

jedoch:

Es kann auch speichern Byte große Daten

Bilder speichern können "Byte große Daten" als auch. Das Bildformat GL_R8UI repräsentiert eine einkanalige 8-Bit-Ganzzahl ohne Vorzeichen.

Das löst keine CUDA-Interop-Probleme, aber das Rendern in Bytes ist sehr gut möglich.

+0

Aber GL_TEXTURE_BUFFER ist nicht als mögliches Ziel in den Spezifikationen aufgeführt.So verstehe ich Sie nicht.Ich überprüfe immer auf GL-Fehler.Es hilft mir nicht zu verstehen, ob TBO-Attachment möglich ist oder nicht sofort.Ich kann nicht Verwenden Sie GL-Images, wenn ich eine CUDA-basierte API verwende, die nur Puffer für das Mapping unterstützt. –

+0

@MichaelIV: Beitrag geklärt. "* Ich überprüfe immer GL-Fehler. *" Und dennoch deutet das Verhalten, das du bekommst, darauf hin, dass du es nicht getan hast. Der Fehler sollte 'glFrambufferTexture' verursachen, nichts zu tun. Aus diesem Grund ist der Vollständigkeitsstatus der Textur "fehlende Anlage" und nicht "unvollständige Anlage". Entweder suchen Sie nicht nach Fehlern oder Ihre Implementierung hat den Fehler nicht korrekt ausgegeben, wenn Sie eine Puffertextur verwendet haben. –

+0

Nun, das ist der erste und einzige Fehler, den der Fahrer in meinem Fall ausspuckt.NVidia GPUs.Anyway, nun, es ist genug für mich zu wissen, TBO kann nicht angeschlossen werden.Danke für die Info. –

Verwandte Themen