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.
|
|
#ifndef __glphong_h_
#define __glphong_h_
#include "types.h"
#ifdef GL_WIN_phong_shading
//Definitions for the phong-flag
#define __GL_PHONG_INV_COLOR_VALID 0x00000001
#define __GL_PHONG_NEED_EYE_XPOLATE 0x00000002
#define __GL_PHONG_NEED_COLOR_XPOLATE 0x00000004
#define __GL_PHONG_ALREADY_SORTED 0x00000010
#define __GL_PHONG_USE_FAST_COLOR 0x00000020
#define __GL_PHONG_USE_SLOW_COLOR 0x00000040
/*
** Shader record for iterated objects (lines/triangles). This keeps ** track of all the various deltas needed to rasterize a triangle. */
/* NOTES:
* ----- * After expanding the shading equation using Taylor's series * /=======================================\ * | 2 2 | * | S(x,y) = ax + by + cxy + dx + ey + f | * \=======================================/ * * f = S (0, 0) , e = S (0, 0 ) * y * * d = S (0, 0) , c = S (0, 0) * x xy * * b = 0.5 * S (0 , 0) , a = 0.5 * S (0, 0) * yy xx * * Compute these in SetInitialPhongParameters */
/* NOTES on Forward differencing:
* ----------------------------- * * Along the edge interpolation: delta_x = X (dxdy), delta_y = 1 * ------------------------------------------------------------- * Initial S: S (0, 0) = f (compute in SetInitialPhongParameters, for vert A) * (Sinit_edge) * 2 * Initial dS : aX + b + cX + dX + e (compute in FillSubTriangle) * (dS_edge) * 2 * Initial ddS (constant) : 2aX + 2cX + 2b (compute in FillSubTriangle) * (ddS_edge) * * Every iteration compute Sinit_span (in FillSubTriangle). * * * * Along the span interpolation: delta_x = 1, delta_y = 0 * ------------------------------------------------------------- * Initial S: sEdge (compute in FillSubTriangle) * (Sinit_span) * * Initial dS: a(2x+1) + cy + d (compute once in SpanProc) * (dS_span) * * Initial ddS (constant): 2a (compute in SetInitialPhongParameters) * (ddS_span) * * Every iteration compute Color (in SpanProc). * */
typedef struct __GLphongPerLightDataRec {
/****** Diffuse Part *****/ GLfloat Dcurr; //current dot-product
GLfloat Ddel; GLfloat Ddel2; /****** Specular Part *****/ GLfloat Scurr; //current dot-product
GLfloat Sdel; GLfloat Sdel2;
#ifdef __JUNKED_CODE
/* Along the edge */ GLfloat DdelEdgeLittle; GLfloat Ddel2EdgeLittle; GLfloat DdelEdgeBig; GLfloat Ddel2EdgeBig;
/* Along the span */ GLfloat DdelSpan; GLfloat DdelSpanEdgeBig, DdelSpanEdgeLittle; GLfloat Ddel2Span;
/* Temporary storages during span-generation */ GLfloat D_tmp; GLfloat Ddel_tmp;
/* Polynomial coefficients */ GLfloat D[6];
/****** Specular Part *****/ GLfloat S_curr; //current dot-product
/* Along the edge */ GLfloat SdelEdgeLittle; GLfloat Sdel2EdgeLittle; GLfloat SdelEdgeBig; GLfloat Sdel2EdgeBig;
/* Along the span */ GLfloat SdelSpan; GLfloat SdelSpanEdgeBig, SdelSpanEdgeLittle; GLfloat Sdel2Span;
/* Temporary storages during span-generation */ GLfloat S_tmp; GLfloat Sdel_tmp;
/* Polynomial coefficients */ GLfloat S[6];
/****** Attenuation Part *****/ /****** Spotlight Part *****/ #endif //__JUNKED_CODE
} __GLphongPerLightData;
typedef struct __GLphongShadeRec {
GLuint flags;
GLint numLights; /* Normals */ __GLcoord dndx, dndy; __GLcoord nBig, nLittle; __GLcoord nCur, nTmp; /* Eye */ __GLcoord dedx, dedy; __GLcoord eBig, eLittle; __GLcoord eCur, eTmp; /* Face: Whether to use the FRONT or the BACK material */ GLint face; /* Store the invarient color */ __GLcolor invColor;
/* Temporary storage during span-interpolation of color */ __GLcolor tmpColor;
#ifdef __JUNKED_CODE
/* Tracks the current position wrt to the starting vertex */ __GLcoord cur_pos; __GLcoord tmp_pos; #endif //__JUNKED_CODE
/* Per-light data array */ __GLphongPerLightData perLight[8]; //update this to WGL_MAX_NUM_LIGHTS
} __GLphongShader;
extern void FASTCALL __glGenericPickPhongProcs(__GLcontext *gc); extern void ComputePhongInvarientRGBColor (__GLcontext *gc); #ifdef GL_WIN_specular_fog
extern __GLfloat ComputeSpecValue (__GLcontext *gc, __GLvertex *vx); #endif //GL_WIN_specular_fog
#endif //GL_WIN_phong_shading
#endif /* __glphong_h_ */
|