2010-05-03 11 views
6

Tengo un problema con la renderización de texturas y framebuffer fuera de pantalla con OpenGLES en iPhone.Renderizar a framebuffer contextura o fuera de pantalla

alt text http://j.imagehost.org/0923/IMG_0020.pngalt text http://j.imagehost.org/0725/IMG_0019.png

primera imagen muestra fichas de mahjong prestados a CAEAGLLayer directa y esto es correcto. La segunda muestra las teselas representadas en el marco externo de la trama, copiadas a la textura usando glCopyTexImage2D y la textura representada en CAEAGLLayer. Ambos usan quad blanco opaco para el fondo. También he intentado renderizar directamente a la textura, pero el efecto fue el mismo que con el framebuffer fuera de la pantalla.

Mi código para crear uso de este dispositivo:

GLuint framebuffer; 
    glGenFramebuffersOES(1, &framebuffer); 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

    GLuint renderbuffer; 
    glGenRenderbuffersOES(1, &renderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, 
      512, 512); 

    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, 
      GL_RENDERBUFFER_OES, renderbuffer);

que dibujar todos los azulejos de una textura del atlas con una llamada a glDrawElements usando VBO para pasar datos entrelazados de vértices (coordenadas, coordenadas de textura, color). Yo uso el formato de textura RGBA8888, dibujando cada imagen en dos triángulos (cuádruples) con la función de fusión glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). No uso el buffer de profundidad (en todos los casos).

¿Alguien me puede decir cuál podría ser el problema?

+1

¿Cuál es incorrecta sobre las imágenes renderizadas? ¿Cómo espera que se vean? – Frogblast

+0

@Frogblast El primero, que no se procesa en framebuffer o textura fuera de pantalla, es correcto. – sfider

+0

No se muestra suficiente código. Las OBF probablemente no son el problema. – karx11erx

Respuesta

0

Parece que no has publicado suficiente del código pero de lo publicado parece que fusionaste los roles de la textura y el renderbuffer en tu FBO. (el título de tu post dice "renderizar a la textura") También olvidaste definir tus búferes de dibujo.

El búfer de renderizado conectado a un FBO se usa generalmente como un búfer de profundidad. Por lo tanto pruebe lo siguiente:

GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

//set up the Depth Buffer 
GLuint renderbuffer; 
glGenRenderbuffersOES(1, &renderbuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24, 
     512, 512); 

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT, 
     GL_RENDERBUFFER_OES, renderbuffer); 
//set up the texture that you will be rendering to 
glActiveTexture(GL_TEXTURE0); 
GLuint textureID; 
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_2D, textureID); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
//add various other texture parameters here 
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0); 
// define your draw buffers 
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0}; 
glDrawBuffers(1, drawBuffers); 

esperanza de que ayuda a

Cuestiones relacionadas