This is winpos.c in view mode; [Download] [Up]
/* $Id: winpos.c,v 1.2 1996/09/15 01:50:05 brianp Exp $ */ /* * Mesa 3-D graphics library * Version: 2.0 * Copyright (C) 1995-1996 Brian Paul * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * $Log: winpos.c,v $ * Revision 1.2 1996/09/15 01:50:05 brianp * fixed #includes * * Revision 1.1 1996/09/13 01:38:16 brianp * Initial revision * */ /* * GL_MESA_window_pos extension * * This extension offers a set of functions named glWindowPos*MESA() which * directly set the current raster position to the given window coordinate. * glWindowPos*MESA() are similar to glRasterPos*() but bypass the * modelview, projection and viewport transformations. * * These functions should be very handy in conjunction with glDrawPixels() * and glCopyPixels(). * * If your application uses glWindowPos*MESA() and may be compiled with * a real OpenGL instead of Mesa you can simply copy the winpos.[ch] files * into your source tree and compile them with the rest of your code * since glWindowPos*MESA() can, and is, implemented in terms of standard * OpenGL commands when not using Mesa. In your source files which use * glWindowPos*MESA() just #include "winpos.h". */ #include "GL/gl.h" #ifdef GL_MESA_window_pos #include "draw.h" #include "dlist.h" #include "macros.h" #include "types.h" #include "winpos.h" /* * Mesa implementation of glWindowPos*MESA() */ void gl_WindowPos4fMESA( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { gl_windowpos( ctx, x, y, z, w ); } #else /* * OpenGL implementation of glWindowPos*MESA() */ void glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { GLfloat fx, fy; /* Push current matrix mode and viewport attributes */ glPushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT ); /* Setup projection parameters */ glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); glDepthRange( z, z ); glViewport( (int) x - 1, (int) y - 1, 2, 2 ); /* set the raster (window) position */ fx = x - (int) x; fy = y - (int) y; glRasterPos4f( fx, fy, 0.0, w ); /* restore matrices, viewport and matrix mode */ glPopMatrix(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glPopAttrib(); } #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.