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#include "packer.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_opcodes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_error.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_mem.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Note -- for these packets, the ustride and vstride are implicit,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * and are computed into the packet instead of copied.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic int __gl_Map2NumComponents( GLenum target )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync switch( target )
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_3:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_NORMAL:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_TEXTURE_COORD_3:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 3;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_COLOR_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_TEXTURE_COORD_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB0_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB1_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB2_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB3_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB4_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB5_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB6_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB7_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB8_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB9_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB10_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB11_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB12_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB13_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB14_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_ATTRIB15_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB0_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB1_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB2_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB3_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB4_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB5_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB6_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB7_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB8_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB9_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB10_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB11_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB12_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB13_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB14_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_VERTEX_ATTRIB15_4_NV:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 4;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_INDEX:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_TEXTURE_COORD_1:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP2_TEXTURE_COORD_2:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 2;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync default:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return -1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic int __gl_Map1NumComponents( GLenum target )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync switch( target )
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_3:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_NORMAL:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_TEXTURE_COORD_3:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 3;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_VERTEX_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_COLOR_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_TEXTURE_COORD_4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 4;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_INDEX:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_TEXTURE_COORD_1:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case GL_MAP1_TEXTURE_COORD_2:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return 2;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync default:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return -1;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackMap2d(GLenum target, GLdouble u1,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLint vstride, GLint vorder, const GLdouble *points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int u,v;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLdouble *dest_data, *src_data;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int packet_length =
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( target ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( uorder ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( ustride ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( v1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( v2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( vorder ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( vstride );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int num_components = __gl_Map2NumComponents( target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (num_components < 0)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync "crPackMap2d(bad target)" );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync packet_length += num_components*uorder*vorder*sizeof( *points );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 4, u1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 12, u2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 20, GLint, num_components );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 24, GLint, uorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 28, v1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 36, v2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 44, GLint, num_components*uorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 48, GLint, vorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data = (GLdouble *) (data_ptr + 52);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data = (GLdouble *) points;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (v = 0 ; v < vorder ; v++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (u = 0 ; u < uorder ; u++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data += num_components;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += ustride;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += vstride - ustride*uorder;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_MAP2D_OPCODE, data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackMap2f(GLenum target, GLfloat u1,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLint vstride, GLint vorder, const GLfloat *points)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int u,v;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLfloat *dest_data, *src_data;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int packet_length =
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( target ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( uorder ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( ustride ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( v1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( v2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( vorder ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( vstride );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int num_components = __gl_Map2NumComponents( target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (num_components < 0)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync "crPackMap2f(bad target)" );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync packet_length += num_components*uorder*vorder*sizeof( *points );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 4, GLfloat, u1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 8, GLfloat, u2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 12, GLint, num_components );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 16, GLint, uorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 20, GLfloat, v1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 24, GLfloat, v2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 28, GLint, num_components*uorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 32, GLint, vorder );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data = (GLfloat *) (data_ptr + 36);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data = (GLfloat *) points;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (v = 0 ; v < vorder ; v++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (u = 0 ; u < uorder ; u++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data += num_components;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += ustride;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += vstride - ustride*uorder;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_MAP2F_OPCODE, data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackMap1d( GLenum target, GLdouble u1,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLdouble u2, GLint stride, GLint order, const GLdouble *points )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int packet_length =
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( target ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( stride ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( order );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int num_components = __gl_Map1NumComponents( target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLdouble *src_data, *dest_data;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int u;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (num_components < 0)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync "crPackMap1d(bad target)" );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync packet_length += num_components * order * sizeof( *points );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 4, u1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DOUBLE( 12, u2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 20, GLint, num_components );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 24, GLint, order );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data = (GLdouble *) (data_ptr + 28);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data = (GLdouble *) points;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (u = 0 ; u < order ; u++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data += num_components;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += stride;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_MAP1D_OPCODE, data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackMap1f( GLenum target, GLfloat u1,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLfloat u2, GLint stride, GLint order, const GLfloat *points )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int packet_length =
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( target ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u1 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( u2 ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( stride ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( order );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int num_components = __gl_Map1NumComponents( target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync GLfloat *src_data, *dest_data;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int u;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync if (num_components < 0)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync "crPackMap1f(bad target)" );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync packet_length += num_components * order * sizeof( *points );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, target );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 4, GLfloat, u1 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 8, GLfloat, u2 );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 12, GLint, num_components );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 16, GLint, order );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data = (GLfloat *) (data_ptr + 20);
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data = (GLfloat *) points;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (u = 0 ; u < order ; u++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync dest_data += num_components;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync src_data += stride;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_MAP1F_OPCODE, data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}