#ifndef __glevaluator_h_ #define __glevaluator_h_ /* ** Copyright 1991, 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. ** ** $Revision: 1.5 $ ** $Date: 1993/11/23 21:33:10 $ */ #include "types.h" /* XXX Can this be changed? */ #define __GL_MAX_ORDER 40 /* Number of maps */ #define __GL_MAP_RANGE_COUNT 9 #define __GL_EVAL1D_INDEX(old) ((old) - GL_MAP1_COLOR_4) #define __GL_EVAL2D_INDEX(old) ((old) - GL_MAP2_COLOR_4) /* Evaluator Flag Macros */ #define GET_EVALSTATE(gc) \ ((gc)->eval.evalStateFlags) #define GET_EVALSTATE_PTR(gc) \ (&((gc)->eval.evalStateFlags)) #define SET_EVALSTATE(gc,Flag) \ ((gc)->eval.evalStateFlags = (DWORD)(Flag)) /* Evaluator Stack State Macros */ #define GET_EVALSTACKSTATE(gc) \ ((gc)->eval.evalStackState) #define GET_EVALSTACKSTATE_PTR(gc) \ (&((gc)->eval.evalStackState)) #define SET_EVALSTACKSTATE(gc,Flag) \ ((gc)->eval.evalStackState= (DWORD)(Flag)) // Flags set by various API for indicating the Evaluator State. #define __EVALS_AFFECTS_1D_EVAL 0x00000001 #define __EVALS_AFFECTS_2D_EVAL 0x00000002 #define __EVALS_AFFECTS_ALL_EVAL 0x00000004 #define __EVALS_PUSH_EVAL_ATTRIB 0x00000008 #define __EVALS_POP_EVAL_ATTRIB 0x00000010 /* Largest Grid Size */ #define __GL_MAX_EVAL_WIDTH 1024 /* internal form of map range indexes */ #define __GL_C4 __GL_EVAL1D_INDEX(GL_MAP1_COLOR_4) #define __GL_I __GL_EVAL1D_INDEX(GL_MAP1_INDEX) #define __GL_N3 __GL_EVAL1D_INDEX(GL_MAP1_NORMAL) #define __GL_T1 __GL_EVAL1D_INDEX(GL_MAP1_TEXTURE_COORD_1) #define __GL_T2 __GL_EVAL1D_INDEX(GL_MAP1_TEXTURE_COORD_2) #define __GL_T3 __GL_EVAL1D_INDEX(GL_MAP1_TEXTURE_COORD_3) #define __GL_T4 __GL_EVAL1D_INDEX(GL_MAP1_TEXTURE_COORD_4) #define __GL_V3 __GL_EVAL1D_INDEX(GL_MAP1_VERTEX_3) #define __GL_V4 __GL_EVAL1D_INDEX(GL_MAP1_VERTEX_4) #define EVAL_COLOR_VALID 0x00000001 #define EVAL_NORMAL_VALID 0x00000002 #define EVAL_TEXTURE_VALID 0x00000004 typedef struct { /* ** not strictly necessary since it can be inferred from the index, ** but it makes the code simpler. */ GLint k; /* ** Order of the polynomial + 1 */ GLint order; __GLfloat u1, u2; } __GLevaluator1; typedef struct { GLint k; GLint majorOrder, minorOrder; __GLfloat u1, u2; __GLfloat v1, v2; } __GLevaluator2; typedef struct { __GLfloat start; __GLfloat finish; __GLfloat step; GLint n; } __GLevaluatorGrid; typedef struct { __GLevaluatorGrid u1, u2, v2; } __GLevaluatorState; typedef struct { __GLevaluator1 eval1[__GL_MAP_RANGE_COUNT]; __GLevaluator2 eval2[__GL_MAP_RANGE_COUNT]; __GLfloat *eval1Data[__GL_MAP_RANGE_COUNT]; __GLfloat *eval2Data[__GL_MAP_RANGE_COUNT]; __GLfloat uvalue; __GLfloat vvalue; __GLfloat ucoeff[__GL_MAX_ORDER]; __GLfloat vcoeff[__GL_MAX_ORDER]; __GLfloat ucoeffDeriv[__GL_MAX_ORDER]; __GLfloat vcoeffDeriv[__GL_MAX_ORDER]; GLint uorder; GLint vorder; GLint utype; GLint vtype; // Currently 16 bits long because that is the // maximum attribute stack depth. // The right-end is the stack-top // This field is used to keep track of PushAttrib/PopAttrib calls // that affect the Evaluator state. DWORD evalStackState; // This field is used to keep track of calls that can potentially // that affect the Evaluator state. If any of the flags are set, // a glsbAttention() call is made in the affected Evaluator client // side functions. DWORD evalStateFlags; // These are used to store the respective state values in POLYDATA // if they have been set by a not evaluator call (glcltColor, // glcltNormal etc.) DWORD accFlags; __GLcolor color; __GLcoord normal; __GLcoord texture; } __GLevaluatorMachine; extern void __glCopyEvaluatorState(__GLcontext *gc, __GLattribute *dst, const __GLattribute *src); extern GLint FASTCALL __glEvalComputeK(GLenum target); extern void APIPRIVATE __glFillMap1f(GLint k, GLint order, GLint stride, const GLfloat *points, __GLfloat *data); extern void APIPRIVATE __glFillMap1d(GLint k, GLint order, GLint stride, const GLdouble *points, __GLfloat *data); extern void APIPRIVATE __glFillMap2f(GLint k, GLint majorOrder, GLint minorOrder, GLint majorStride, GLint minorStride, const GLfloat *points, __GLfloat *data); extern void APIPRIVATE __glFillMap2d(GLint k, GLint majorOrder, GLint minorOrder, GLint majorStride, GLint minorStride, const GLdouble *points, __GLfloat *data); #ifdef NT #define __glMap1_size(k,order) ((k)*(order)) #define __glMap2_size(k,majorOrder,minorOrder) ((k)*(majorOrder)*(minorOrder)) #else extern GLint FASTCALL __glMap1_size(GLint k, GLint order); extern GLint FASTCALL __glMap2_size(GLint k, GLint majorOrder, GLint minorOrder); #endif extern __GLevaluator1 *__glSetUpMap1(__GLcontext *gc, GLenum type, GLint order, __GLfloat u1, __GLfloat u2); extern __GLevaluator2 *__glSetUpMap2(__GLcontext *gc, GLenum type, GLint majorOrder, GLint minorOrder, __GLfloat u1, __GLfloat u2, __GLfloat v1, __GLfloat v2); extern void __glDoEvalCoord1(__GLcontext *gc, __GLfloat u); extern void __glDoEvalCoord2(__GLcontext *gc, __GLfloat u, __GLfloat v); extern void FASTCALL __glEvalMesh1Line(__GLcontext *gc, GLint low, GLint high); extern void FASTCALL __glEvalMesh1Point(__GLcontext *gc, GLint low, GLint high); extern void __glEvalMesh2Fill(__GLcontext *gc, GLint lowU, GLint lowV, GLint highU, GLint highV); extern void __glEvalMesh2Line(__GLcontext *gc, GLint lowU, GLint lowV, GLint highU, GLint highV); extern void __glEvalMesh2Point(__GLcontext *gc, GLint lowU, GLint lowV, GLint highU, GLint highV); #endif /* __glevaluator_h_ */