diff options
Diffstat (limited to 'xc/extras/Mesa/OpenStep/Old_NeXT/generic.m')
-rw-r--r-- | xc/extras/Mesa/OpenStep/Old_NeXT/generic.m | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/xc/extras/Mesa/OpenStep/Old_NeXT/generic.m b/xc/extras/Mesa/OpenStep/Old_NeXT/generic.m new file mode 100644 index 000000000..31bad2e7a --- /dev/null +++ b/xc/extras/Mesa/OpenStep/Old_NeXT/generic.m @@ -0,0 +1,121 @@ +/* generic.m*/ + +/* Demo of NEXTSTEP 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 + * + * NEXTSTEP output provided by Pascal Thibaudeau + * pthibaud@cribx1.u-bordeaux.fr + * OpenStep conversion by Pete French + * pete@ohm.york.ac.uk + */ + +#import <appkit/Application.h> +#import <appkit/Window.h> +#import <appkit/Menu.h> +#import <appkit/View.h> +#import <appkit/color.h> +#import <appkit/NXBitmapImageRep.h> +#import <stdio.h> +#import <stdlib.h> +#import "GL/osmesa.h" + +extern int gl_width,gl_height; +extern void render_image(void); + +int main( int argc, char *argv[] ) +{ + OSMesaContext ctx; + unsigned char *buffer; + id myWindow; + id myView; + id myMenu; + char name[50]; + unsigned long start, end; + NXBitmapImageRep *bitmap; + NXRect GR; + + NXApp=[Application new]; + + /* Create an RGBA-mode context */ + ctx = OSMesaCreateContext( GL_RGBA, NULL ); + + /* Allocate the image buffer */ + buffer = malloc( gl_width * gl_height * 4 ); + + /* Bind the buffer to the context and make it current */ + OSMesaMakeCurrent( ctx, buffer, GL_UNSIGNED_BYTE, gl_width, gl_height ); + OSMesaPixelStore( OSMESA_Y_UP, 0 ); + + /* Fill the bitmap with the buffer */ + bitmap = [[ NXBitmapImageRep alloc] + initData: buffer + pixelsWide:gl_width + pixelsHigh:gl_height + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpace: 2 + bytesPerRow:gl_width*4 + bitsPerPixel: 32]; + + NXSetRect(&GR,100, 100, gl_width, gl_height); + + myWindow = [[ Window alloc] + initContent: &GR + style:NX_TITLEDSTYLE + backing: NX_BUFFERED + buttonMask: NX_MINIATURIZEBUTTONMASK + defer: NO]; + + sprintf(name, "Mesa demo: `%s'", argv[0]); + + myView = [[ View alloc] initFrame:&GR]; + + myMenu = [[ Menu alloc] initTitle: "NeXTStep Mesa"]; + [myMenu addItem: "Quit" + action:@selector(terminate:) + keyEquivalent: 'q']; + [myMenu sizeToFit]; + + [myWindow setTitle: name]; + [myWindow display]; + [myWindow setContentView:myView]; + [myWindow makeKeyAndOrderFront:nil]; + + [NXApp setMainMenu:myMenu]; + + [myView lockFocus]; + + /* here is the Mesa call */ + start=time(0); + render_image(); + end=time(0); + printf("Rendering took %ld seconds\n",end-start); + fflush(stdout); + + /* draw the bitmap */ + [bitmap draw]; + /* free the bitmap */ + [bitmap free]; + [myWindow flushWindow]; + [myView unlockFocus]; + free( buffer ); + + /* destroy the context */ + OSMesaDestroyContext( ctx ); + + [NXApp run]; + [NXApp free]; + + return 0; +} |