Je suis novice en matière d'OpenGL et j'utilise les objets Frame Buffer (FBO) pour le rendu hors écran, comme le suggèrent la plupart des réponses aux autres questions.
GLuint fb[1],color_rb[1];
glGenFramebuffersEXT(1, fb);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);
glGenRenderbuffersEXT(1, color_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, color_rb[0]);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, 256, 256);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, color_rb[0]);
// rendering to the FBO
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, 256, 256);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 256.0, 0.0, 256.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
RenderATriangle(); // i have defined this function to render a texture in a triangular geometry
GLubyte pixels[4*4*4];
glReadPixels(0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
Lorsque j'utilise ce code, je n'obtiens aucune erreur de compilation. J'ai également installé glew dans mon système ubuntu 12.10. Lorsque j'exécute ce code, une erreur de segmentation apparaît. J'ai essayé de vérifier où se trouve l'erreur en utilisant les instructions cout et j'ai trouvé que l'erreur vient de la génération du frame buffer en utilisant glGenFramebuffersEXT(1, GLuint* array). Donc quelqu'un peut-il me dire ce qui ne va pas avec la génération du FBO dans mon code. Et une dernière chose, si quelqu'un peut me dire comment faire un rendu vers un fichier image externe sur le disque.
Mes importations sont :
#include <iostream>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>