/* Copyright (c) 2001, Stanford University * All rights reserved * * See the file LICENSE.txt for information on redistributing this software. */ #include "cr_spu.h" #include "chromium.h" #include "cr_error.h" #include "cr_mem.h" #include "cr_net.h" #include "server_dispatch.h" #include "server.h" static GLint __sizeQuery( GLenum map ) { GLint get_values; /* Windows compiler gets mad if variables might be uninitialized */ GLenum newmap = GL_PIXEL_MAP_I_TO_I_SIZE; switch( map ) { case GL_PIXEL_MAP_I_TO_I: newmap = GL_PIXEL_MAP_I_TO_I_SIZE; break; case GL_PIXEL_MAP_S_TO_S: newmap = GL_PIXEL_MAP_S_TO_S_SIZE; break; case GL_PIXEL_MAP_I_TO_R: newmap = GL_PIXEL_MAP_I_TO_R_SIZE; break; case GL_PIXEL_MAP_I_TO_G: newmap = GL_PIXEL_MAP_I_TO_G_SIZE; break; case GL_PIXEL_MAP_I_TO_B: newmap = GL_PIXEL_MAP_I_TO_B_SIZE; break; case GL_PIXEL_MAP_I_TO_A: newmap = GL_PIXEL_MAP_I_TO_A_SIZE; break; case GL_PIXEL_MAP_R_TO_R: newmap = GL_PIXEL_MAP_R_TO_R_SIZE; break; case GL_PIXEL_MAP_G_TO_G: newmap = GL_PIXEL_MAP_G_TO_G_SIZE; break; case GL_PIXEL_MAP_B_TO_B: newmap = GL_PIXEL_MAP_B_TO_B_SIZE; break; case GL_PIXEL_MAP_A_TO_A: newmap = GL_PIXEL_MAP_A_TO_A_SIZE; break; default: crError( "Bad map in crServerDispatchGetPixelMap: %d", map ); break; } cr_server.head_spu->dispatch_table.GetIntegerv( newmap, &get_values ); return get_values; } void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapfv( GLenum map, GLfloat *values ) { #ifdef CR_ARB_pixel_buffer_object if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB)) { GLvoid *pbo_offset; pbo_offset = (GLfloat*) ((uintptr_t) *((GLint*)values)); cr_server.head_spu->dispatch_table.GetPixelMapfv( map, pbo_offset ); } else #endif { int size = sizeof( GLfloat ); int tabsize = __sizeQuery( map ); GLfloat *local_values; size *= tabsize; local_values = (GLfloat*)crAlloc( size ); cr_server.head_spu->dispatch_table.GetPixelMapfv( map, local_values ); crServerReturnValue( local_values, size ); crFree( local_values ); } } void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapuiv( GLenum map, GLuint *values ) { #ifdef CR_ARB_pixel_buffer_object if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB)) { GLvoid *pbo_offset; pbo_offset = (GLuint*) ((uintptr_t) *((GLint*)values)); cr_server.head_spu->dispatch_table.GetPixelMapuiv( map, pbo_offset ); } else #endif { int size = sizeof( GLuint ); int tabsize = __sizeQuery( map ); GLuint *local_values; size *= tabsize; local_values = (GLuint*)crAlloc( size ); cr_server.head_spu->dispatch_table.GetPixelMapuiv( map, local_values ); crServerReturnValue( local_values, size ); crFree( local_values ); } } void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapusv( GLenum map, GLushort *values ) { #ifdef CR_ARB_pixel_buffer_object if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB)) { GLvoid *pbo_offset; pbo_offset = (GLushort*) ((uintptr_t) *((GLint*)values)); cr_server.head_spu->dispatch_table.GetPixelMapusv( map, pbo_offset ); } else #endif { int size = sizeof( GLushort ); int tabsize = __sizeQuery( map ); GLushort *local_values; size *= tabsize; local_values = (GLushort*)crAlloc( size ); cr_server.head_spu->dispatch_table.GetPixelMapusv( map, local_values ); crServerReturnValue( local_values, size ); crFree( local_values ); } }