diff --git a/Graphics/gl2ppm.cpp b/Graphics/gl2ppm.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..99f29ad10fe0544cba85d8257aa964ad9cec3c66
--- /dev/null
+++ b/Graphics/gl2ppm.cpp
@@ -0,0 +1,37 @@
+
+#include "Gmsh.h"
+#include "GmshUI.h"
+
+void create_ppm(FILE *outfile, int width, int height){
+  unsigned char *red, *green, *blue;
+  register int x, y;
+  unsigned char   r, g, b;
+
+  red = (unsigned char *)malloc(height*width*sizeof(unsigned char));
+  green = (unsigned char *)malloc(height*width*sizeof(unsigned char));
+  blue = (unsigned char *)malloc(height*width*sizeof(unsigned char));
+
+  glReadPixels(0,0,width,height,GL_RED,GL_UNSIGNED_BYTE,red);
+  glReadPixels(0,0,width,height,GL_GREEN,GL_UNSIGNED_BYTE,green);
+  glReadPixels(0,0,width,height,GL_BLUE,GL_UNSIGNED_BYTE,blue);
+
+  fprintf(outfile, "P6\n");
+  fprintf(outfile, "%d %d\n", width, height);
+  fprintf(outfile, "%d\n", 255);
+
+  for ( y = height-1; y >= 0; y-- ){
+    for ( x = 0; x < width; x++ ){
+      r = red[y*width+x];
+      g = green[y*width+x];
+      b = blue[y*width+x];
+      fwrite(&r, 1, 1, outfile);
+      fwrite(&g, 1, 1, outfile);
+      fwrite(&b, 1, 1, outfile);
+    }
+  }
+
+  Free(red);
+  Free(green);
+  Free(blue);
+}
+
diff --git a/Graphics/gl2ppm.h b/Graphics/gl2ppm.h
new file mode 100644
index 0000000000000000000000000000000000000000..47b88824d186371de0c067b6af0978cae78099d1
--- /dev/null
+++ b/Graphics/gl2ppm.h
@@ -0,0 +1,6 @@
+#ifndef _GL2PPM_H_
+#define _GL2PPM_H_
+
+void create_ppm(FILE *outfile, int width, int height);
+
+#endif