2010-08-31 7 views
17

Ich erhalte einen Fehler GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT, nachdem ich versuche, einen Framebuffer zu erstellen, der zu einer Textur rendert. Ich kann nicht herausfinden, was falsch ist, jede Hilfe wird sehr geschätzt.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT beim Versuch, Textur anzufügen

Bearbeiten: Fixed it! Arbeitscode:

glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 768, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
    glBindTexture(GL_TEXTURE_2D, 0); 

    glGenRenderbuffers(1, &rboID); 
    glBindRenderbuffer(GL_RENDERBUFFER, rboID); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1024); 
    glBindRenderbuffer(GL_RENDERBUFFER, 0); 

    glGenFramebuffers(1, &backFramebuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, backFramebuffer); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboID); 
    [self checkFramebufferStatus]; 
    glBindFramebuffer(GL_FRAMEBUFFER, 0); 

Hinweis: Wenn Ihre Version nicht funktioniert, stellen Sie sicher, dass Sie für Fehler nach jedem überprüfen und jedem Anruf und dass Sie den Fehler vor dem ersten Anruf zu löschen, sonst werden Sie Fehlerprüfung sein der Code davor.

+4

Ich habe meinen Code mit diesem Snippet verglichen, um einen Fehler zu finden. Für Android OpenGL ES 2.0 war der Haken für mich GL_DEPTH_COMPONENT vs GL_DEPTH_COMPONENT16. Stellen Sie im glRenderBufferStorage sicher, dass die Tiefenkomponente GL_DEPTH_COMPONENT16 ist. Schwierig zu fangen, da jede Codezeile ansonsten mit Ihrem Code identisch war. – Halsafar

+7

Sie sollten den schlechten Code auch lassen, damit Leute, die es nach der Tat lesen, die Lösung sehen können. Oder atleast erklären, was Sie überprüft haben. Egal, danke für die Anzeige des festen Codes. – Arelius

+0

@Halsafar Ja, das ist ein ziemlich häufiger Fehler. Gut, dass du es bemerkt hast. Wenn Sie jedoch das Wrapping auf Fehler überprüfen, würden Sie diesen Fehler viel schneller finden, daher mein letzter Kommentar "Nach jedem Aufruf auf Fehler prüfen". – Nick

Antwort

7

Es ist wahrscheinlich, dass die Textur unvollständig ist. Der Standard-MIN_FILTER für eine Textur gibt Mipmapping vor, aber Sie haben nur für Texturlevel 0 angegeben, daher ist die Textur selbst unvollständig.

Fügen Sie Aufrufe von glTexParamter hinzu, um MIN_FILTER auf einen der nicht-mipmapped-Modi zu setzen.

+0

Ich habe Aufrufe hinzugefügt, um eine nicht mipmappte Textur zu erstellen, aber dies führt zu demselben Fehler. Trotzdem danke, auf dem Weg zu lernen. – Nick

+0

Es war eine unvollständige Textur! Nicht wegen der Mipmaps, sondern wegen anderer Sachen. Arbeitscode befindet sich im Fragetext. Vielen Dank. – Nick

+1

Ich hatte zwei verwirrende Fehler in meinem Fall: [1] Ich habe versucht, eine GL_LUMINANCE Textur als Ziel zu verwenden (magisch nicht erlaubt, aus irgendeinem Grund), und [2] Ich habe nicht glBindTexture (GL_TEXTURE_2D, 0) vor glFramebufferTexture2D (...) –

Verwandte Themen