summaryrefslogtreecommitdiffstats
path: root/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
commitf8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch)
tree26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/HostServices/SharedOpenGL/crserverlib/server_getmap.c
parentInitial commit. (diff)
downloadvirtualbox-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.c247
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);
+ }
+}
+