diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
commit | f8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch) | |
tree | 26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c | |
parent | Initial commit. (diff) | |
download | virtualbox-upstream.tar.xz virtualbox-upstream.zip |
Adding upstream version 6.0.4-dfsg.upstream/6.0.4-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c')
-rw-r--r-- | src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c new file mode 100644 index 00000000..b8123e32 --- /dev/null +++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c @@ -0,0 +1,247 @@ +/* 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 GLuint __evaluator_components( GLenum target ) +{ + switch (target) { + case GL_MAP1_VERTEX_3: return 3; + case GL_MAP1_VERTEX_4: return 4; + case GL_MAP1_INDEX: return 1; + case GL_MAP1_COLOR_4: return 4; + case GL_MAP1_NORMAL: return 3; + case GL_MAP1_TEXTURE_COORD_1: return 1; + case GL_MAP1_TEXTURE_COORD_2: return 2; + case GL_MAP1_TEXTURE_COORD_3: return 3; + case GL_MAP1_TEXTURE_COORD_4: return 4; + case GL_MAP2_VERTEX_3: return 3; + case GL_MAP2_VERTEX_4: return 4; + case GL_MAP2_INDEX: return 1; + case GL_MAP2_COLOR_4: return 4; + case GL_MAP2_NORMAL: return 3; + case GL_MAP2_TEXTURE_COORD_1: return 1; + case GL_MAP2_TEXTURE_COORD_2: return 2; + case GL_MAP2_TEXTURE_COORD_3: return 3; + case GL_MAP2_TEXTURE_COORD_4: return 4; + default: return 0; + } +} + +static GLuint __evaluator_dimension( GLenum target ) +{ + switch( target ) + { + case GL_MAP1_COLOR_4: + case GL_MAP1_INDEX: + case GL_MAP1_NORMAL: + case GL_MAP1_TEXTURE_COORD_1: + case GL_MAP1_TEXTURE_COORD_2: + case GL_MAP1_TEXTURE_COORD_3: + case GL_MAP1_TEXTURE_COORD_4: + case GL_MAP1_VERTEX_3: + case GL_MAP1_VERTEX_4: + return 1; + + case GL_MAP2_COLOR_4: + case GL_MAP2_INDEX: + case GL_MAP2_NORMAL: + case GL_MAP2_TEXTURE_COORD_1: + case GL_MAP2_TEXTURE_COORD_2: + case GL_MAP2_TEXTURE_COORD_3: + case GL_MAP2_TEXTURE_COORD_4: + case GL_MAP2_VERTEX_3: + case GL_MAP2_VERTEX_4: + return 2; + + default: + return 0; + } +} + +void SERVER_DISPATCH_APIENTRY crServerDispatchGetMapdv( GLenum target, GLenum query, GLdouble *v ) +{ + GLdouble *coeffs = NULL; + GLdouble *retptr = NULL; + GLdouble order[2] = {0}; + GLdouble domain[4] = {0}; + GLint tempOrder[2] = {0}; + int dimension, evalcomp; + unsigned int size = sizeof(GLdouble); + (void) v; + + evalcomp = __evaluator_components(target); + dimension = __evaluator_dimension(target); + + if (evalcomp == 0 || dimension == 0) + { + crError( "Bad target in crServerDispatchGetMapdv: %d", target ); + return; + } + + switch(query) + { + case GL_ORDER: + cr_server.head_spu->dispatch_table.GetMapdv( target, query, order ); + retptr = &(order[0]); + size *= dimension; + break; + case GL_DOMAIN: + cr_server.head_spu->dispatch_table.GetMapdv( target, query, domain ); + retptr = &(domain[0]); + size *= dimension * 2; + break; + case GL_COEFF: + cr_server.head_spu->dispatch_table.GetMapiv( target, GL_ORDER, tempOrder ); + size *= evalcomp * tempOrder[0]; + if (dimension == 2) + size *= tempOrder[1]; + + if (size) + coeffs = (GLdouble *) crCalloc( size ); + + if (coeffs) + { + cr_server.head_spu->dispatch_table.GetMapdv( target, query, coeffs ); + retptr = coeffs; + } + break; + default: + crError( "Bad query in crServerDispatchGetMapdv: %d", query ); + return; + } + + crServerReturnValue( retptr, size ); + if (coeffs) + { + crFree(coeffs); + } +} + +void SERVER_DISPATCH_APIENTRY crServerDispatchGetMapfv( GLenum target, GLenum query, GLfloat *v ) +{ + GLfloat *coeffs = NULL; + GLfloat *retptr = NULL; + GLfloat order[2] = {0}; + GLfloat domain[4] = {0}; + GLint tempOrder[2] = {0}; + int dimension, evalcomp; + unsigned int size = sizeof(GLfloat); + (void) v; + + evalcomp = __evaluator_components(target); + dimension = __evaluator_dimension(target); + + if (evalcomp == 0 || dimension == 0) + { + crError( "Bad target in crServerDispatchGetMapfv: %d", target ); + return; + } + + switch(query) + { + case GL_ORDER: + cr_server.head_spu->dispatch_table.GetMapfv( target, query, order ); + retptr = &(order[0]); + size *= dimension; + break; + case GL_DOMAIN: + cr_server.head_spu->dispatch_table.GetMapfv( target, query, domain ); + retptr = &(domain[0]); + size *= dimension * 2; + break; + case GL_COEFF: + cr_server.head_spu->dispatch_table.GetMapiv( target, GL_ORDER, tempOrder ); + size *= evalcomp * tempOrder[0]; + if (dimension == 2) + size *= tempOrder[1]; + + if (size) + coeffs = (GLfloat *) crCalloc( size ); + + if (coeffs) + { + cr_server.head_spu->dispatch_table.GetMapfv( target, query, coeffs ); + retptr = coeffs; + } + break; + default: + crError( "Bad query in crServerDispatchGetMapfv: %d", query ); + return; + } + + crServerReturnValue( retptr, size ); + if (coeffs) + { + crFree(coeffs); + } +} + +void SERVER_DISPATCH_APIENTRY crServerDispatchGetMapiv( GLenum target, GLenum query, GLint *v ) +{ + GLint *coeffs = NULL; + GLint *retptr = NULL; + GLint order[2] = {0}; + GLint domain[4] = {0}; + GLint tempOrder[2] = {0}; + int dimension, evalcomp; + unsigned int size = sizeof(GLint); + (void) v; + + evalcomp = __evaluator_components(target); + dimension = __evaluator_dimension(target); + + if (evalcomp == 0 || dimension == 0) + { + crError( "Bad target in crServerDispatchGetMapiv: %d", target ); + return; + } + + switch(query) + { + case GL_ORDER: + cr_server.head_spu->dispatch_table.GetMapiv( target, query, order ); + retptr = &(order[0]); + size *= dimension; + break; + case GL_DOMAIN: + cr_server.head_spu->dispatch_table.GetMapiv( target, query, domain ); + retptr = &(domain[0]); + size *= dimension * 2; + break; + case GL_COEFF: + cr_server.head_spu->dispatch_table.GetMapiv( target, GL_ORDER, tempOrder ); + size *= evalcomp * tempOrder[0]; + if (dimension == 2) + size *= tempOrder[1]; + + if (size) + coeffs = (GLint *) crCalloc( size ); + + if (coeffs) + { + cr_server.head_spu->dispatch_table.GetMapiv( target, query, coeffs ); + retptr = coeffs; + } + break; + default: + crError( "Bad query in crServerDispatchGetMapiv: %d", query ); + break; + } + + crServerReturnValue( retptr, size ); + if (coeffs) + { + crFree(coeffs); + } +} + |