e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * The majority of this file is pulled from Mesa 4.0.x with the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * permission of Brian Paul
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <stdio.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_mem.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state_internals.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* free the 1-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfree_1d_map(CRContext *ctx, GLenum map)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &ctx->eval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLint k = map - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crFree( e->eval1D[k].coeff );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* free the 2-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfree_2d_map(CRContext *ctx, GLenum map)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &ctx->eval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLint k = map - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crFree( e->eval2D[k].coeff );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Initialize a 1-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncinit_1d_map(CRContext *ctx, GLenum map, int n, const float *initial)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &ctx->eval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLint k = map - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT(k >= 0);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT(k < GLEVAL_TOT);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].u1 = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].u2 = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].du = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].order = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].coeff = (GLfloat *) crAlloc(n * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < n; i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].coeff[i] = initial[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->eval1D[i], ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Initialize a 2-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncinit_2d_map(CRContext *ctx, GLenum map, int n, const float *initial)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &ctx->eval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLint k = map - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT(k >= 0);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT(k < GLEVAL_TOT);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].u1 = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].u2 = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].du = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].v1 = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].v2 = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].dv = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].uorder = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].vorder = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].coeff = (GLfloat *) crAlloc(n * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < n; i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].coeff[i] = initial[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->eval2D[i], ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorDestroy(CRContext *ctx)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_VERTEX_3);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_VERTEX_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_INDEX);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_COLOR_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_NORMAL);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_TEXTURE_COORD_1);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_TEXTURE_COORD_2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_TEXTURE_COORD_3);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_1d_map(ctx, GL_MAP1_TEXTURE_COORD_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_VERTEX_3);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_VERTEX_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_INDEX);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_COLOR_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_NORMAL);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_TEXTURE_COORD_1);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_TEXTURE_COORD_2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_TEXTURE_COORD_3);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync free_2d_map(ctx, GL_MAP2_TEXTURE_COORD_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorInit(CRContext *ctx)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &ctx->eval;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat vertex[4] = { 0.0, 0.0, 0.0, 1.0 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat normal[3] = { 0.0, 0.0, 1.0 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat index[1] = { 1.0 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat color[4] = { 1.0, 1.0, 1.0, 1.0 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat texcoord[4] = { 0.0, 0.0, 0.0, 1.0 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->autoNormal = GL_FALSE;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->enable, ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_VERTEX_3, 3, vertex);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_VERTEX_4, 4, vertex);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_INDEX, 1, index);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_COLOR_4, 4, color);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_NORMAL, 3, normal);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_TEXTURE_COORD_1, 1, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_TEXTURE_COORD_2, 2, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_TEXTURE_COORD_3, 3, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_1d_map(ctx, GL_MAP1_TEXTURE_COORD_4, 4, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_VERTEX_3, 3, vertex);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_VERTEX_4, 4, vertex);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_INDEX, 1, index);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_COLOR_4, 4, color);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_NORMAL, 3, normal);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_TEXTURE_COORD_1, 1, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_TEXTURE_COORD_2, 2, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_TEXTURE_COORD_3, 3, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync init_2d_map(ctx, GL_MAP2_TEXTURE_COORD_4, 4, texcoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->un1D = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u11D = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u21D = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->grid1D, ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->un2D = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->vn2D = 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u12D = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u22D = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->v12D = 0.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->v22D = 1.0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->grid1D, ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync RESET(eb->dirty, ctx->bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncconst int gleval_sizes[] = { 4, 1, 3, 1, 2, 3, 4, 3, 4 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*** Copy and deallocate control points ***/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Copy 1-parametric evaluator control points from user-specified
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * memory space to a buffer of contiguous control points.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Input: see glMap1f for details
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Return: pointer to buffer of contiguous control points or NULL if out
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * of memory.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic GLfloat *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync_copy_map_points1f(GLint size, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLfloat * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *buffer, *p;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, k;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!points || size == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return NULL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer = (GLfloat *) crAlloc(uorder * size * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (buffer)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += ustride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *p++ = points[k];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return buffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Same as above but convert doubles to floats.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic GLfloat *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync_copy_map_points1d(GLint size, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLdouble * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *buffer, *p;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, k;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!points || size == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return NULL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer = (GLfloat *) crAlloc(uorder * size * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (buffer)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += ustride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *p++ = (GLfloat) points[k];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return buffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Copy 2-parametric evaluator control points from user-specified
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * memory space to a buffer of contiguous control points.
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync * Additional memory is allocated to be used by the Horner and
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * de Casteljau evaluation schemes.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Input: see glMap2f for details
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Return: pointer to buffer of contiguous control points or NULL if out
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * of memory.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic GLfloat *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync_copy_map_points2f(GLint size,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLfloat * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *buffer, *p;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, j, k, dsize, hsize;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint uinc;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!points || size == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return NULL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* max(uorder, vorder) additional points are used in */
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync /* Horner evaluation and uorder*vorder additional */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values are needed for de Casteljau */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync dsize = (uorder == 2 && vorder == 2) ? 0 : uorder * vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync hsize = (uorder > vorder ? uorder : vorder) * size;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (hsize > dsize)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer =
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + hsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer =
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + dsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* compute the increment value for the u-loop */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync uinc = ustride - vorder * vstride;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (buffer)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += uinc)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < vorder; j++, points += vstride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *p++ = points[k];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return buffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Same as above but convert doubles to floats.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic GLfloat *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync_copy_map_points2d(GLint size,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLdouble * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *buffer, *p;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, j, k, hsize, dsize;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint uinc;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!points || size == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return NULL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* max(uorder, vorder) additional points are used in */
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync /* Horner evaluation and uorder*vorder additional */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* values are needed for de Casteljau */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync dsize = (uorder == 2 && vorder == 2) ? 0 : uorder * vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync hsize = (uorder > vorder ? uorder : vorder) * size;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (hsize > dsize)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer =
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + hsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer =
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + dsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* compute the increment value for the u-loop */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync uinc = ustride - vorder * vstride;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (buffer)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += uinc)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < vorder; j++, points += vstride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *p++ = (GLfloat) points[k];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return buffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*** API entry points ***/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * This does the work of glMap1[fd].
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncmap1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint uorder, const GLvoid * points, GLenum type)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRTextureState *t = &(g->texture);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint k;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *pnts;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRASSERT(type == GL_FLOAT || type == GL_DOUBLE);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (u1 == u2) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(u1==u2)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (uorder < 1 || uorder > MAX_EVAL_ORDER) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(bad uorder)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!points) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "glMap1d(null points)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync k = gleval_sizes[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (k == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap1d(k=0)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (ustride < k) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(bad ustride");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (t->curTextureUnit != 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* See OpenGL 1.2.1 spec, section F.2.13 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "glMap1d(current texture unit must be zero)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (target) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_VERTEX_3:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_VERTEX_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_INDEX:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_COLOR_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_NORMAL:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_TEXTURE_COORD_1:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_TEXTURE_COORD_2:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_TEXTURE_COORD_3:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP1_TEXTURE_COORD_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap1d(bad target)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* make copy of the control points */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (type == GL_FLOAT)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points1f(k, ustride, uorder, (GLfloat *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points1d(k, ustride, uorder, (GLdouble *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[i].order = uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[i].u1 = u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[i].u2 = u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[i].du = 1.0f / (u2 - u1);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (e->eval1D[i].coeff)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crFree(e->eval1D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[i].coeff = pnts;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->dirty, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->eval1D[i], g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap1f(GLenum target, GLfloat u1, GLfloat u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint stride, GLint order, const GLfloat * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map1(target, u1, u2, stride, order, points, GL_FLOAT);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint order, const GLdouble * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map1(target, (GLfloat) u1, (GLfloat) u2, stride, order, points, GL_DOUBLE);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic void
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncmap2(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync const GLvoid * points, GLenum type)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRTextureState *t = &(g->texture);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint k;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *pnts;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (u1 == u2) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (v1 == v2) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (uorder < 1 || uorder > MAX_EVAL_ORDER) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (vorder < 1 || vorder > MAX_EVAL_ORDER) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->extensions.NV_vertex_program) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* XXX FIXME */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync } else {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync k = gleval_sizes[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (k == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (ustride < k) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (vstride < k) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#if 00
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Disable this check for now - it looks like various OpenGL drivers
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * don't do this error check. So, a bunch of the NVIDIA demos
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * generate errors/warnings.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (t->curTextureUnit != 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* See OpenGL 1.2.1 spec, section F.2.13 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (target) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_VERTEX_3:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_VERTEX_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_INDEX:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_COLOR_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_NORMAL:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_TEXTURE_COORD_1:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_TEXTURE_COORD_2:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_TEXTURE_COORD_3:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_MAP2_TEXTURE_COORD_4:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* make copy of the control points */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (type == GL_FLOAT)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points2f(k, ustride, uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vstride, vorder, (GLfloat *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points2d(k, ustride, uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vstride, vorder, (GLdouble *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].uorder = uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].u1 = u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].u2 = u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].du = 1.0f / (u2 - u1);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].vorder = vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].v1 = v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].v2 = v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].dv = 1.0f / (v2 - v1);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (e->eval2D[i].coeff)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crFree(e->eval2D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[i].coeff = pnts;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->dirty, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->eval2D[i], g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap2f(GLenum target, GLfloat u1, GLfloat u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat v1, GLfloat v2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLfloat * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync points, GL_FLOAT);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap2d(GLenum target, GLdouble u1, GLdouble u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLdouble v1, GLdouble v2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLdouble * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map2(target, (GLfloat) u1, (GLfloat) u2, ustride, uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat) v1, (GLfloat) v2, vstride, vorder, points, GL_DOUBLE);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapdv(GLenum target, GLenum query, GLdouble * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint size;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, j;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (void) sb;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapdv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = e->eval2D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLdouble) e->eval2D[i].uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLdouble) e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = e->eval2D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = e->eval2D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[2] = e->eval2D[i].v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[3] = e->eval2D[i].v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapdv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = e->eval1D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *v = (GLdouble) e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = e->eval1D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = e->eval1D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapdv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapfv(GLenum target, GLenum query, GLfloat * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint size;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, j;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (void) sb;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapfv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = (GLfloat) e->eval2D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLfloat) e->eval2D[i].uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLfloat) e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLfloat) e->eval2D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLfloat) e->eval2D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[2] = (GLfloat) e->eval2D[i].v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[3] = (GLfloat) e->eval2D[i].v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapfv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = (GLfloat) e->eval1D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *v = (GLfloat) e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLfloat) e->eval1D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLfloat) e->eval1D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapfv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapiv(GLenum target, GLenum query, GLint * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint size;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint i, j;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (void) sb;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP1_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync i = target - GL_MAP2_COLOR_4;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapiv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = (GLint) e->eval2D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = e->eval2D[i].uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLint) e->eval2D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLint) e->eval2D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[2] = (GLint) e->eval2D[i].v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[3] = (GLint) e->eval2D[i].v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapiv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync switch (query) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_COEFF:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[j] = (GLint) e->eval1D[i].coeff[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_ORDER:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *v = e->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync case GL_DOMAIN:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[0] = (GLint) e->eval1D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync v[1] = (GLint) e->eval1D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync break;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync default:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "GetMapiv: invalid target: %d", target);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (un < 1) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid1f(bad un)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->un1D = un;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u11D = u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u21D = u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->dirty, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->grid1D, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateMapGrid1f(un, (GLfloat) u1, (GLfloat) u2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid2f(GLint un, GLfloat u1, GLfloat u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vn, GLfloat v1, GLfloat v2)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *g = GetCurrentContext();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRStateBits *sb = GetCurrentBits();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *e = &(g->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorBits *eb = &(sb->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (g->current.inBeginEnd) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FLUSH();
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (un < 1) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid2f(bad un)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (vn < 1) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid2f(bad vn)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->un2D = un;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->vn2D = vn;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u12D = u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->u22D = u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->v12D = v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->v22D = v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->dirty, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync DIRTY(eb->grid2D, g->neg_bitid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid STATE_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid2d(GLint un, GLdouble u1, GLdouble u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vn, GLdouble v1, GLdouble v2)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateMapGrid2f(un, (GLfloat) u1, (GLfloat) u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vn, (GLfloat) v1, (GLfloat) v2);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorSwitch(CREvaluatorBits *e, CRbitvalue * bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *from = &(fromCtx->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *to = &(toCtx->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int i, j;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue nbitID[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < CR_MAX_BITARRAY; j++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync nbitID[j] = ~bitID[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->enable, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->autoNormal != to->autoNormal) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glAble able[2];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[0] = diff_api.Disable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[1] = diff_api.Enable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[to->autoNormal] (GL_AUTO_NORMAL);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->enable);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->dirty);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->enable, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->eval1D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval1D[i].order * gleval_sizes[i] *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync sizeof(*from->eval1D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval1D[i].order != to->eval1D[i].order ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u1 != from->eval1D[i].u1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u2 != from->eval1D[i].u2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcmp((const void *) from->eval1D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval1D[i].coeff, size)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.Map1f(i + GL_MAP1_COLOR_4, to->eval1D[i].u1,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval1D[i].u2, gleval_sizes[i], to->eval1D[i].order,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval1D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->dirty);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->eval1D[i]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->eval1D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->eval2D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval2D[i].uorder * from->eval2D[i].vorder *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i] * sizeof(*from->eval2D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval2D[i].uorder != to->eval2D[i].uorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].vorder != to->eval2D[i].vorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u1 != from->eval2D[i].u1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u2 != from->eval2D[i].u2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v1 != from->eval2D[i].v1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v2 != from->eval2D[i].v2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcmp((const void *) from->eval2D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval2D[i].coeff, size)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.Map2f(i + GL_MAP2_COLOR_4,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].u1, to->eval2D[i].u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i], to->eval2D[i].uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].v1, to->eval2D[i].v2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i], to->eval2D[i].vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->dirty);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->eval2D[i]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->eval2D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->grid1D, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->u11D != to->u11D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u21D != to->u21D || from->un1D != to->un1D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.MapGrid1d(to->un1D, to->u11D, to->u21D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->dirty);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->grid1D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->grid1D, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->grid2D, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->u12D != to->u12D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u22D != to->u22D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->un2D != to->un2D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v12D != to->v12D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v22D != to->v22D || from->vn2D != to->vn2D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.MapGrid2d(to->un2D, to->u12D, to->u22D,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->vn2D, to->v12D, to->v22D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->dirty);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync FILLDIRTY(e->grid1D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->grid1D, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->dirty, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorDiff(CREvaluatorBits *e, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *from = &(fromCtx->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluatorState *to = &(toCtx->eval);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync glAble able[2];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int i, j;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue nbitID[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < CR_MAX_BITARRAY; j++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync nbitID[j] = ~bitID[j];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[0] = diff_api.Disable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[1] = diff_api.Enable;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->enable, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->autoNormal != to->autoNormal) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[to->autoNormal] (GL_AUTO_NORMAL);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->autoNormal = to->autoNormal;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->enable, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->enable1D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->enable1D[i] != to->enable1D[i]) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[to->enable1D[i]] (i + GL_MAP1_COLOR_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->enable1D[i] = to->enable1D[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->enable1D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (to->enable1D[i] && CHECKDIRTY(e->eval1D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval1D[i].order * gleval_sizes[i] *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync sizeof(*from->eval1D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval1D[i].order != to->eval1D[i].order ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u1 != from->eval1D[i].u1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u2 != from->eval1D[i].u2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcmp((const void *) from->eval1D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval1D[i].coeff, size)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.Map1f(i + GL_MAP1_COLOR_4, to->eval1D[i].u1,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval1D[i].u2, gleval_sizes[i], to->eval1D[i].order,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval1D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].order = to->eval1D[i].order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u1 = from->eval1D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval1D[i].u2 = from->eval1D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcpy((void *) from->eval1D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval1D[i].coeff, size);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->eval1D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->enable2D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->enable2D[i] != to->enable2D[i]) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync able[to->enable2D[i]] (i + GL_MAP2_COLOR_4);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->enable2D[i] = to->enable2D[i];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->enable2D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (to->enable2D[i] && CHECKDIRTY(e->eval2D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval2D[i].uorder * from->eval2D[i].vorder *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i] * sizeof(*from->eval2D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval2D[i].uorder != to->eval2D[i].uorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].vorder != to->eval2D[i].vorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u1 != from->eval2D[i].u1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u2 != from->eval2D[i].u2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v1 != from->eval2D[i].v1 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v2 != from->eval2D[i].v2 ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcmp((const void *) from->eval2D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval2D[i].coeff, size)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.Map2f(i + GL_MAP2_COLOR_4,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].u1, to->eval2D[i].u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i], to->eval2D[i].uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].v1, to->eval2D[i].v2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync gleval_sizes[i], to->eval2D[i].vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->eval2D[i].coeff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].uorder = to->eval2D[i].uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].vorder = to->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u1 = from->eval2D[i].u1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].u2 = from->eval2D[i].u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v1 = from->eval2D[i].v1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->eval2D[i].v2 = from->eval2D[i].v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crMemcpy((void *) from->eval2D[i].coeff,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (const void *) to->eval2D[i].coeff, size);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->eval2D[i], nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->grid1D, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->u11D != to->u11D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u21D != to->u21D || from->un1D != to->un1D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.MapGrid1d(to->un1D, to->u11D, to->u21D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u11D = to->u11D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u21D = to->u21D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->un1D = to->un1D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->grid1D, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (CHECKDIRTY(e->grid2D, bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->u12D != to->u12D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u22D != to->u22D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->un2D != to->un2D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v12D != to->v12D ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v22D != to->v22D || from->vn2D != to->vn2D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync diff_api.MapGrid2d(to->un2D, to->u12D, to->u22D,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync to->vn2D, to->v12D, to->v22D);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u12D = to->u12D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u22D = to->u22D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->un2D = to->un2D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v12D = to->v12D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v22D = to->v22D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->vn2D = to->vn2D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->grid1D, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CLEARDIRTY(e->dirty, nbitID);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}