diff options
author | Eric Anholt <eric@anholt.net> | 2010-05-21 09:32:38 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-05-21 12:20:39 -0700 |
commit | 68fc4b415e322f6744299e39864fbc377c6eff74 (patch) | |
tree | 4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/osdemos/osdemo.c | |
parent | e4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff) |
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build
environment for to make the build system or are unit tests that should
probably live next to their code instead. Hopefully people can bring
over the build for remaining pieces they care about.
Diffstat (limited to 'progs/osdemos/osdemo.c')
-rw-r--r-- | progs/osdemos/osdemo.c | 323 |
1 files changed, 0 insertions, 323 deletions
diff --git a/progs/osdemos/osdemo.c b/progs/osdemos/osdemo.c deleted file mode 100644 index bc0168fb97..0000000000 --- a/progs/osdemos/osdemo.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Demo of off-screen Mesa rendering - * - * See Mesa/include/GL/osmesa.h for documentation of the OSMesa functions. - * - * If you want to render BIG images you'll probably have to increase - * MAX_WIDTH and MAX_Height in src/config.h. - * - * This program is in the public domain. - * - * Brian Paul - * - * PPM output provided by Joerg Schmalzl. - * ASCII PPM output added by Brian Paul. - * - * Usage: osdemo [filename] - */ - - -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "GL/osmesa.h" -#include "GL/glu.h" - - -#define SAVE_TARGA - -static int Width = 400; -static int Height = 400; - - -static void -Sphere(float radius, int slices, int stacks) -{ - GLUquadric *q = gluNewQuadric(); - gluQuadricNormals(q, GLU_SMOOTH); - gluSphere(q, radius, slices, stacks); - gluDeleteQuadric(q); -} - - -static void -Cone(float base, float height, int slices, int stacks) -{ - GLUquadric *q = gluNewQuadric(); - gluQuadricDrawStyle(q, GLU_FILL); - gluQuadricNormals(q, GLU_SMOOTH); - gluCylinder(q, base, 0.0, height, slices, stacks); - gluDeleteQuadric(q); -} - - -static void -Torus(float innerRadius, float outerRadius, int sides, int rings) -{ - /* from GLUT... */ - int i, j; - GLfloat theta, phi, theta1; - GLfloat cosTheta, sinTheta; - GLfloat cosTheta1, sinTheta1; - const GLfloat ringDelta = 2.0 * M_PI / rings; - const GLfloat sideDelta = 2.0 * M_PI / sides; - - theta = 0.0; - cosTheta = 1.0; - sinTheta = 0.0; - for (i = rings - 1; i >= 0; i--) { - theta1 = theta + ringDelta; - cosTheta1 = cos(theta1); - sinTheta1 = sin(theta1); - glBegin(GL_QUAD_STRIP); - phi = 0.0; - for (j = sides; j >= 0; j--) { - GLfloat cosPhi, sinPhi, dist; - - phi += sideDelta; - cosPhi = cos(phi); - sinPhi = sin(phi); - dist = outerRadius + innerRadius * cosPhi; - - glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi); - glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, innerRadius * sinPhi); - glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi); - glVertex3f(cosTheta * dist, -sinTheta * dist, innerRadius * sinPhi); - } - glEnd(); - theta = theta1; - cosTheta = cosTheta1; - sinTheta = sinTheta1; - } -} - - -static void -render_image(void) -{ - GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - GLfloat red_mat[] = { 1.0, 0.2, 0.2, 1.0 }; - GLfloat green_mat[] = { 0.2, 1.0, 0.2, 1.0 }; - GLfloat blue_mat[] = { 0.2, 0.2, 1.0, 1.0 }; - - - glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); - glLightfv(GL_LIGHT0, GL_POSITION, light_position); - - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-2.5, 2.5, -2.5, 2.5, -10.0, 10.0); - glMatrixMode(GL_MODELVIEW); - - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); - - glPushMatrix(); - glRotatef(20.0, 1.0, 0.0, 0.0); - - glPushMatrix(); - glTranslatef(-0.75, 0.5, 0.0); - glRotatef(90.0, 1.0, 0.0, 0.0); - glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, red_mat ); - Torus(0.275, 0.85, 20, 20); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-0.75, -0.5, 0.0); - glRotatef(270.0, 1.0, 0.0, 0.0); - glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green_mat ); - Cone(1.0, 2.0, 16, 1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(0.75, 0.0, -1.0); - glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue_mat ); - Sphere(1.0, 20, 20); - glPopMatrix(); - - glPopMatrix(); - - /* This is very important!!! - * Make sure buffered commands are finished!!! - */ - glFinish(); -} - - -#ifdef SAVE_TARGA - -static void -write_targa(const char *filename, const GLubyte *buffer, int width, int height) -{ - FILE *f = fopen( filename, "w" ); - if (f) { - int i, x, y; - const GLubyte *ptr = buffer; - printf ("osdemo, writing tga file \n"); - fputc (0x00, f); /* ID Length, 0 => No ID */ - fputc (0x00, f); /* Color Map Type, 0 => No color map included */ - fputc (0x02, f); /* Image Type, 2 => Uncompressed, True-color Image */ - fputc (0x00, f); /* Next five bytes are about the color map entries */ - fputc (0x00, f); /* 2 bytes Index, 2 bytes length, 1 byte size */ - fputc (0x00, f); - fputc (0x00, f); - fputc (0x00, f); - fputc (0x00, f); /* X-origin of Image */ - fputc (0x00, f); - fputc (0x00, f); /* Y-origin of Image */ - fputc (0x00, f); - fputc (Width & 0xff, f); /* Image Width */ - fputc ((Width>>8) & 0xff, f); - fputc (Height & 0xff, f); /* Image Height */ - fputc ((Height>>8) & 0xff, f); - fputc (0x18, f); /* Pixel Depth, 0x18 => 24 Bits */ - fputc (0x20, f); /* Image Descriptor */ - 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+2], f); /* write blue */ - fputc(ptr[i+1], f); /* write green */ - fputc(ptr[i], f); /* write red */ - } - } - } -} - -#else - -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); - } -} - -#endif - - - -int -main(int argc, char *argv[]) -{ - OSMesaContext ctx; - void *buffer; - char *filename = NULL; - - if (argc < 2) { - fprintf(stderr, "Usage:\n"); - fprintf(stderr, " osdemo filename [width height]\n"); - return 0; - } - - filename = argv[1]; - if (argc == 4) { - Width = atoi(argv[2]); - Height = atoi(argv[3]); - } - - /* Create an RGBA-mode context */ -#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305 - /* specify Z, stencil, accum sizes */ - ctx = OSMesaCreateContextExt( OSMESA_RGBA, 16, 0, 0, NULL ); -#else - ctx = OSMesaCreateContext( OSMESA_RGBA, NULL ); -#endif - if (!ctx) { - printf("OSMesaCreateContext failed!\n"); - return 0; - } - - /* Allocate the image buffer */ - buffer = malloc( Width * Height * 4 * sizeof(GLubyte) ); - if (!buffer) { - printf("Alloc image buffer failed!\n"); - return 0; - } - - /* Bind the buffer to the context and make it current */ - if (!OSMesaMakeCurrent( ctx, buffer, GL_UNSIGNED_BYTE, Width, Height )) { - printf("OSMesaMakeCurrent failed!\n"); - return 0; - } - - - { - int z, s, a; - glGetIntegerv(GL_DEPTH_BITS, &z); - glGetIntegerv(GL_STENCIL_BITS, &s); - glGetIntegerv(GL_ACCUM_RED_BITS, &a); - printf("Depth=%d Stencil=%d Accum=%d\n", z, s, a); - } - - render_image(); - - if (filename != NULL) { -#ifdef SAVE_TARGA - write_targa(filename, buffer, Width, Height); -#else - write_ppm(filename, buffer, Width, Height); -#endif - } - else { - printf("Specify a filename if you want to make an image file\n"); - } - - printf("all done\n"); - - /* free the image buffer */ - free( buffer ); - - /* destroy the context */ - OSMesaDestroyContext( ctx ); - - return 0; -} |