Update the screen-dump code to use osgDB, and hence write out files in more common formats (PNG, JPEG, etc). The PPM writing code is retained for the moment, in case someone other than FG is relying upon it.

This commit is contained in:
jmt
2009-10-06 20:05:46 +00:00
committed by Tim Moore
parent b784bebaa9
commit e5fac0a01d
2 changed files with 13 additions and 17 deletions

View File

@@ -37,7 +37,8 @@
#include <simgear/compiler.h>
#include <osg/GL>
#include <osg/Image>
#include <osgDB/WriteFile>
#include "screen-dump.hxx"
@@ -78,21 +79,11 @@ bool sg_glWritePPMFile(const char *filename, GLubyte *buffer, int win_width, int
}
// dump the screen buffer to a ppm file
// dump the screen buffer to a png file
bool sg_glDumpWindow(const char *filename, int win_width, int win_height) {
GLubyte *buffer;
bool result;
buffer = (GLubyte *) malloc(win_width*win_height*RGBA);
// read window contents from color buffer with glReadPixels
glFinish();
glReadPixels(0, 0, win_width, win_height,
GL_RGBA, GL_UNSIGNED_BYTE, buffer);
result = sg_glWritePPMFile( filename, buffer, win_width, win_height,
GL_RGBA );
free(buffer);
return result;
osg::ref_ptr<osg::Image> img(new osg::Image);
img->readPixels(0,0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE);
osgDB::writeImageFile(*img, filename);
return true;
}

View File

@@ -21,12 +21,15 @@
//
// $Id$
#ifndef SG_SCREEN_DUMP_HXX
#define SG_SCREEN_DUMP_HXX
#include <simgear/compiler.h>
#include <osg/GL>
/**
* Dump the screen buffer to a ppm file.
* Dump the screen buffer to a PNG file.
* @param filename name of file
* @param win_width width of our opengl window
* @param win_height height of our opengl window
@@ -44,3 +47,5 @@ bool sg_glDumpWindow( const char *filename, int win_width, int win_height );
*/
bool sg_glWritePPMFile( const char *filename, GLubyte *buffer, int win_width,
int win_height, int mode);
#endif // of SG_SCREEN_DUMP_HXX