windows-nt/Source/XPSP1/NT/multimedia/opengl/server/soft/so_eval.c
2020-09-26 16:20:57 +08:00

120 lines
3.3 KiB
C

/*
** 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.26 $
** $Date: 1993/11/29 01:18:49 $
*/
#include "precomp.h"
#pragma hdrstop
#include "attrib.h"
static const
struct defaultMap {
GLint index;
GLint k;
__GLfloat values[4];
} defaultMaps[__GL_MAP_RANGE_COUNT] = {
{__GL_C4, 4, 1.0, 1.0, 1.0, 1.0},
{__GL_I , 1, 1.0, 0.0, 0.0, 0.0},
{__GL_N3, 3, 0.0, 0.0, 1.0, 0.0},
{__GL_T1, 1, 0.0, 0.0, 0.0, 0.0},
{__GL_T2, 2, 0.0, 0.0, 0.0, 0.0},
{__GL_T3, 3, 0.0, 0.0, 0.0, 0.0},
{__GL_T4, 4, 0.0, 0.0, 0.0, 1.0},
{__GL_V3, 3, 0.0, 0.0, 0.0, 0.0},
{__GL_V4, 4, 0.0, 0.0, 0.0, 1.0},
};
void FASTCALL __glInitEvaluatorState(__GLcontext *gc)
{
int i,j;
const struct defaultMap *defMap;
__GLevaluator1 *eval1;
__GLevaluator2 *eval2;
__GLfloat **eval1Data;
__GLfloat **eval2Data;
for (i = 0; i < __GL_MAP_RANGE_COUNT; i++) {
defMap = &(defaultMaps[i]);
eval1 = &(gc->eval.eval1[i]);
eval2 = &(gc->eval.eval2[i]);
eval1Data = &(gc->eval.eval1Data[i]);
eval2Data = &(gc->eval.eval2Data[i]);
eval1->order = 1;
eval1->u1 = __glZero;
eval1->u2 = __glOne;
eval1->k = defMap->k;
eval2->majorOrder = 1;
eval2->minorOrder = 1;
eval2->u1 = __glZero;
eval2->u2 = __glOne;
eval2->v1 = __glZero;
eval2->v2 = __glOne;
eval2->k = defMap->k;
*eval1Data = (__GLfloat *)
GCALLOC(gc, (size_t) (sizeof(__GLfloat) * defMap->k));
#ifdef NT
if (NULL == *eval1Data) {
return;
}
#endif /* NT */
*eval2Data = (__GLfloat *)
GCALLOC(gc, (size_t) (sizeof(__GLfloat) * defMap->k));
#ifdef NT
if (NULL == *eval2Data) {
return;
}
#endif /* NT */
for (j = 0; j < defMap->k; j++) {
(*eval1Data)[j] = defMap->values[j];
(*eval2Data)[j] = defMap->values[j];
}
}
gc->eval.uorder = __glZero;
gc->eval.vorder = __glZero;
gc->eval.evalStackState = __glZero;
gc->state.evaluator.u1.start = __glZero;
gc->state.evaluator.u2.start = __glZero;
gc->state.evaluator.v2.start = __glZero;
gc->state.evaluator.u1.finish = __glOne;
gc->state.evaluator.u2.finish = __glOne;
gc->state.evaluator.v2.finish = __glOne;
gc->state.evaluator.u1.n = 1;
gc->state.evaluator.u2.n = 1;
gc->state.evaluator.v2.n = 1;
}
void FASTCALL __glFreeEvaluatorState(__GLcontext *gc)
{
int i;
__GLevaluatorMachine *evals = &gc->eval;
for (i = 0; i < __GL_MAP_RANGE_COUNT; i++) {
if (evals->eval1Data[i]) {
GCFREE(gc, evals->eval1Data[i]);
evals->eval1Data[i] = 0;
}
if (evals->eval2Data[i]) {
GCFREE(gc, evals->eval2Data[i]);
evals->eval2Data[i] = 0;
}
}
}