pack_swap_map.c revision a0d1e40cc56a54314af0a1a4b5e13905ffd78393
637712559132d2b3617aea0103fb0385978da14evboxsync/* Copyright (c) 2001, Stanford University
637712559132d2b3617aea0103fb0385978da14evboxsync * All rights reserved
4efd24e631e5312d1fb78ae7ccaf9de912ff0e9fvboxsync *
637712559132d2b3617aea0103fb0385978da14evboxsync * See the file LICENSE.txt for information on redistributing this software.
637712559132d2b3617aea0103fb0385978da14evboxsync */
637712559132d2b3617aea0103fb0385978da14evboxsync
637712559132d2b3617aea0103fb0385978da14evboxsync#include "packer.h"
637712559132d2b3617aea0103fb0385978da14evboxsync#include "cr_opcodes.h"
637712559132d2b3617aea0103fb0385978da14evboxsync#include "cr_error.h"
637712559132d2b3617aea0103fb0385978da14evboxsync
637712559132d2b3617aea0103fb0385978da14evboxsync
637712559132d2b3617aea0103fb0385978da14evboxsync/* Note -- for these packets, the ustride and vstride are implicit,
637712559132d2b3617aea0103fb0385978da14evboxsync * and are computed into the packet instead of copied.
637712559132d2b3617aea0103fb0385978da14evboxsync */
637712559132d2b3617aea0103fb0385978da14evboxsync
637712559132d2b3617aea0103fb0385978da14evboxsyncstatic int __gl_Map2NumComponents( GLenum target )
637712559132d2b3617aea0103fb0385978da14evboxsync{
637712559132d2b3617aea0103fb0385978da14evboxsync switch( target )
637712559132d2b3617aea0103fb0385978da14evboxsync {
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_VERTEX_3:
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_NORMAL:
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_TEXTURE_COORD_3:
637712559132d2b3617aea0103fb0385978da14evboxsync return 3;
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_VERTEX_4:
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_COLOR_4:
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_TEXTURE_COORD_4:
637712559132d2b3617aea0103fb0385978da14evboxsync return 4;
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_INDEX:
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_TEXTURE_COORD_1:
637712559132d2b3617aea0103fb0385978da14evboxsync return 1;
637712559132d2b3617aea0103fb0385978da14evboxsync case GL_MAP2_TEXTURE_COORD_2:
637712559132d2b3617aea0103fb0385978da14evboxsync return 2;
637712559132d2b3617aea0103fb0385978da14evboxsync default:
637712559132d2b3617aea0103fb0385978da14evboxsync return -1;
637712559132d2b3617aea0103fb0385978da14evboxsync }
637712559132d2b3617aea0103fb0385978da14evboxsync}
637712559132d2b3617aea0103fb0385978da14evboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsyncstatic int __gl_Map1NumComponents( GLenum target )
637712559132d2b3617aea0103fb0385978da14evboxsync{
637712559132d2b3617aea0103fb0385978da14evboxsync switch( target )
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_VERTEX_3:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_NORMAL:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_TEXTURE_COORD_3:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return 3;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_VERTEX_4:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_COLOR_4:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_TEXTURE_COORD_4:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return 4;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_INDEX:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_TEXTURE_COORD_1:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return 1;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync case GL_MAP1_TEXTURE_COORD_2:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return 2;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync default:
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return -1;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync}
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsyncvoid PACK_APIENTRY crPackMap2dSWAP(GLenum target, GLdouble u1,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLint vstride, GLint vorder, const GLdouble *points)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync{
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync unsigned char *data_ptr;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int u,v;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int comp;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLdouble *dest_data, *src_data;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int packet_length =
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( target ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u1 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u2 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( uorder ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( ustride ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( v1 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( v2 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( vorder ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( vstride );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int num_components = __gl_Map2NumComponents( target );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync if (num_components < 0)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync "crPackMap2d(bad target)" );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return;
637712559132d2b3617aea0103fb0385978da14evboxsync }
637712559132d2b3617aea0103fb0385978da14evboxsync
637712559132d2b3617aea0103fb0385978da14evboxsync packet_length += num_components*uorder*vorder*sizeof( *points );
637712559132d2b3617aea0103fb0385978da14evboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 0, GLenum, SWAP32(target) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 4, u1 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 12, u2 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 20, GLint, SWAP32(num_components) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 24, GLint, SWAP32(uorder) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 28, v1 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 36, v2 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 44, GLint, SWAP32(num_components*uorder) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 48, GLint, SWAP32(vorder) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data = (GLdouble *) (data_ptr + 52);
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data = (GLdouble *) points;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (v = 0 ; v < vorder ; v++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (u = 0 ; u < uorder ; u++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (comp = 0 ; comp < num_components ; comp++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( ((unsigned char *) dest_data + comp*sizeof(*points)) - data_ptr, *(src_data + comp) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data += num_components;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += ustride;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += vstride - ustride*uorder;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync }
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync crHugePacket( CR_MAP2D_OPCODE, data_ptr );
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync crPackFree( data_ptr );
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync}
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsyncvoid PACK_APIENTRY crPackMap2fSWAP(GLenum target, GLfloat u1,
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2,
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync GLint vstride, GLint vorder, const GLfloat *points)
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync{
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync unsigned char *data_ptr;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync int u,v;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync int comp;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync GLfloat *dest_data, *src_data;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync int packet_length =
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( target ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( u1 ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( u2 ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( uorder ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( ustride ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( v1 ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( v2 ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( vorder ) +
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync sizeof( vstride );
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync int num_components = __gl_Map2NumComponents( target );
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync if (num_components < 0)
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync {
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync "crPackMap2f(bad target)" );
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync return;
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync }
d142cd5e90598dd8d14744cb6bb7dd467cec446cvboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync packet_length += num_components*uorder*vorder*sizeof( *points );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 0, GLenum, SWAP32(target) );
637712559132d2b3617aea0103fb0385978da14evboxsync WRITE_DATA( 4, GLuint, SWAPFLOAT(u1) );
637712559132d2b3617aea0103fb0385978da14evboxsync WRITE_DATA( 8, GLuint, SWAPFLOAT(u2) );
637712559132d2b3617aea0103fb0385978da14evboxsync WRITE_DATA( 12, GLint, SWAP32(num_components) );
637712559132d2b3617aea0103fb0385978da14evboxsync WRITE_DATA( 16, GLint, SWAP32(uorder) );
637712559132d2b3617aea0103fb0385978da14evboxsync WRITE_DATA( 20, GLuint, SWAPFLOAT(v1) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 24, GLuint, SWAPFLOAT(v2) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 28, GLint, SWAP32(num_components*uorder) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 32, GLint, SWAP32(vorder) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data = (GLfloat *) (data_ptr + 36);
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data = (GLfloat *) points;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (v = 0 ; v < vorder ; v++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (u = 0 ; u < uorder ; u++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (comp = 0 ; comp < num_components ; comp++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( (unsigned char *) dest_data + comp*sizeof(*points) - data_ptr, GLuint, SWAPFLOAT( *(src_data + comp) ) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data += num_components;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += ustride;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += vstride - ustride*uorder;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crHugePacket( CR_MAP2F_OPCODE, data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crPackFree( data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync}
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
637712559132d2b3617aea0103fb0385978da14evboxsyncvoid PACK_APIENTRY crPackMap1dSWAP( GLenum target, GLdouble u1,
637712559132d2b3617aea0103fb0385978da14evboxsync GLdouble u2, GLint stride, GLint order, const GLdouble *points )
637712559132d2b3617aea0103fb0385978da14evboxsync{
637712559132d2b3617aea0103fb0385978da14evboxsync unsigned char *data_ptr;
637712559132d2b3617aea0103fb0385978da14evboxsync int packet_length =
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( target ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u1 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u2 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( stride ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( order );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int num_components = __gl_Map1NumComponents( target );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLdouble *src_data, *dest_data;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int u;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int comp;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync if (num_components < 0)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync "crPackMap1d(bad target)" );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync packet_length += num_components * order * sizeof( *points );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 0, GLenum, SWAP32(target) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 4, u1 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( 12, u2 );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 20, GLint, SWAP32(num_components) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 24, GLint, SWAP32(order) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data = (GLdouble *) (data_ptr + 28);
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data = (GLdouble *) points;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (u = 0 ; u < order ; u++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (comp = 0 ; comp < num_components ; comp++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_SWAPPED_DOUBLE( (unsigned char *) dest_data + comp*sizeof(*points) - data_ptr, *(src_data + comp) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data += num_components;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += stride;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crHugePacket( CR_MAP1D_OPCODE, data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crPackFree( data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync}
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsyncvoid PACK_APIENTRY crPackMap1fSWAP( GLenum target, GLfloat u1,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLfloat u2, GLint stride, GLint order, const GLfloat *points )
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync{
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync unsigned char *data_ptr;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int packet_length =
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( target ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u1 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( u2 ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( stride ) +
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync sizeof( order );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int num_components = __gl_Map1NumComponents( target );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync GLfloat *src_data, *dest_data;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int u;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync int comp;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync if (num_components < 0)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync "crPackMap1f(bad target)" );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync return;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync packet_length += num_components * order * sizeof( *points );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync data_ptr = (unsigned char *) crPackAlloc( packet_length );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 0, GLenum, SWAP32(target) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 4, GLuint, SWAPFLOAT(u1) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 8, GLuint, SWAPFLOAT(u2) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 12, GLint, SWAP32(num_components) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( 16, GLint, SWAP32(order) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data = (GLfloat *) (data_ptr + 20);
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data = (GLfloat *) points;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (u = 0 ; u < order ; u++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync for (comp = 0 ; comp < num_components ; comp++)
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync {
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync WRITE_DATA( (unsigned char *) dest_data + comp*sizeof(*points) - data_ptr, GLuint, SWAPFLOAT( *(src_data + comp) ) );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync dest_data += num_components;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync src_data += stride;
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync }
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crHugePacket( CR_MAP1F_OPCODE, data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync crPackFree( data_ptr );
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync}
b41f65ee355ae1d4b24473c6d6d70c653497429avboxsync