VirtualBox

儲存庫 vbox 的更動 18539


忽略:
時間撮記:
2009-3-30 下午12:44:59 (16 年 以前)
作者:
vboxsync
訊息:

crOpenGL: generate opengl .c exports file for solaris dri/fakedri

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Additions/common/crOpenGL/entrypoints.py

    r15532 r18539  
    1717
    1818def GenerateEntrypoints(hacks = []):
    19         """Emit code for all the OpenGL/Chromium entrypoints.
    20         hacks is an optional list of functions which are special cased.
    21         """
     19    """Emit code for all the OpenGL/Chromium entrypoints.
     20    hacks is an optional list of functions which are special cased.
     21    """
    2222
    23         apiutil.CopyrightC()
     23    apiutil.CopyrightC()
    2424
    25         print '#define GL_GLEXT_PROTOTYPES'
    26         print '#include <stdio.h>'
    27         print '#include <stdlib.h>'
    28         print '#include <GL/gl.h>'
    29         print '#include "chromium.h"'
    30         print '#include "stub.h"'
    31         print ''
     25    print '#define GL_GLEXT_PROTOTYPES'
     26    print '#include <stdio.h>'
     27    print '#include <stdlib.h>'
     28    print '#include <GL/gl.h>'
     29    print '#include "chromium.h"'
     30    print '#include "stub.h"'
     31    print '#include "dri_glx.h"'
     32    print ''
    3233
    33         # Get sorted list of dispatched functions.
    34         # The order is very important - it must match cr_opcodes.h
    35         # and spu_dispatch_table.h
    36         keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
     34    # Get sorted list of dispatched functions.
     35    # The order is very important - it must match cr_opcodes.h
     36    # and spu_dispatch_table.h
     37    keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
    3738
    38         for index in range(len(keys)):
    39                 func_name = keys[index]
    40                 if apiutil.Category(func_name) == "Chromium":
    41                         # this function is defined in stub.c
    42                         continue
     39    for index in range(len(keys)):
     40        func_name = keys[index]
     41        if apiutil.Category(func_name) == "Chromium":
     42            # this function is defined in stub.c
     43            continue
    4344
    44                 return_type = apiutil.ReturnType(func_name)
    45                 params = apiutil.Parameters(func_name)
     45        return_type = apiutil.ReturnType(func_name)
     46        params = apiutil.Parameters(func_name)
    4647
    47                 if func_name in hacks:
    48                         print "/* hacked entrypoint: %s */" % func_name
    49                         if func_name == "TexImage3D":
    50                                 # Pretty common: internalformat is GLenum, not GLint
    51                                 print "void glTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
    52                                 print "{"
    53                                 print "\tglim.TexImage3D( target, level, (GLint) internalformat, width, height, depth, border, format, type, pixels );"
    54                                 print "}"
    55                         elif func_name == "TexImage2D":
    56                                 # Pretty common: internalformat is GLenum, not GLint
    57                                 print "void glTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
    58                                 print "{"
    59                                 print "\tglim.TexImage2D( target, level, (GLint) internalformat, width, height, border, format, type, pixels );"
    60                                 print "}"
    61                         elif func_name == "TexImage1D":
    62                                 # Pretty common: internalformat is GLenum, not GLint
    63                                 print "void glTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
    64                                 print "{"
    65                                 print "\tglim.TexImage1D( target, level, (GLint) internalformat, width, border, format, type, pixels );"
    66                                 print "}"
    67                         elif func_name == "EdgeFlagPointer":
    68                                 # second arg is GLboolean instead of GLvoid
    69                                 print "void glEdgeFlagPointer( GLsizei stride, const GLboolean *pointer )"
    70                                 print "{"
    71                                 print "\tglim.EdgeFlagPointer( stride, pointer );"
    72                                 print "}"
    73                         elif func_name == "ProgramParameters4fvNV":
    74                                 print "void glProgramParameters4fvNV( GLenum target, GLuint index, GLuint num, const GLfloat *params )"
    75                                 print "{"
    76                                 print "\tglim.ProgramParameters4fvNV( target, index, num, params );"
    77                                 print "}"
    78                         elif func_name == "MultiDrawElementsEXT":
    79                                 print "void glMultiDrawElementsEXT(GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)"
    80                                 print "{"
    81                                 print "\tglim.MultiDrawElementsEXT(mode, count,type, indices, primcount);"
    82                                 print "}"
    83                         elif func_name == "ProgramParameters4dvNV":
    84                                 print "void glProgramParameters4dvNV( GLenum target, GLuint index, GLuint num, const GLdouble *params )"
    85                                 print "{"
    86                                 print "\tglim.ProgramParameters4dvNV( target, index, num, params );"
    87                                 print "}"
    88                 else:
    89                         # the usual path
    90                         print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    91                         print ""
    92                         print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    93                         print "{"
    94                         print "\t",
    95                         if return_type != "void":
    96                                 print "return ",
    97                         print "glim.%s( %s );" % (func_name, apiutil.MakeCallString(params))
    98                         print "}"
    99                         print ""
     48        if func_name in hacks:
     49            print "/* hacked entrypoint: %s */" % func_name
     50            if func_name == "TexImage3D":
     51                # Pretty common: internalformat is GLenum, not GLint
     52                print "void glTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
     53                print "{"
     54                print "\tglim.TexImage3D( target, level, (GLint) internalformat, width, height, depth, border, format, type, pixels );"
     55                print "}"
     56            elif func_name == "TexImage2D":
     57                # Pretty common: internalformat is GLenum, not GLint
     58                print "void glTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
     59                print "{"
     60                print "\tglim.TexImage2D( target, level, (GLint) internalformat, width, height, border, format, type, pixels );"
     61                print "}"
     62            elif func_name == "TexImage1D":
     63                # Pretty common: internalformat is GLenum, not GLint
     64                print "void glTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"
     65                print "{"
     66                print "\tglim.TexImage1D( target, level, (GLint) internalformat, width, border, format, type, pixels );"
     67                print "}"
     68            elif func_name == "EdgeFlagPointer":
     69                # second arg is GLboolean instead of GLvoid
     70                print "void glEdgeFlagPointer( GLsizei stride, const GLboolean *pointer )"
     71                print "{"
     72                print "\tglim.EdgeFlagPointer( stride, pointer );"
     73                print "}"
     74            elif func_name == "ProgramParameters4fvNV":
     75                print "void glProgramParameters4fvNV( GLenum target, GLuint index, GLuint num, const GLfloat *params )"
     76                print "{"
     77                print "\tglim.ProgramParameters4fvNV( target, index, num, params );"
     78                print "}"
     79            elif func_name == "MultiDrawElementsEXT":
     80                print "void glMultiDrawElementsEXT(GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)"
     81                print "{"
     82                print "\tglim.MultiDrawElementsEXT(mode, count,type, indices, primcount);"
     83                print "}"
     84            elif func_name == "ProgramParameters4dvNV":
     85                print "void glProgramParameters4dvNV( GLenum target, GLuint index, GLuint num, const GLdouble *params )"
     86                print "{"
     87                print "\tglim.ProgramParameters4dvNV( target, index, num, params );"
     88                print "}"
     89        else:
     90            # the usual path
     91            print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     92            print ""
     93            print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     94            print "{"
     95            print "\t",
     96            if return_type != "void":
     97                print "return ",
     98            print "glim.%s( %s );" % (func_name, apiutil.MakeCallString(params))
     99            print "}"
     100            print ""
    100101
    101         print '/*'
    102         print '* Aliases'
    103         print '*/'
     102    print '/*'
     103    print '* Aliases'
     104    print '*/'
    104105
    105         # Now loop over all the functions and take care of any aliases
    106         allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt")
    107         for func_name in allkeys:
    108                 if "omit" in apiutil.ChromiumProps(func_name):
    109                         continue
     106    # Now loop over all the functions and take care of any aliases
     107    allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt")
     108    for func_name in allkeys:
     109        if "omit" in apiutil.ChromiumProps(func_name):
     110            continue
    110111
    111                 if func_name in keys:
    112                         # we already processed this function earlier
    113                         continue
     112        if func_name in keys:
     113            # we already processed this function earlier
     114            continue
    114115
    115                 # alias is the function we're aliasing
    116                 alias = apiutil.Alias(func_name)
    117                 if alias:
    118                         if func_name in hacks:
    119                                 print "/* hacked entrypoint: %s */" % func_name
    120                                 if func_name == "MultiDrawArrays":
    121                                         print "void glMultiDrawArrays( GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount )"
    122                                         print "{"
    123                                         print "\tglim.MultiDrawArraysEXT( mode, (GLint*)first, (GLsizei*)count, primcount );"
    124                                         print "}"
    125                                 elif func_name == "BufferData":
    126                                         print "void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)"
    127                                         print "{"
    128                                         print "\tglim.BufferDataARB(target, size, data, usage);"
    129                                         print "}"
    130                                 elif func_name == "BufferSubData":
    131                                         print "void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)"
    132                                         print "{"
    133                                         print "\tglim.BufferSubDataARB(target, offset, size, data);"
    134                                         print "}"
    135                                 elif func_name == "GetBufferSubData":
    136                                         print "void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)"
    137                                         print "{"
    138                                         print "\tglim.GetBufferSubDataARB(target, offset, size, data);"
    139                                         print "}"
    140                         else:
    141                                 return_type = apiutil.ReturnType(func_name)
    142                                 params = apiutil.Parameters(func_name)
    143                                 print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    144                                 print ""
    145                                 print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    146                                 print "{"
    147                                 print "\t",
    148                                 if return_type != "void":
    149                                         print "return ",
    150                                 print "glim.%s( %s );" % (alias, apiutil.MakeCallString(params))
    151                                 print "}"
    152                                 print ""
     116        # alias is the function we're aliasing
     117        alias = apiutil.Alias(func_name)
     118        if alias:
     119            if func_name in hacks:
     120                print "/* hacked entrypoint: %s */" % func_name
     121                if func_name == "MultiDrawArrays":
     122                    print "void glMultiDrawArrays( GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount )"
     123                    print "{"
     124                    print "\tglim.MultiDrawArraysEXT( mode, (GLint*)first, (GLsizei*)count, primcount );"
     125                    print "}"
     126                elif func_name == "BufferData":
     127                    print "void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)"
     128                    print "{"
     129                    print "\tglim.BufferDataARB(target, size, data, usage);"
     130                    print "}"
     131                elif func_name == "BufferSubData":
     132                    print "void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)"
     133                    print "{"
     134                    print "\tglim.BufferSubDataARB(target, offset, size, data);"
     135                    print "}"
     136                elif func_name == "GetBufferSubData":
     137                    print "void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)"
     138                    print "{"
     139                    print "\tglim.GetBufferSubDataARB(target, offset, size, data);"
     140                    print "}"
     141            else:
     142                return_type = apiutil.ReturnType(func_name)
     143                params = apiutil.Parameters(func_name)
     144                print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     145                print ""
     146                print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     147                print "{"
     148                print "\t",
     149                if return_type != "void":
     150                    print "return ",
     151                print "glim.%s( %s );" % (alias, apiutil.MakeCallString(params))
     152                print "}"
     153                print ""
    153154
    154         print '/*'
    155         print '* No-op stubs'
    156         print '*/'
     155    print '/*'
     156    print '* No-op stubs'
     157    print '*/'
    157158
    158         # Now generate no-op stub functions
    159         for func_name in allkeys:
    160                 if "stub" in apiutil.ChromiumProps(func_name):
    161                         return_type = apiutil.ReturnType(func_name)
    162                         params = apiutil.Parameters(func_name)
     159    # Now generate no-op stub functions
     160    for func_name in allkeys:
     161        if "stub" in apiutil.ChromiumProps(func_name):
     162            return_type = apiutil.ReturnType(func_name)
     163            params = apiutil.Parameters(func_name)
    163164
    164                         print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    165                         print ""
    166                         print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
    167                         print "{"
    168                         if return_type != "void":
    169                                 print "return (%s) 0" % return_type
    170                         print "}"
    171                         print ""
     165            print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     166            print ""
     167            print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))
     168            print "{"
     169            if return_type != "void":
     170                print "return (%s) 0" % return_type
     171            print "}"
     172            print ""
    172173
    173174
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette