diff options
Diffstat (limited to 'src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py')
-rwxr-xr-x | src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py new file mode 100755 index 00000000..3ccda91c --- /dev/null +++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py @@ -0,0 +1,152 @@ +# Copyright (c) 2001, Stanford University +# All rights reserved. +# +# See the file LICENSE.txt for information on redistributing this software. + +from __future__ import print_function +import sys + +import apiutil + + +apiutil.CopyrightC() + +print("""#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" +""") + +from get_sizes import *; + + +funcs = [ 'GetIntegerv', 'GetFloatv', 'GetDoublev', 'GetBooleanv' ] +types = [ 'GLint', 'GLfloat', 'GLdouble', 'GLboolean' ] + +for index in range(len(funcs)): + func_name = funcs[index] + params = apiutil.Parameters(func_name) + print('void SERVER_DISPATCH_APIENTRY crServerDispatch%s(%s)' % ( func_name, apiutil.MakeDeclarationString(params))) + print('{') + print('\t%s *get_values;' % types[index]) + print('\tint tablesize;') + print(""" + #ifdef CR_ARB_texture_compression + if (GL_COMPRESSED_TEXTURE_FORMATS_ARB == pname) + { + GLint numtexfmts = 0; + cr_server.head_spu->dispatch_table.GetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, &numtexfmts); + tablesize = numtexfmts * sizeof(%s); + } + else + #endif + { + tablesize = __numValues( pname ) * sizeof(%s); + } + """ % (types[index], types[index])) + print('\t(void) params;') + print('\tget_values = (%s *) crAlloc( tablesize );' % types[index]) + print('\tif (tablesize>0)') + print('\tcr_server.head_spu->dispatch_table.%s( pname, get_values );' % func_name) + print(""" + if (GL_TEXTURE_BINDING_1D==pname + || GL_TEXTURE_BINDING_2D==pname + || GL_TEXTURE_BINDING_3D==pname + || GL_TEXTURE_BINDING_RECTANGLE_ARB==pname + || GL_TEXTURE_BINDING_CUBE_MAP_ARB==pname) + { + GLuint texid; + CRASSERT(tablesize/sizeof(%s)==1); + texid = (GLuint) *get_values; + *get_values = (%s) crStateTextureHWIDtoID(texid); + } + else if (GL_CURRENT_PROGRAM==pname) + { + GLuint programid; + CRASSERT(tablesize/sizeof(%s)==1); + programid = (GLuint) *get_values; + *get_values = (%s) crStateGLSLProgramHWIDtoID(programid); + } + else if (GL_FRAMEBUFFER_BINDING_EXT==pname + ||GL_READ_FRAMEBUFFER_BINDING==pname) + { + GLuint fboid; + CRASSERT(tablesize/sizeof(%s)==1); + fboid = (GLuint) *get_values; + if (crServerIsRedirectedToFBO() + && (fboid==cr_server.curClient->currentMural->aidFBOs[0] + || fboid==cr_server.curClient->currentMural->aidFBOs[1])) + { + fboid = 0; + } + else + { + fboid = crStateFBOHWIDtoID(fboid); + } + *get_values = (%s) fboid; + } + else if (GL_READ_BUFFER==pname) + { + if (crServerIsRedirectedToFBO() + && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurReadBuffer) + && !crStateGetCurrent()->framebufferobject.readFB) + { + *get_values = (%s) crStateGetCurrent()->buffer.readBuffer; + Assert(crStateGetCurrent()->buffer.readBuffer == GL_BACK || crStateGetCurrent()->buffer.readBuffer == GL_FRONT); + } + } + else if (GL_DRAW_BUFFER==pname) + { + if (crServerIsRedirectedToFBO() + && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurDrawBuffer) + && !crStateGetCurrent()->framebufferobject.drawFB) + { + *get_values = (%s) crStateGetCurrent()->buffer.drawBuffer; + Assert(crStateGetCurrent()->buffer.drawBuffer == GL_BACK || crStateGetCurrent()->buffer.drawBuffer == GL_FRONT); + } + } + else if (GL_RENDERBUFFER_BINDING_EXT==pname) + { + GLuint rbid; + CRASSERT(tablesize/sizeof(%s)==1); + rbid = (GLuint) *get_values; + *get_values = (%s) crStateRBOHWIDtoID(rbid); + } + else if (GL_ARRAY_BUFFER_BINDING_ARB==pname + || GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB==pname + || GL_VERTEX_ARRAY_BUFFER_BINDING_ARB==pname + || GL_NORMAL_ARRAY_BUFFER_BINDING_ARB==pname + || GL_COLOR_ARRAY_BUFFER_BINDING_ARB==pname + || GL_INDEX_ARRAY_BUFFER_BINDING_ARB==pname + || GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB==pname + || GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB==pname + || GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB==pname + || GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB==pname + || GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB==pname) + { + GLuint bufid; + CRASSERT(tablesize/sizeof(%s)==1); + bufid = (GLuint) *get_values; + *get_values = (%s) crStateBufferHWIDtoID(bufid); + } + else if (GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS==pname) + { + if (CR_MAX_TEXTURE_UNITS < (GLuint)*get_values) + { + *get_values = (%s)CR_MAX_TEXTURE_UNITS; + } + } + else if (GL_MAX_VERTEX_ATTRIBS_ARB==pname) + { + if (CR_MAX_VERTEX_ATTRIBS < (GLuint)*get_values) + { + *get_values = (%s)CR_MAX_VERTEX_ATTRIBS; + } + } + """ % (types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index])) + print('\tcrServerReturnValue( get_values, tablesize );') + print('\tcrFree(get_values);') + print('}\n') |