Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************Module*Header*******************************\
* Module Name: zippy.h * * included by zippy.c * * 28-Oct-1994 mikeke Created * * Copyright (c) 1994 Microsoft Corporation \**************************************************************************/
/*
** Copyright 1991, 1992, 1993, Silicon Graphics, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of Silicon Graphics, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. */
void FASTCALL #if ZBUFFER
__ZippyFSTZ #else
#if TEXTURE
#if SHADE
__ZippyFSTRGBTex #else
__ZippyFSTTex #endif
#else
#if SHADE
__ZippyFSTRGB #else
__ZippyFSTCI #endif
#endif
#endif
(__GLcontext *gc, GLint iyBottom, GLint iyTop) { int scansize;
//
// this function assumes all this stuff
//
ASSERTOPENGL((gc->drawBuffer->buf.flags & DIB_FORMAT) != 0, "Zippy target must have DIB format\n"); ASSERTOPENGL((gc->drawBuffer->buf.flags & NO_CLIP) != 0, "Zippy doesn't support per-pixel clipping\n"); ASSERTOPENGL(gc->state.raster.drawBuffer != GL_FRONT_AND_BACK, "Zippy only handles one draw buffer\n"); ASSERTOPENGL(gc->transform.reasonableViewport, "Zippy requires reasonableViewport\n"); ASSERTOPENGL(gc->transform.clipY0 <= iyBottom, "Zippy requires unclipped area\n"); ASSERTOPENGL(iyTop <= gc->transform.clipY1, "Zippy requires unclipped area\n");
//
// setup zbuffer
//
#if (ZBUFFER)
if( gc->modes.depthBits == 32 ) { gc->polygon.shader.zbuf = (__GLzValue *) ((GLubyte *)gc->polygon.shader.zbuf+ (gc->polygon.shader.ixLeft << 2)); } else { gc->polygon.shader.zbuf = (__GLzValue *) ((GLubyte *)gc->polygon.shader.zbuf+ (gc->polygon.shader.ixLeft << 1)); } #endif
//
// render the spans
//
scansize = gc->polygon.shader.cfb->buf.outerWidth; gc->polygon.shader.frag.x = gc->polygon.shader.ixLeft;
for (gc->polygon.shader.frag.y = iyBottom; gc->polygon.shader.frag.y != iyTop;) {
GLint spanWidth = gc->polygon.shader.ixRight - gc->polygon.shader.frag.x;
if (spanWidth > 0) { gc->polygon.shader.length = spanWidth;
(GENACCEL(gc).__fastSpanFuncPtr)((__GLGENcontext *)gc); }
if ((++gc->polygon.shader.frag.y == iyTop) && (gc->polygon.shader.modeFlags & __GL_SHADE_LAST_SUBTRI)) return;
GENACCEL(gc).pPix += scansize;
gc->polygon.shader.ixRightFrac += gc->polygon.shader.dxRightFrac; if (gc->polygon.shader.ixRightFrac < 0) { /*
* Carry/Borrow'd. Use large step */ gc->polygon.shader.ixRight += gc->polygon.shader.dxRightBig; gc->polygon.shader.ixRightFrac &= ~0x80000000; } else { gc->polygon.shader.ixRight += gc->polygon.shader.dxRightLittle; }
gc->polygon.shader.ixLeftFrac += gc->polygon.shader.dxLeftFrac; if (gc->polygon.shader.ixLeftFrac < 0) { /*
* Carry/Borrow'd. Use large step */ gc->polygon.shader.frag.x += gc->polygon.shader.dxLeftBig; gc->polygon.shader.ixLeftFrac &= ~0x80000000;
#if SHADE
GENACCEL(gc).spanValue.r += *((GLint *)&gc->polygon.shader.rBig); GENACCEL(gc).spanValue.g += *((GLint *)&gc->polygon.shader.gBig); GENACCEL(gc).spanValue.b += *((GLint *)&gc->polygon.shader.bBig); #endif
#if TEXTURE
#if SHADE
GENACCEL(gc).spanValue.a += *((GLint *)&gc->polygon.shader.aBig); #endif
GENACCEL(gc).spanValue.s += *((GLint *)&gc->polygon.shader.sBig); GENACCEL(gc).spanValue.t += *((GLint *)&gc->polygon.shader.tBig); gc->polygon.shader.frag.qw += gc->polygon.shader.qwBig; #endif
#if !(SHADE) && !(TEXTURE)
GENACCEL(gc).spanValue.r += *((GLint *)&gc->polygon.shader.rBig); #endif
#if ZBUFFER
gc->polygon.shader.frag.z += gc->polygon.shader.zBig; gc->polygon.shader.zbuf = (__GLzValue*)((GLubyte*)gc->polygon.shader.zbuf + gc->polygon.shader.zbufBig); #endif
} else { /*
* Use small step */ gc->polygon.shader.frag.x += gc->polygon.shader.dxLeftLittle;
#if SHADE
GENACCEL(gc).spanValue.r += *((GLint *)&gc->polygon.shader.rLittle); GENACCEL(gc).spanValue.g += *((GLint *)&gc->polygon.shader.gLittle); GENACCEL(gc).spanValue.b += *((GLint *)&gc->polygon.shader.bLittle); #endif
#if TEXTURE
#if SHADE
GENACCEL(gc).spanValue.a += *((GLint *)&gc->polygon.shader.aLittle); #endif
GENACCEL(gc).spanValue.s += *((GLint *)&gc->polygon.shader.sLittle); GENACCEL(gc).spanValue.t += *((GLint *)&gc->polygon.shader.tLittle); gc->polygon.shader.frag.qw += gc->polygon.shader.qwLittle; #endif
#if !(SHADE) && !(TEXTURE)
GENACCEL(gc).spanValue.r += *((GLint *)&gc->polygon.shader.rLittle); #endif
#if ZBUFFER
gc->polygon.shader.frag.z += gc->polygon.shader.zLittle; gc->polygon.shader.zbuf = (__GLzValue*)((GLubyte*)gc->polygon.shader.zbuf + gc->polygon.shader.zbufLittle); #endif
} }
gc->polygon.shader.ixLeft = gc->polygon.shader.frag.x; }
|