2009-03-16 9 views
0

J'essaie de rendre à un cubemap, et je trouve les instructions ici: http://www.opengl.org/wiki/GL_EXT_framebuffer_object#Quick_example.2C_render_to_texture_.28Cubemap.29Comment est-ce que je peux rendre à un cubemap?

glGenTextures(1, &color_tex); 
glBindTexture(GL_TEXTURE_CUBE_MAP, color_tex); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
//NULL means reserve texture memory, but texels are undefined 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+0, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+1, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+2, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+3, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+4, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+5, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
//------------------------- 
glGenFramebuffersEXT(1, &fb); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); 
//Attach one of the faces of the Cubemap texture to this FBO 
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X, color_tex, 0); 
//------------------------- 
glGenRenderbuffersEXT(1, &depth_rb); 
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb); 
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 256, 256); 
//------------------------- 
//Attach depth buffer to FBO 
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb); 

je suivre la voie ci-dessus pour lier une face d'un cubemap à un fbo, mais nous avons eu un GL_FRAMEBUFFER_UNSUPPORTED_EXT d'erreur. Je me demande si c'est parce que ma carte graphique ne supporte pas cette fonctionnalité ou s'il y a des bugs dans mon code?

Et est-il possible que je rende à 6 textures 2d fbo séparées et de créer un cubemap en utilisant ces textures?

Merci

Répondre

4

This page définit la fonction isExtensionSupported() que vous pouvez utiliser. Il est (très) recommandé de tester au moment de l'exécution l'existence de toutes les extensions dont votre code dépend. Le fait que vos en-têtes aient défini les extensions nécessaires ne signifie pas que le binaire ne se retrouve pas sur un système avec un ensemble différent d'extensions prises en charge. C'est une bonne idée de choisir une fonction testée bien connue pour tester des extensions, ou passer le temps nécessaire pour comprendre les problèmes subtils qui peuvent survenir si le test n'est pas correctement codé. Cela a principalement à voir avec les sous-chaînes et ne génère pas de fausses occurrences de préfixes.

+0

Merci pour votre avis, mon programme est tout ok maintenant :) –

Questions connexes