# Copyright (c) 2001, Stanford University
# All rights reserved.
#
# See the file LICENSE.txt for information on redistributing this software.
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 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 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;
}
'''