#ifndef __glrender_h_ #define __glrender_h_ /* ** Copyright 1991-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. */ #include "types.h" #include "constant.h" #include "cpu.h" #ifdef GL_WIN_phong_shading #include "phong.h" #endif //GL_WIN_phong_shading /* ** used to approximate zero (and avoid divide by zero errors) ** when doing polygon offset with dzdx = 0. */ #define __GL_PGON_OFFSET_NEAR_ZERO .00001 /* ** Epsilon value for detecting non-scaling transformation matrices: */ #define __GL_MATRIX_UNITY_SCALE_EPSILON ((__GLfloat)0.0001) typedef GLuint __GLstippleWord; /* ** A fragment is a collection of all the data needed after rasterization ** of a primitive has occured, but before the data is entered into various ** framebuffers. The data contained in the fragment has been normalized ** into a form for immediate storage into the framebuffer. */ struct __GLfragmentRec { /* Screen x, y */ GLint x, y; /* Z coordinate in form used by depth buffer */ __GLzValue z; /* ** Color of the fragment. When in colorIndexMode only the r component ** is valid. */ __GLcolor color; /* Texture information for the fragment */ __GLfloat s, t, qw; /* Fog information for the fragment */ __GLfloat f; }; /************************************************************************/ /* ** Shader record for iterated objects (lines/triangles). This keeps ** track of all the various deltas needed to rasterize a triangle. */ struct __GLshadeRec { GLint dxLeftLittle, dxLeftBig; GLint dxLeftFrac; GLint ixLeft, ixLeftFrac; GLint dxRightLittle, dxRightBig; GLint dxRightFrac; GLint ixRight, ixRightFrac; __GLfloat area; __GLfloat dxAC, dxBC, dyAC, dyBC; __GLfragment frag; GLint length; /* Color */ __GLfloat rLittle, gLittle, bLittle, aLittle; __GLfloat rBig, gBig, bBig, aBig; __GLfloat drdx, dgdx, dbdx, dadx; __GLfloat drdy, dgdy, dbdy, dady; /* Depth */ GLint zLittle, zBig; GLint dzdx; __GLfloat dzdyf, dzdxf; /* Texture */ __GLfloat sLittle, tLittle, qwLittle; __GLfloat sBig, tBig, qwBig; __GLfloat dsdx, dtdx, dqwdx; __GLfloat dsdy, dtdy, dqwdy; __GLfloat fLittle, fBig; __GLfloat dfdy, dfdx; GLuint modeFlags; __GLzValue *zbuf; GLint zbufBig, zbufLittle; __GLstencilCell *sbuf; GLint sbufBig, sbufLittle; __GLcolor *colors; __GLcolor *fbcolors; __GLstippleWord *stipplePat; GLboolean done; __GLcolorBuffer *cfb; #ifdef GL_WIN_phong_shading __GLphongShade phong; #endif //GL_WIN_phong_shading }; /* ** The distinction between __GL_SHADE_SMOOTH and __GL_SHADE_SMOOTH_LIGHT is ** simple. __GL_SHADE_SMOOTH indicates if the polygon will be smoothly ** shaded, and __GL_SHADE_SMOOTH_LIGHT indicates if the polygon will be ** lit at each vertex. Note that __GL_SHADE_SMOOTH might be set while ** __GL_SHADE_SMOOTH_LIGHT is not set if the lighting model is GL_FLAT, but ** the polygons are fogged. */ #define __GL_SHADE_RGB 0x0001 #define __GL_SHADE_SMOOTH 0x0002 /* smooth shaded polygons */ #define __GL_SHADE_DEPTH_TEST 0x0004 #define __GL_SHADE_TEXTURE 0x0008 #define __GL_SHADE_STIPPLE 0x0010 /* polygon stipple */ #define __GL_SHADE_STENCIL_TEST 0x0020 #define __GL_SHADE_DITHER 0x0040 #define __GL_SHADE_LOGICOP 0x0080 #define __GL_SHADE_BLEND 0x0100 #define __GL_SHADE_ALPHA_TEST 0x0200 #define __GL_SHADE_TWOSIDED 0x0400 #define __GL_SHADE_MASK 0x0800 /* Two kinds of fog... */ #define __GL_SHADE_SLOW_FOG 0x1000 #define __GL_SHADE_CHEAP_FOG 0x2000 /* do we iterate depth values in software */ #define __GL_SHADE_DEPTH_ITER 0x4000 #define __GL_SHADE_LINE_STIPPLE 0x8000 #define __GL_SHADE_CULL_FACE 0x00010000 #define __GL_SHADE_SMOOTH_LIGHT 0x00020000 /* smoothly lit polygons */ // Set when the texture mode makes polygon color irrelevant #define __GL_SHADE_FULL_REPLACE_TEXTURE 0x00040000 #ifdef GL_WIN_phong_shading /* ** This is set when shade-model is GL_PHONG_EXT and Lighting is ON ** otherwise use smooth shading. ** Used in place of __GL_SHADE_SMOOTH_LIGHT when ShadeModel is ** GL_PHONG_EXT. */ #define __GL_SHADE_PHONG 0x00100000 #endif //GL_WIN_phong_shading // Set when the current sub-triangle is the last (or only) subtriangle #define __GL_SHADE_LAST_SUBTRI 0x00080000 #ifdef GL_WIN_specular_fog // Set when the specularly-lit textures are needed using fog. #define __GL_SHADE_SPEC_FOG 0x00200000 #endif //GL_WIN_specular_fog #define __GL_SHADE_COMPUTE_FOG 0x00400000 #define __GL_SHADE_INTERP_FOG 0x00800000 /************************************************************************/ /* ** __GL_STIPPLE_COUNT_BITS is the number of bits needed to represent a ** stipple count (5 bits). ** ** __GL_STIPPLE_BITS is the number of bits in a stipple word (32 bits). */ #define __GL_STIPPLE_COUNT_BITS 5 #define __GL_STIPPLE_BITS (1 << __GL_STIPPLE_COUNT_BITS) #ifdef __GL_STIPPLE_MSB #define __GL_STIPPLE_SHIFT(i) (1 << (__GL_STIPPLE_BITS - 1 - (i))) #else #define __GL_STIPPLE_SHIFT(i) (1 << (i)) #endif #define __GL_MAX_STIPPLE_WORDS \ ((__GL_MAX_MAX_VIEWPORT + __GL_STIPPLE_BITS - 1) / __GL_STIPPLE_BITS) #ifdef NT // Allow 256 bytes of stipple on the stack. This may seem small but // stipples are consumed a bit at a time so this is good enough for // 2048 stipple bits #define __GL_MAX_STACK_STIPPLE_BITS \ 2048 #define __GL_MAX_STACK_STIPPLE_WORDS \ ((__GL_MAX_STACK_STIPPLE_BITS+__GL_STIPPLE_BITS-1)/__GL_STIPPLE_BITS) #endif /************************************************************************/ /* ** Accumulation buffer cells for each color component. Note that these ** items needs to be at least 2 bits bigger than the color components ** that drive them, with 2 times being ideal. This declaration assumes ** that the underlying color components are no more than 14 bits and ** hopefully 8. */ typedef struct __GLaccumCellRec { __GLaccumCellElement r, g, b, a; } __GLaccumCell; /************************************************************************/ struct __GLbitmapRec { GLsizei width; GLsizei height; GLfloat xorig; GLfloat yorig; GLfloat xmove; GLfloat ymove; GLint imageSize; /* An optimization */ /* bitmap */ }; extern void __glDrawBitmap(__GLcontext *gc, GLsizei width, GLsizei height, GLfloat xOrig, GLfloat yOrig, GLfloat xMove, GLfloat yMove, const GLubyte bits[]); extern __GLbitmap *__glAllocBitmap(__GLcontext *gc, GLsizei width, GLsizei height, GLfloat xOrig, GLfloat yOrig, GLfloat xMove, GLfloat yMove); extern void FASTCALL __glRenderBitmap(__GLcontext *gc, const __GLbitmap *bitmap, const GLubyte *bits); /************************************************************************/ /* New AA line algorithm supports widths one or more. Until that changes, ** don't change this minimum! */ #define __GL_POINT_SIZE_MINIMUM ((__GLfloat) 1.0) #define __GL_POINT_SIZE_MAXIMUM ((__GLfloat) 10.0) #define __GL_POINT_SIZE_GRANULARITY ((__GLfloat) 0.125) extern void FASTCALL __glBeginPoints(__GLcontext *gc); extern void FASTCALL __glEndPoints(__GLcontext *gc); extern void FASTCALL __glPoint(__GLcontext *gc, __GLvertex *vx); extern void FASTCALL __glPointFast(__GLcontext *gc, __GLvertex *vx); /* Various point rendering implementations */ void FASTCALL __glRenderAliasedPointN(__GLcontext *gc, __GLvertex *v); void FASTCALL __glRenderAliasedPoint1(__GLcontext *gc, __GLvertex *v); void FASTCALL __glRenderAliasedPoint1_NoTex(__GLcontext *gc, __GLvertex *v); #ifdef __BUGGY_RENDER_POINT void FASTCALL __glRenderFlatFogPoint(__GLcontext *gc, __GLvertex *v); #ifdef NT void FASTCALL __glRenderFlatFogPointSlow(__GLcontext *gc, __GLvertex *v); #endif #endif //__BUGGY_RENDER_POINT void FASTCALL __glRenderAntiAliasedRGBPoint(__GLcontext *gc, __GLvertex *v); void FASTCALL __glRenderAntiAliasedCIPoint(__GLcontext *gc, __GLvertex *v); /************************************************************************/ #define __GL_LINE_WIDTH_MINIMUM ((__GLfloat) 0.5) #define __GL_LINE_WIDTH_MAXIMUM ((__GLfloat) 10.0) #define __GL_LINE_WIDTH_GRANULARITY ((__GLfloat) 0.125) /* ** Don't change these constants without fixing LIGHT/rex_linespan.ma which ** currently assumes that __GL_X_MAJOR is 0. */ #define __GL_X_MAJOR 0 #define __GL_Y_MAJOR 1 /* ** Use a fixed point notation of 15.17 ** ** This should support screen sizes up to 4K x 4K, with 5 subpixel bits ** for 4K x 4K screens. */ #define __GL_LINE_FRACBITS 17 #define __GL_LINE_INT_TO_FIXED(x) ((x) << __GL_LINE_FRACBITS) #define __GL_LINE_FLOAT_TO_FIXED(x) ((x) * (1 << __GL_LINE_FRACBITS)) #define __GL_LINE_FIXED_ONE (1 << __GL_LINE_FRACBITS) #define __GL_LINE_FIXED_HALF (1 << (__GL_LINE_FRACBITS-1)) #define __GL_LINE_FIXED_TO_FLOAT(x) (((GLfloat) (x)) / __GL_LINE_FIXED_ONE) #define __GL_LINE_FIXED_TO_INT(x) (((unsigned int) (x)) >> __GL_LINE_FRACBITS) /* ** Contains variables needed to draw all line options. */ struct __GLlineOptionsRec { GLint axis, numPixels; __GLfloat offset, length, oneOverLength; GLint xStart, yStart; GLint xLittle, xBig, yLittle, yBig; GLint fraction, dfraction; __GLfloat curF, curR, curG, curB, curA, curS, curT, curQW; __GLzValue curZ; __GLfloat antiAliasPercent; __GLfloat f0; GLint width; const __GLvertex *v0, *v1; /* Anti-aliased line only info */ __GLfloat realLength; __GLfloat dldx, dldy; __GLfloat dddx, dddy; __GLfloat dlLittle, dlBig; __GLfloat ddLittle, ddBig; __GLfloat plength, pwidth; /* Anti-aliased stippled lines only */ __GLfloat stippleOffset; __GLfloat oneOverStippleRepeat; }; /* ** Line state. Contains all the line specific state, as well as ** procedure pointers used during rendering operations. */ typedef struct { /* ** stipplePosition indicates which bit in mask is being examined ** for the next pixel in the line to be rendered. It is also used ** by feedback lines to determine if they are the first of a connected ** loop. */ GLint stipplePosition; /* ** Repeat factor. After repeat is reduced to zero the ** stipplePosition is updated. */ GLint repeat; /* ** Set to FALSE when the stipple needs to be reset. */ GLboolean notResetStipple; __GLlineOptions options; } __GLlineMachine; #ifdef NT // renderLine flags #define __GL_LVERT_FIRST 0x0001 #endif void FASTCALL __glBeginLStrip(__GLcontext *gc); void FASTCALL __glEndLStrip(__GLcontext *gc); void FASTCALL __glBeginLLoop(__GLcontext *gc); void FASTCALL __glEndLLoop(__GLcontext *gc); void FASTCALL __glBeginLines(__GLcontext *gc); void FASTCALL __glEndLines(__GLcontext *gc); #ifdef NT void FASTCALL __glClipLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1, GLuint flags); void FASTCALL __glNopLineBegin(__GLcontext *gc); void FASTCALL __glNopLineEnd(__GLcontext *gc); #else void FASTCALL __glClipLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); #endif #ifdef NT void FASTCALL __glRenderAliasLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1, GLuint flags); void FASTCALL __glRenderFlatFogLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1, GLuint flags); void FASTCALL __glRenderAntiAliasLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1, GLuint flags); BOOL FASTCALL __glInitLineData(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); #else void FASTCALL __glRenderAliasLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); void FASTCALL __glRenderFlatFogLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); void FASTCALL __glRenderAntiAliasLine(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); void FASTCALL __glInitLineData(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1); #endif /* ** Line procs */ GLboolean FASTCALL __glProcessLine(__GLcontext *); GLboolean FASTCALL __glProcessLine3NW(__GLcontext *); GLboolean FASTCALL __glWideLineRep(__GLcontext *); GLboolean FASTCALL __glDrawBothLine(__GLcontext *); GLboolean FASTCALL __glScissorLine(__GLcontext *); GLboolean FASTCALL __glStippleLine(__GLcontext *); GLboolean FASTCALL __glStencilTestLine(__GLcontext *); #ifdef NT GLboolean FASTCALL __glDepth16TestStencilLine(__GLcontext *); #endif GLboolean FASTCALL __glDepthTestStencilLine(__GLcontext *); GLboolean FASTCALL __glDepthPassLine(__GLcontext *); GLboolean FASTCALL __glDitherCILine(__GLcontext *); GLboolean FASTCALL __glDitherRGBALine(__GLcontext *); GLboolean FASTCALL __glStoreLine(__GLcontext *); GLboolean FASTCALL __glAntiAliasLine(__GLcontext *); #ifdef __GL_USEASMCODE GLboolean FASTCALL __glDepthTestLine_asm(__GLcontext *gc); /* ** A LEQUAL specific line depth tester because LEQUAL is the method of ** choice. :) */ GLboolean FASTCALL __glDepthTestLine_LEQ_asm(__GLcontext *gc); /* Assembly routines */ void __glDTP_LEQUAL(void); void __glDTP_EQUAL(void); void __glDTP_GREATER(void); void __glDTP_NOTEQUAL(void); void __glDTP_GEQUAL(void); void __glDTP_ALWAYS(void); void __glDTP_LESS(void); void __glDTP_LEQUAL_M(void); void __glDTP_EQUAL_M(void); void __glDTP_GREATER_M(void); void __glDTP_NOTEQUAL_M(void); void __glDTP_GEQUAL_M(void); void __glDTP_ALWAYS_M(void); void __glDTP_LESS_M(void); #else #ifdef NT GLboolean FASTCALL __glDepth16TestLine(__GLcontext *); #endif GLboolean FASTCALL __glDepthTestLine(__GLcontext *); #endif /* ** Line stippled procs */ GLboolean FASTCALL __glScissorStippledLine(__GLcontext *); GLboolean FASTCALL __glWideStippleLineRep(__GLcontext *); GLboolean FASTCALL __glDrawBothStippledLine(__GLcontext *); GLboolean FASTCALL __glStencilTestStippledLine(__GLcontext *); #ifdef NT GLboolean FASTCALL __glDepth16TestStippledLine(__GLcontext *); GLboolean FASTCALL __glDepth16TestStencilStippledLine(__GLcontext *); #endif GLboolean FASTCALL __glDepthTestStippledLine(__GLcontext *); GLboolean FASTCALL __glDepthTestStencilStippledLine(__GLcontext *); GLboolean FASTCALL __glDepthPassStippledLine(__GLcontext *); GLboolean FASTCALL __glDitherCIStippledLine(__GLcontext *); GLboolean FASTCALL __glDitherRGBAStippledLine(__GLcontext *); GLboolean FASTCALL __glStoreStippledLine(__GLcontext *); GLboolean FASTCALL __glAntiAliasStippledLine(__GLcontext *); /* ** C depth-test routines */ GLboolean FASTCALL __glDT_NEVER( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_LEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_LESS( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_EQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_GREATER( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_NOTEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_GEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_ALWAYS( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_LEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_LESS_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_EQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_GREATER_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_NOTEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_GEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT_ALWAYS_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_LEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_LESS( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_EQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_GREATER( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_NOTEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_GEQUAL( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_ALWAYS( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_LEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_LESS_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_EQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_GREATER_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_NOTEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_GEQUAL_M( __GLzValue, __GLzValue * ); GLboolean FASTCALL __glDT16_ALWAYS_M( __GLzValue, __GLzValue * ); extern GLboolean (FASTCALL *__glCDTPixel[32])(__GLzValue, __GLzValue * ); /************************************************************************/ /* ** Polygon machine state. Contains all the polygon specific state, ** as well as procedure pointers used during rendering operations. */ typedef struct __GLpolygonMachineRec { /* ** Internal form of users stipple. Users stipple is always ** normalized to stippleWord sized with the LSB of each word mapping ** to the left x coordinate. */ __GLstippleWord stipple[32]; /* ** Polygon (triangle really) shading state. Used by polygon fillers ** and span routines. */ __GLshade shader; /* ** Lookup table that returns the face (0=front, 1=back) when indexed ** by a flag which is zero for CW and 1 for CCW. If FrontFace is CW: ** face[0] = 0 ** face[1] = 1 ** else ** face[0] = 1 ** face[1] = 0 */ GLubyte face[2]; /* ** Internal form of polygon mode for each face */ GLubyte mode[2]; /* ** Culling flag. 0 when culling the front face, 1 when culling the ** back face and 2 when not culling. */ GLubyte cullFace; } __GLpolygonMachine; /* defines for above cullFlag */ #define __GL_CULL_FLAG_FRONT __GL_FRONTFACE #define __GL_CULL_FLAG_BACK __GL_BACKFACE #define __GL_CULL_FLAG_DONT 2 /* Indicies for face[] array in polygonMachine above */ #define __GL_CW 0 #define __GL_CCW 1 /* Internal numbering for polymode values */ #define __GL_POLYGON_MODE_FILL (GL_FILL & 0xf) #define __GL_POLYGON_MODE_LINE (GL_LINE & 0xf) #define __GL_POLYGON_MODE_POINT (GL_POINT & 0xf) extern void FASTCALL __glBeginPolygon(__GLcontext *gc); extern void FASTCALL __glBeginQStrip(__GLcontext *gc); extern void FASTCALL __glBeginQuads(__GLcontext *gc); extern void FASTCALL __glBeginTFan(__GLcontext *gc); extern void FASTCALL __glBeginTriangles(__GLcontext *gc); extern void FASTCALL __glBeginTStrip(__GLcontext *gc); extern void FASTCALL __glClipTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLuint orClipCodes); extern void FASTCALL __glClipPolygon(__GLcontext *gc, __GLvertex *v0, GLint nv); extern void __glDoPolygonClip(__GLcontext *gc, __GLvertex **vp, GLint nv, GLuint orClipCodes); extern void FASTCALL __glFrustumClipPolygon(__GLcontext *gc, __GLvertex *v0, GLint nv); extern void FASTCALL __glConvertStipple(__GLcontext *gc); /* Rectangle processing proc */ extern void __glRect(__GLcontext *gc, __GLfloat x0, __GLfloat y0, __GLfloat x1, __GLfloat y1); /* ** Triangle render proc that handles culling, twosided lighting and ** polygon mode. */ extern void FASTCALL __glRenderTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c); extern void FASTCALL __glRenderFlatTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c); extern void FASTCALL __glRenderSmoothTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c); #ifdef GL_WIN_phong_shading extern void FASTCALL __glRenderPhongTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c); #endif //GL_WIN_phong_shading extern void FASTCALL __glDontRenderTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c); /* ** Triangle filling procs for each polygon smooth mode */ void FASTCALL __glFillTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); #ifdef GL_WIN_phong_shading extern void FASTCALL __glFillPhongTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); extern void FASTCALL __glFillAntiAliasedPhongTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); #endif //GL_WIN_phong_shading void FASTCALL __glFillFlatFogTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); void FASTCALL __glFillAntiAliasedTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); #ifdef GL_WIN_specular_fog void FASTCALL __glFillFlatSpecFogTriangle(__GLcontext *gc, __GLvertex *a, __GLvertex *b, __GLvertex *c, GLboolean ccw); #endif //GL_WIN_specular_fog /* ** Polygon offset calc */ extern __GLfloat __glPolygonOffsetZ(__GLcontext *gc ); /* ** Span procs */ extern GLboolean FASTCALL __glProcessSpan(__GLcontext *); extern GLboolean FASTCALL __glProcessReplicateSpan(__GLcontext *); extern GLboolean FASTCALL __glClipSpan(__GLcontext *); extern GLboolean FASTCALL __glStippleSpan(__GLcontext *); extern GLboolean FASTCALL __glAlphaTestSpan(__GLcontext *); #ifdef __GL_USEASMCODE /* Assembly routines */ void FASTCALL __glDTS_LEQUAL(void); void FASTCALL __glDTS_EQUAL(void); void FASTCALL __glDTS_GREATER(void); void FASTCALL __glDTS_NOTEQUAL(void); void FASTCALL __glDTS_GEQUAL(void); void FASTCALL __glDTS_ALWAYS(void); void FASTCALL __glDTS_LESS(void); void FASTCALL __glDTS_LEQUAL_M(void); void FASTCALL __glDTS_EQUAL_M(void); void FASTCALL __glDTS_GREATER_M(void); void FASTCALL __glDTS_NOTEQUAL_M(void); void FASTCALL __glDTS_GEQUAL_M(void); void FASTCALL __glDTS_ALWAYS_M(void); void FASTCALL __glDTS_LESS_M(void); extern GLboolean FASTCALL __glStencilTestSpan_asm(__GLcontext *); extern GLboolean FASTCALL __glDepthTestSpan_asm(__GLcontext *); extern void (*__glSDepthTestPixel[16])(void); #else extern GLboolean FASTCALL __glStencilTestSpan(__GLcontext *); #ifdef NT extern GLboolean FASTCALL __glDepth16TestSpan(__GLcontext *); #endif extern GLboolean FASTCALL __glDepthTestSpan(__GLcontext *); #endif #ifdef NT extern GLboolean FASTCALL __glDepth16TestStencilSpan(__GLcontext *); #endif extern GLboolean FASTCALL __glDepthTestStencilSpan(__GLcontext *); extern GLboolean FASTCALL __glDepthPassSpan(__GLcontext *); extern GLboolean FASTCALL __glColorSpan1(__GLcontext *); extern GLboolean FASTCALL __glColorSpan2(__GLcontext *); extern GLboolean FASTCALL __glColorSpan3(__GLcontext *); extern GLboolean FASTCALL __glFlatRGBASpan(__GLcontext *); extern GLboolean FASTCALL __glShadeRGBASpan(__GLcontext *); #ifdef GL_WIN_phong_shading extern GLboolean FASTCALL __glPhongRGBASpan(__GLcontext *); extern GLboolean FASTCALL __glPhongCISpan(__GLcontext *); extern GLboolean FASTCALL __glPhongRGBALineSpan(__GLcontext *); extern GLboolean FASTCALL __glPhongCILineSpan(__GLcontext *); #endif //GL_WIN_phong_shading extern GLboolean FASTCALL __glFlatCISpan(__GLcontext *); extern GLboolean FASTCALL __glShadeCISpan(__GLcontext *); extern GLboolean FASTCALL __glTextureSpan(__GLcontext *); extern GLboolean FASTCALL __glFogSpan(__GLcontext *); extern GLboolean FASTCALL __glFogSpanSlow(__GLcontext *); extern GLboolean FASTCALL __glDrawBothSpan(__GLcontext *); extern GLboolean FASTCALL __glIntegrateSpan1(__GLcontext *); extern GLboolean FASTCALL __glIntegrateSpan2(__GLcontext *); extern GLboolean FASTCALL __glIntegrateSpan3(__GLcontext *); extern GLboolean FASTCALL __glIntegrateSpan4(__GLcontext *); extern GLboolean FASTCALL __glDitherRGBASpan(__GLcontext *); extern GLboolean FASTCALL __glDitherCISpan(__GLcontext *); extern GLboolean FASTCALL __glRoundRGBASpan(__GLcontext *); extern GLboolean FASTCALL __glRoundCISpan(__GLcontext*); extern GLboolean FASTCALL __glLogicOpSpan(__GLcontext *); extern GLboolean FASTCALL __glMaskRGBASpan(__GLcontext *); extern GLboolean FASTCALL __glMaskCISpan(__GLcontext *); /* ** Stippled span procs */ extern GLboolean FASTCALL __glStippleStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glAlphaTestStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glStencilTestStippledSpan(__GLcontext *); #ifdef NT extern GLboolean FASTCALL __glDepth16TestStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glDepth16TestStencilStippledSpan(__GLcontext *); #endif extern GLboolean FASTCALL __glDepthTestStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glDepthTestStencilStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glDepthPassStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glColorStippledSpan1(__GLcontext *); extern GLboolean FASTCALL __glColorStippledSpan2(__GLcontext *); extern GLboolean FASTCALL __glColorStippledSpan3(__GLcontext *); extern GLboolean FASTCALL __glTextureStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glFogStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glFogStippledSpanSlow(__GLcontext *); extern GLboolean FASTCALL __glDrawBothStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glIntegrateStippledSpan1(__GLcontext *); extern GLboolean FASTCALL __glIntegrateStippledSpan2(__GLcontext *); extern GLboolean FASTCALL __glIntegrateStippledSpan3(__GLcontext *); extern GLboolean FASTCALL __glIntegrateStippledSpan4(__GLcontext *); extern GLboolean FASTCALL __glBlendStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glDitherRGBAStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glDitherCIStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glRoundRGBAStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glRoundCIStippledSpan(__GLcontext *); extern GLboolean FASTCALL __glLogicOpStippledSpan(__GLcontext *); /************************************************************************/ extern void FASTCALL __glValidateAlphaTest(__GLcontext *gc); /************************************************************************/ extern void FASTCALL __glValidateStencil(__GLcontext *gc, __GLstencilBuffer *sfb); #define __GL_STENCIL_RANGE (1 << (sizeof(__GLstencilCell) * 8))/*XXX*/ #define __GL_MAX_STENCIL_VALUE (__GL_STENCIL_RANGE - 1) /************************************************************************/ void __glFogFragmentSlow(__GLcontext *gc, __GLfragment *fr, __GLfloat f); __GLfloat FASTCALL __glFogVertex(__GLcontext *gc, __GLvertex *fr); __GLfloat FASTCALL __glFogVertexLinear(__GLcontext *gc, __GLvertex *fr); void __glFogColorSlow(__GLcontext *gc, __GLcolor *out, __GLcolor *in, __GLfloat fog); /************************************************************************/ /* color index anti-alias support function */ extern __GLfloat __glBuildAntiAliasIndex(__GLfloat idx, __GLfloat antiAliasPercent); /************************************************************************/ /* ** Dithering implementation stuff. */ #define __GL_DITHER_BITS 4 #define __GL_DITHER_PRECISION (1 << __GL_DITHER_BITS) #define __GL_DITHER_INDEX(x,y) (((x) & 3) + (((y) & 3) << 2)) extern GLbyte __glDitherTable[16]; #endif /* __glrender_h_ */