diff options
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/state_tracker/convert.py')
-rwxr-xr-x | src/VBox/GuestHost/OpenGL/state_tracker/convert.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/convert.py b/src/VBox/GuestHost/OpenGL/state_tracker/convert.py new file mode 100755 index 00000000..1adbf4e6 --- /dev/null +++ b/src/VBox/GuestHost/OpenGL/state_tracker/convert.py @@ -0,0 +1,75 @@ +# 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 + +# Two different paths to the packer and opengl_stub directories since this +# script will be called from both cr/state_tracker/ and cr/spu/tilesort/. +sys.path.append( '../packer' ) +sys.path.append( '../../packer' ) +sys.path.append( '../glapi_parser' ) +sys.path.append( '../../glapi_parser' ) +from pack_currenttypes import * +import apiutil + +apiutil.CopyrightC() + +print(''' +#include "state/cr_statetypes.h" + +static double __read_double( const void *src ) +{ + const unsigned int *ui = (const unsigned int *) src; + double d; + ((unsigned int *) &d)[0] = ui[0]; + ((unsigned int *) &d)[1] = ui[1]; + return d; +} +''') + +for k in sorted(gltypes.keys()): + for i in range(1,5): + print('static void __convert_%s%d (GLfloat *dst, const %s *src) {' % (k,i,gltypes[k]['type'])) + if k == 'd': + for j in range(i-1): + print('\t*dst++ = (GLfloat) __read_double(src++);') + print('\t*dst = (GLfloat) __read_double(src);') + else: + for j in range(i-1): + print('\t*dst++ = (GLfloat) *src++;') + print('\t*dst = (GLfloat) *src;') + print('}\n') + +scale = { + 'ub' : 'CR_MAXUBYTE', + 'b' : 'CR_MAXBYTE', + 'us' : 'CR_MAXUSHORT', + 's' : 'CR_MAXSHORT', + 'ui' : 'CR_MAXUINT', + 'i' : 'CR_MAXINT', + 'f' : '', + 'd' : '' +} + +for k in sorted(gltypes.keys()): + if k != 'f' and k != 'd' and k != 'l': + if k[0:1] == "N": + k2 = k[1:] + else: + k2 = k + for i in range(1,5): + print('static void __convert_rescale_%s%d (GLfloat *dst, const %s *src) {' % (k,i,gltypes[k2]['type'])) + for j in range(i-1): + print('\t*dst++ = ((GLfloat) *src++) / %s;' % scale[k2]) + print('\t*dst = ((GLfloat) *src) / %s;' % scale[k2]) + print('}\n') + +print(''' + +static void __convert_boolean (GLboolean *dst, const GLboolean *src) { + *dst = *src; +} +''') |