Se connecter avec
S'enregistrer | Connectez-vous

OpenGL : redirection vers un fichier

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

pour lire le frame buffer:
  1. glReadPixels(x, y, largeur, hauteur, format, type, buffer)

voilà, ça met dans buffer les pixels, après pour l'enregistrement, il te faut une lib adaptée.

Merci CRicky, en fait je veux pouvoir stocké une prise d'ecran dans un fichier, j'ai trouvé ce code sur le net :


#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void glScreenCapture(const char *filename) {
GLint viewport[4] ;
int l;
glGetIntegerv(GL_VIEWPORT, viewport) ;
int x=viewport[0], y=viewport[1] ;
int width=viewport[2], height=viewport[3] ;
unsigned int lineSize = width*3 ;
unsigned char *data ;
data = (unsigned char*) malloc( height*lineSize*sizeof(unsigned char) );
glReadBuffer(GL_FRONT) ;
glReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, data) ;
int fd = open(filename,O_CREAT) ;
char buffer[256] ;
sprintf(buffer, "P6\n%d %d\n255\n", width, height) ;
write(fd, buffer, strlen(buffer)) ;
for (l=height-1; l>=0; --l) {
unsigned char *ptr = data + l*lineSize ;
write(fd, ptr, lineSize) ;
}
close(fd) ;
free(data) ;
}




main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,800);
int winid=glutCreateWindow("ma fenetre");
glScreenCapture("ecran");
glutMainLoop();
system("PAUSE");
return 0;
}



Mais le fichier généré est vide, il fait 0octet.
Quelqu'un a une idée ?
Lassé par la pub ? Créez un compte
Tom's guide dans le monde