e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * The majority of this file is pulled from Mesa 4.0.x with the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * permission of Brian Paul
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* free the 1-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* free the 2-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Initialize a 1-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncinit_1d_map(CRContext *ctx, GLenum map, int n, const float *initial)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval1D[k].coeff = (GLfloat *) crAlloc(n * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < n; i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Initialize a 2-D evaluator map */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncinit_2d_map(CRContext *ctx, GLenum map, int n, const float *initial)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync e->eval2D[k].coeff = (GLfloat *) crAlloc(n * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < n; i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync static GLfloat texcoord[4] = { 0.0, 0.0, 0.0, 1.0 };
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 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);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncconst int gleval_sizes[] = { 4, 1, 3, 1, 2, 3, 4, 3, 4 };
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*** Copy and deallocate control points ***/
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_copy_map_points1f(GLint size, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer = (GLfloat *) crAlloc(uorder * size * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += ustride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Same as above but convert doubles to floats.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync_copy_map_points1d(GLint size, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync buffer = (GLfloat *) crAlloc(uorder * size * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += ustride)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
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 * Input: see glMap2f for details
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Return: pointer to buffer of contiguous control points or NULL if out
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * of memory.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLfloat * points)
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 (GLfloat *) crAlloc((uorder * vorder * size + hsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + dsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* compute the increment value for the u-loop */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += uinc)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Same as above but convert doubles to floats.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLdouble * points)
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 (GLfloat *) crAlloc((uorder * vorder * size + hsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat *) crAlloc((uorder * vorder * size + dsize) * sizeof(GLfloat));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* compute the increment value for the u-loop */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0, p = buffer; i < uorder; i++, points += uinc)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (k = 0; k < size; k++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*** API entry points ***/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/**********************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * This does the work of glMap1[fd].
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncmap1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(u1==u2)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(bad uorder)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "glMap1d(null points)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (k == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap1d(k=0)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap1d(bad ustride");
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 crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap1d(bad target)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* make copy of the control points */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points1f(k, ustride, uorder, (GLfloat *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pnts = _copy_map_points1d(k, ustride, uorder, (GLdouble *) points);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map1(target, u1, u2, stride, order, points, GL_FLOAT);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map1(target, (GLfloat) u1, (GLfloat) u2, stride, order, points, GL_DOUBLE);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncmap2(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* XXX FIXME */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (k == 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMap2d()");
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 if (t->curTextureUnit != 0) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* See OpenGL 1.2.1 spec, section F.2.13 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMap2d()");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* make copy of the control points */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLfloat * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMap2d(GLenum target, GLdouble u1, GLdouble u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vstride, GLint vorder, const GLdouble * points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync map2(target, (GLfloat) u1, (GLfloat) u2, ustride, uorder,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync (GLfloat) v1, (GLfloat) v2, vstride, vorder, points, GL_DOUBLE);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapdv(GLenum target, GLenum query, GLdouble * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapfv(GLenum target, GLenum query, GLfloat * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateGetMapiv(GLenum target, GLenum query, GLint * v)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (i < 0 || i >= GLEVAL_TOT) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync size = gleval_sizes[i] * e->eval2D[i].uorder * e->eval2D[i].vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < size; j++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid1f(bad un)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Map1d called in begin/end");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid2f(bad un)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glMapGrid2f(bad vn)");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateMapGrid2d(GLint un, GLdouble u1, GLdouble u2,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorSwitch(CREvaluatorBits *e, CRbitvalue * bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < CR_MAX_BITARRAY; j++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval1D[i].order * gleval_sizes[i] *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval1D[i].order != to->eval1D[i].order ||
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 for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval2D[i].uorder * from->eval2D[i].vorder *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval2D[i].uorder != to->eval2D[i].uorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u21D != to->u21D || from->un1D != to->un1D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->v22D != to->v22D || from->vn2D != to->vn2D) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrStateEvaluatorDiff(CREvaluatorBits *e, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (j = 0; j < CR_MAX_BITARRAY; j++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (to->enable1D[i] && CHECKDIRTY(e->eval1D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval1D[i].order * gleval_sizes[i] *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval1D[i].order != to->eval1D[i].order ||
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 for (i = 0; i < GLEVAL_TOT; i++) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (to->enable2D[i] && CHECKDIRTY(e->eval2D[i], bitID)) {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int size = from->eval2D[i].uorder * from->eval2D[i].vorder *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (from->eval2D[i].uorder != to->eval2D[i].uorder ||
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync from->u21D != to->u21D || from->un1D != to->un1D) {