def _get_active_attributes(self): """ Extract active attributes from GPU """ count = gl.glGetProgramiv(self.handle, gl.GL_ACTIVE_ATTRIBUTES) attributes = [] # This match a name of the form "name[size]" (= array) regex = re.compile("""(?P<name>\w+)\s*(\[(?P<size>\d+)\])""") for i in range(count): name, size, gtype = gl.glGetActiveAttrib(self.handle, i) # This checks if the attribute is an array # Name will be something like xxx[0] instead of xxx m = regex.match(name) # When attribute is an array, size corresponds to the highest used index if m: name = m.group('name') if size >= 1: for i in range(size): name = '%s[%d]' % (m.group('name'),i) attributes.append((name, gtype)) else: attributes.append((name, gtype)) return attributes
def active_attributes(self): """ List of active attributes requested from GPU (read only). .. note:: An inactive attribute is an attribute that has been declared but that is not actually used in the shader. Example: .. code:: attribute vec3 normal; # Inactive attribute vec3 position; # Active void main() { gl_Position = vec4(position, 1.0); } """ count = gl.glGetProgramiv(self.handle, gl.GL_ACTIVE_ATTRIBUTES) attributes = [] # This match a name of the form "name[size]" (= array) regex = re.compile("""(?P<name>\w+)\s*(\[(?P<size>\d+)\])""") for i in range(count): name, size, gtype = gl.glGetActiveAttrib(self.handle, i) name = name.decode() # This checks if the attribute is an array # Name will be something like xxx[0] instead of xxx m = regex.match(name) # When attribute is an array, size corresponds to the highest used index if m: name = m.group('name') if size >= 1: for i in range(size): name = '%s[%d]' % (m.group('name'), i) attributes.append((name, gtype)) else: attributes.append((name, gtype)) return attributes
def active_attributes(self): """ List of active attributes requested from GPU (read only). .. note:: An inactive attribute is an attribute that has been declared but that is not actually used in the shader. Example: .. code:: attribute vec3 normal; # Inactive attribute vec3 position; # Active void main() { gl_Position = vec4(position, 1.0); } """ count = gl.glGetProgramiv(self.handle, gl.GL_ACTIVE_ATTRIBUTES) attributes = [] # This match a name of the form "name[size]" (= array) regex = re.compile("""(?P<name>\w+)\s*(\[(?P<size>\d+)\])""") for i in range(count): name, size, gtype = gl.glGetActiveAttrib(self.handle, i) name = name.decode() # This checks if the attribute is an array # Name will be something like xxx[0] instead of xxx m = regex.match(name) # When attribute is an array, size corresponds to the highest used index if m: name = m.group('name') if size >= 1: for i in range(size): name = '%s[%d]' % (m.group('name'),i) attributes.append((name, gtype)) else: attributes.append((name, gtype)) return attributes