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
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic unsigned char * __gl_HandlePixelMapData( GLenum map, GLsizei mapsize, int size_of_value, const GLvoid *values )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int i;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync int packet_length =
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( map ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync sizeof( mapsize ) +
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync mapsize*size_of_value;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr = (unsigned char *) crPackAlloc( packet_length );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 0, GLenum, SWAP32(map) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 4, GLsizei, SWAP32(mapsize) );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync for (i = 0 ; i < mapsize ; i++)
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync switch( size_of_value )
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync {
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case 2:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 8 + i*sizeof(GLshort), GLshort, SWAP16(*((GLshort *)values + i) ));
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync break;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync case 4:
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync WRITE_DATA( 8 + i*sizeof(GLint), GLint, SWAP32(*((GLint *)values + i) ));
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync break;
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync }
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync return data_ptr;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackPixelMapfvSWAP(GLenum map, GLsizei mapsize,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync const GLfloat *values )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_PIXELMAPFV_OPCODE, data_ptr );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackPixelMapuivSWAP(GLenum map, GLsizei mapsize,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync const GLuint *values )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_PIXELMAPUIV_OPCODE, data_ptr );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackPixelMapusvSWAP(GLenum map, GLsizei mapsize,
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync const GLushort *values )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crHugePacket( CR_PIXELMAPUSV_OPCODE, data_ptr );
a0d1e40cc56a54314af0a1a4b5e13905ffd78393vboxsync crPackFree( data_ptr );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}