summaryrefslogtreecommitdiffstats
path: root/progs
diff options
context:
space:
mode:
authorJon Smirl <jonsmirl@gmail.com>2005-05-19 15:03:31 +0000
committerJon Smirl <jonsmirl@gmail.com>2005-05-19 15:03:31 +0000
commitc70dace6942feda07d797feb845782d136097f5c (patch)
tree73d3d89f068a9b8e10dcc78dd1e5fa95f363f7b7 /progs
parent6040d34109cdca111df3ed86f9854ddb6d90525c (diff)
downloadexternal_mesa3d-c70dace6942feda07d797feb845782d136097f5c.zip
external_mesa3d-c70dace6942feda07d797feb845782d136097f5c.tar.gz
external_mesa3d-c70dace6942feda07d797feb845782d136097f5c.tar.bz2
Fix EGL fbdev palette problem. demo3 can save ppm of screen
Diffstat (limited to 'progs')
-rw-r--r--progs/egl/demo3.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/progs/egl/demo3.c b/progs/egl/demo3.c
index 399e3aa..f6e3bc5 100644
--- a/progs/egl/demo3.c
+++ b/progs/egl/demo3.c
@@ -500,6 +500,58 @@ static void Draw(EGLDisplay dpy, EGLSurface surf)
}
}
+static void
+write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
+{
+ const int binary = 0;
+ FILE *f = fopen( filename, "w" );
+ if (f) {
+ int i, x, y;
+ const GLubyte *ptr = buffer;
+ if (binary) {
+ fprintf(f,"P6\n");
+ fprintf(f,"# ppm-file created by osdemo.c\n");
+ fprintf(f,"%i %i\n", width,height);
+ fprintf(f,"255\n");
+ fclose(f);
+ f = fopen( filename, "ab" ); /* reopen in binary append mode */
+ for (y=height-1; y>=0; y--) {
+ for (x=0; x<width; x++) {
+ i = (y*width + x) * 4;
+ fputc(ptr[i], f); /* write red */
+ fputc(ptr[i+1], f); /* write green */
+ fputc(ptr[i+2], f); /* write blue */
+ }
+ }
+ }
+ else {
+ /*ASCII*/
+ int counter = 0;
+ fprintf(f,"P3\n");
+ fprintf(f,"# ascii ppm file created by osdemo.c\n");
+ fprintf(f,"%i %i\n", width, height);
+ fprintf(f,"255\n");
+ for (y=height-1; y>=0; y--) {
+ for (x=0; x<width; x++) {
+ i = (y*width + x) * 4;
+ fprintf(f, " %3d %3d %3d", ptr[i], ptr[i+1], ptr[i+2]);
+ counter++;
+ if (counter % 5 == 0)
+ fprintf(f, "\n");
+ }
+ }
+ }
+ fclose(f);
+ }
+}
+
+#include "../src/egl/main/egldisplay.h"
+
+typedef struct fb_display
+{
+ _EGLDisplay Base; /* base class/object */
+ void *pFB;
+} fbDisplay;
int
@@ -561,9 +613,20 @@ main(int argc, char *argv[])
Reshape(1024, 768);
glDrawBuffer( GL_FRONT );
+ glClearColor( 0,
+ 1.0,
+ 0,
+ 1);
- Draw(d, screen_surf);
+ glClear( GL_COLOR_BUFFER_BIT );
+
+ doubleBuffer = 1;
+ glDrawBuffer( GL_BACK );
+ Draw(d, screen_surf);
+
+ write_ppm("dump.ppm", ((struct fb_display *)_eglLookupDisplay(d))->pFB, 1024, 768);
+
eglDestroySurface(d, screen_surf);
eglDestroyContext(d, ctx);
eglTerminate(d);