pack_bufferobject.c revision e0e0c19eefceaf5d4ec40f9466b58a771f50e799
df717630fe580e7c753ac381f197e901885985b9tavmjong-free/* Copyright (c) 2001, Stanford University
df717630fe580e7c753ac381f197e901885985b9tavmjong-free * All rights reserved
df717630fe580e7c753ac381f197e901885985b9tavmjong-free *
6e221ae4f7dae2427891d51efd15b9ed89ae4cccMartin Owens * See the file LICENSE.txt for information on redistributing this software.
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico */
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico#include "packer.h"
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico#include "cr_error.h"
2041edc9e0c8a75ae1ee22aec3d0fb66e1cc16a1Martin Owens#include "cr_string.h"
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico#include "cr_version.h"
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico
53eed655608a45ab528115d4225ad6e8e2c5641csuv-lpvoid PACK_APIENTRY
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNicocrPackMapBufferARB( GLenum target, GLenum access,
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico void * return_value, int * writeback )
03919b7845e461f72fa5d954b8124d27481c46b0JazzyNico{
df717630fe580e7c753ac381f197e901885985b9tavmjong-free (void)writeback;
(void)return_value;
(void)target;
(void)access;
crWarning("Can't pack MapBufferARB command!");
}
void PACK_APIENTRY
crPackUnmapBufferARB( GLenum target, GLboolean* return_value, int * writeback )
{
(void)target;
(void)return_value;
(void)writeback;
crWarning("Can't pack UnmapBufferARB command!");
}
void PACK_APIENTRY
crPackBufferDataARB( GLenum target, GLsizeiptrARB size,
const GLvoid * data, GLenum usage )
{
unsigned char *data_ptr;
int packet_length;
packet_length = sizeof(GLenum)
+ sizeof(target) + sizeof(size) + sizeof(usage) + size;
data_ptr = (unsigned char *) crPackAlloc( packet_length );
WRITE_DATA( 0, GLenum, CR_BUFFERDATAARB_EXTEND_OPCODE );
WRITE_DATA( 4, GLenum, target );
WRITE_DATA( 8, GLsizeiptrARB, size ); /* XXX or 8 bytes? */
WRITE_DATA( 12, GLenum, usage );
if (data)
crMemcpy( data_ptr + 16, data, size );
crHugePacket( CR_EXTEND_OPCODE, data_ptr );
crPackFree( data_ptr );
}
void PACK_APIENTRY
crPackBufferSubDataARB( GLenum target, GLintptrARB offset, GLsizeiptrARB size,
const GLvoid * data )
{
unsigned char *data_ptr;
int packet_length;
if (!data)
return;
packet_length = sizeof(GLenum)
+ sizeof(target) + sizeof(offset) + sizeof(size) + size;
data_ptr = (unsigned char *) crPackAlloc( packet_length );
WRITE_DATA( 0, GLenum, CR_BUFFERSUBDATAARB_EXTEND_OPCODE );
WRITE_DATA( 4, GLenum, target );
WRITE_DATA( 8, GLintptrARB, offset ); /* XXX or 8 bytes? */
WRITE_DATA( 12, GLsizeiptrARB, size ); /* XXX or 8 bytes? */
crMemcpy( data_ptr + 16, data, size );
crHugePacket( CR_EXTEND_OPCODE, data_ptr );
crPackFree( data_ptr );
}
void PACK_APIENTRY
crPackDeleteBuffersARB(GLsizei n, const GLuint * buffers)
{
unsigned char *data_ptr;
int packet_length = sizeof(GLenum) + sizeof(n) + n * sizeof(*buffers);
if (!buffers)
return;
data_ptr = (unsigned char *) crPackAlloc(packet_length);
WRITE_DATA( 0, GLenum, CR_DELETEBUFFERSARB_EXTEND_OPCODE );
WRITE_DATA( 4, GLsizei, n );
crMemcpy( data_ptr + 8, buffers, n * sizeof(*buffers) );
crHugePacket( CR_EXTEND_OPCODE, data_ptr );
crPackFree( data_ptr );
}