This file is indexed.

/usr/share/pyshared/VisionEgg/GLTrace.py is in python-visionegg 1.2.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# The Vision Egg: GLTrace
#
# Copyright (C) 2001-2004 Andrew Straw
# Copyright (C) 2004,2008 California Institute of Technology
#
# URL: <http://www.visionegg.org/>
#
# Distributed under the terms of the GNU Lesser General Public License
# (LGPL). See LICENSE.TXT that came with this file.

"""
Trace calls to OpenGL

With this module, you can trace all calls made to OpenGL through PyOpenGL.
To do this, substitute

import OpenGL.GL as gl

with

import VisionEgg.GLTrace as gl

in your code.

Also, trace another module's use of OpenGL by changing its reference
to OpenGL.GL to a reference to VisionEgg.GLTrace.

"""

# Copyright (c) 2003 Andrew Straw.  Distributed under the terms of the
# GNU Lesser General Public License (LGPL).

####################################################################
#
#        Import all the necessary packages
#
####################################################################

import OpenGL.GL as gl

gl_constants = {}

# functions which we don't want to translate arguments to gl constant
raw_args_by_function = {
    'glColor':[0,1,2,3],
    'glColorf':[0,1,2,3],
    'glDepthRange':[0,1],
    'glGenTextures':[0],
    'glGetTexLevelParameteriv':[1],
    'glOrtho':[0,1,2,3,4,5],
    'glPixelStorei':[1],
    'glReadPixels':[0,1,2,3],
    'glRotate':[0,1,2,3],
    'glTexCoord2f':[0,1],
    'glTexImage1D':[1,3,4],
    'glTexImage2D':[1,3,4,5],
    'glTexSubImage1D':[1,2,3],
    'glTranslate':[0,1,2],
    'glVertex2f':[0,1],
    'glVertex3f':[0,1,2],
    'glViewport':[0,1,2,3],
    }

bitmasks_by_function = {
    'glClear':[0],
    }

bitmask_names_by_value = {
    gl.GL_COLOR_BUFFER_BIT : 'GL_COLOR_BUFFER_BIT',
    gl.GL_DEPTH_BUFFER_BIT : 'GL_DEPTH_BUFFER_BIT',
    }

def arg_to_str( arg ):
    if isinstance(arg, int):
        if arg in gl_constants.keys():
            return gl_constants[arg]
    elif type(arg) == str and len(arg) > 30:
            return "'<string>'"
    return repr(arg)

class Wrapper:
    def __init__(self, function_name):
        self.function_name = function_name
        self.orig_func = getattr(gl,self.function_name)
    def run(self,*args,**kw):
        if kw: kw_str = " AND KEYWORDS"
        else: kw_str = ""
        if 1:
##        if self.function_name in raw_args_by_function:
            arg_str = []
            for i in range(len(args)):
                if self.function_name in raw_args_by_function and i in raw_args_by_function[self.function_name]:
                    arg_str.append(str(args[i])) # don't convert to name of OpenGL constant
                elif self.function_name in bitmasks_by_function and i in bitmasks_by_function[self.function_name]:
                    bitmask_strs = []
                    value = args[i]
                    for bit_value in bitmask_names_by_value:
                        if value & bit_value:
                            value = value & ~bit_value
                            bitmask_strs.append( bitmask_names_by_value[bit_value] )
                    if value != 0:
                        bitmask_strs.append( arg_to_str(args[i]) )
                    arg_str.append( '|'.join(bitmask_strs) )
                else:
                    arg_str.append(arg_to_str(args[i])) # convert to name of OpenGL constant
            arg_str = ','.join( arg_str )
        try:
            result = self.orig_func(*args,**kw)
        except:
            print "%s(%s)%s"%(self.function_name,arg_str,kw_str)
            raise

        if result is not None:
            result_str = "%s = "%(arg_to_str(result),)
        else:
            result_str = ''
        print "%s%s(%s)%s"%(result_str,self.function_name,arg_str,kw_str)
        return result

def gl_trace_attach():
    for attr_name in dir(gl):
        if callable( getattr(gl,attr_name) ):
            wrapper = Wrapper(attr_name)
            globals()[attr_name] = wrapper.run
        else:
            attr = getattr(gl,attr_name)
            globals()[attr_name] = attr
            if not attr_name.startswith('__') and not attr_name.startswith('__'):
                if type(getattr(gl,attr_name)) == int:
                    gl_constants[getattr(gl,attr_name)] = attr_name
    if not hasattr(gl,'GL_CLAMP_TO_EDGE'):
        # XXX This hack requires opengl >= 1.2. See Core.py for more info.
        globals()['GL_CLAMP_TO_EDGE'] = 0x812F
    if hasattr(gl,'glActiveTexture'):
        # XXX Another, similar hack.
        globals()['glActiveTextureARB'] = gl.glActiveTexture
        globals()['glMultiTexCoord2fARB'] = gl.glMultiTexCoord2f
        globals()['GL_TEXTURE0_ARB'] = gl.GL_TEXTURE0
        globals()['GL_TEXTURE1_ARB'] = gl.GL_TEXTURE1

gl_trace_attach() # attach when imported