This is interp.c in view mode; [Download] [Up]
/* $Id: interp.c,v 1.2 1996/09/25 02:01:28 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: interp.c,v $ * Revision 1.2 1996/09/25 02:01:28 brianp * removed gl_interp_texcoords() and gl_interp_texcoords2() * * Revision 1.1 1996/09/13 01:38:16 brianp * Initial revision * */ #include "interp.h" #include "macros.h" #include "types.h" /* * Linear integer interpolation of Z (depth) values: * Iterpolate n integer values between z0 and z1 and put into zspan. * When finished, zspan[0] = z0, zspan[n-1] = z1, and the rest of * zspan[] is filled with interpolated values. * We have to be careful to avoid integer overflow! */ void gl_interpolate_z( GLint n, GLint z0, GLint z1, GLdepth zspan[] ) { GLint i, dz; switch (n) { case 1: zspan[0] = z0; return; case 2: zspan[0] = z0; zspan[1] = z1; return; case 3: zspan[0] = z0; zspan[1] = (z0 + z1) >> 1; zspan[2] = z1; return; default: z0 = z0 << 7; z1 = z1 << 7; dz = (z1-z0) / (n-1); for (i=0;i<n;i++) { zspan[i] = z0 >> 7; z0 += dz; } return; } } /* * Linear integer interpolation: * Iterpolate n integer values between y0 and y1 and put into yspan. * When finished, yspan[0] = y0, yspan[n-1] = y1, and the rest of * yspan[] is filled with interpolated values. */ void gl_interpolate_i( GLint n, GLint y0, GLint y1, GLint yspan[] ) { switch (n) { case 1: yspan[0] = y0; return; case 2: yspan[0] = y0; yspan[1] = y1; return; case 3: yspan[0] = y0; yspan[1] = (y0+y1) >> 1; yspan[2] = y1; return; default: if (y0==y1) { register GLint i; for (i=0;i<n;i++) { yspan[i] = y0; } } else { register GLint i; register GLint dx, dy; register GLint a, b, d; register GLint y; register GLint qa, qb; dx = n-1; dy = y1 - y0; qa = dy / dx; dy = dy % dx; if (dy<0) { dy = -dy; qb = qa - 1; } else { qb = qa + 1; } a = dy+dy; d = a-dx; b = d-dx; y = y0; for (i=0;i<n;i++) { yspan[i] = y; if (d<0) { d += a; y += qa; } else { d += b; y += qb; } } } } } /* * Interpolate RGBA values. * Input: n - number of values to generate * r0, r1 - first and last alpha values * g0, g1 - first and last alpha values * b0, b1 - first and last alpha values * a0, a1 - first and last alpha values * Output: rspan, gspan, bspan, aspan - interpolated color values in * the range [0,CC.RedScale], [0,CC.GreenScale], [0,CC.BlueScale], * and [0,CC.AlphaScale]. */ void gl_interpolate_rgba( GLint n, GLfixed r0, GLfixed r1, GLubyte rspan[], GLfixed g0, GLfixed g1, GLubyte gspan[], GLfixed b0, GLfixed b1, GLubyte bspan[], GLfixed a0, GLfixed a1, GLubyte aspan[] ) { GLint i, m; GLfixed dr, dg, db, da; switch (n) { case 1: rspan[0] = FixedToInt(r0); gspan[0] = FixedToInt(g0); bspan[0] = FixedToInt(b0); aspan[0] = FixedToInt(a0); return; case 2: rspan[0] = FixedToInt(r0); rspan[1] = FixedToInt(r1); gspan[0] = FixedToInt(g0); gspan[1] = FixedToInt(g1); bspan[0] = FixedToInt(b0); bspan[1] = FixedToInt(b1); aspan[0] = FixedToInt(a0); aspan[1] = FixedToInt(a1); return; default: m = n-1; dr = (r1-r0) / m; dg = (g1-g0) / m; db = (b1-b0) / m; da = (a1-a0) / m; for (i=0;i<n;i++) { rspan[i] = FixedToInt(r0); r0 += dr; gspan[i] = FixedToInt(g0); g0 += dg; bspan[i] = FixedToInt(b0); b0 += db; aspan[i] = FixedToInt(a0); a0 += da; } return; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.