2010-08-31 13 views
17

Recibo un error GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT después de intentar crear un framebuffer que se renderiza en una textura. No puedo entender lo que está mal, cualquier ayuda es muy apreciada.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT cuando intento adjuntar textura

Editar: ¡Solucionado! el código de trabajo:

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); 

Nota: Si su versión no funciona, asegúrese de comprobar si hay errores después de cada llamada y que se borre el error antes de la primera llamada, de lo contrario podrás comprobación de errores el código antes de eso.

+4

Estaba comparando mi código con este fragmento para intentar encontrar un error. Para Android OpenGL ES 2.0 el problema para mí fue GL_DEPTH_COMPONENT vs GL_DEPTH_COMPONENT16. En glRenderBufferStorage, asegúrese de que el componente de profundidad sea GL_DEPTH_COMPONENT16. Difícil de detectar ya que cada línea de código era idéntica de lo contrario a su fragmento. – Halsafar

+7

También debe dejar el código incorrecto, para que las personas que lo lean después puedan ver la solución. O al menos explicar lo que has marcado. De todos modos, gracias por mostrar el código fijo. – Arelius

+0

@Halsafar Sí, es un error bastante común. Lo bueno es que lo notaste. Sin embargo, si seleccionó los errores revisados, detectaría este error mucho más rápido, de ahí mi último comentario "comprobar si hay errores después de cada llamada". – Nick

Respuesta

7

Es probable que la textura sea incompleta. El MIN_FILTER predeterminado para una textura especifica el mipmapping, pero solo ha proporcionado el Nivel de textura 0, por lo que la textura en sí misma está incompleta.

Agregue llamadas a glTexParamter para establecer el MIN_FILTER a uno de los modos sin mipmapped.

+0

Agregué llamadas para crear una textura sin mipmapped, pero esto produce el mismo error. Aún así gracias, aprendiendo en el camino. – Nick

+0

¡Era una textura incompleta! No por los mipmaps, sino por otras cosas. El código de trabajo está en el texto de la pregunta. Gracias un montón. – Nick

+1

Tuve dos errores confusos en mi caso: [1] Estaba tratando de usar una textura GL_LUMINANCE como objetivo (mágicamente no permitido, por alguna razón), y [2] No hice glBindTextura (GL_TEXTURE_2D, 0) antes de glFramebufferTexture2D (...) –

Cuestiones relacionadas