Skip to content

WGL extensions not found when using Python 3 #7

Open
@tomgoddard

Description

@tomgoddard

WGL extensions are not found when using Python 3 due to use of strings where bytes are required. Below is a traceback trying to use the WGL_EXT_swap_control extension. Changing 3 lines in OpenGL/raw/WGL/_types.py to use bytes instead of strings using the as_8_bit() function fixes the problem. I've attached a patch with these changes.

In Python 3.1 with PyOpenGL 3.1.1a:
wgl_python3.patch.gz

from OpenGL.WGL.EXT import swap_control
swap_control.wglGetSwapIntervalEXT()


TypeError Traceback (most recent call last)
in ()
----> 1 swap_control.wglGetSwapIntervalEXT()

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\platform\baseplatform.py in call(self, *args, **named)
399 return None
400 def call( self, *args, **named ):
--> 401 if self.load():
402 return self( *args, **named )
403 else:

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\platform\baseplatform.py in load(self)
388 argNames = self.argNames,
389 extension = self.extension,
--> 390 error_checker = self.error_checker,
391 )
392 except AttributeError as err:

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\platform\win32.py in constructFunction(self, functionName, dll, resultType, argTypes, doc, argNames, extension, deprecated, module, error_checker)
127 deprecated,
128 module,
--> 129 error_checker=error_checker,
130 )
131 except AttributeError:

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\platform\baseplatform.py in constructFunction(self, functionName, dll, resultType, argTypes, doc, argNames, extension, deprecated, module, force_extension, error_checker)
146 """
147 is_core = (not extension) or extension.split('_')[1] == 'VERSION'
--> 148 if (not is_core) and not self.checkExtension( extension ):
149 raise AttributeError( """Extension not available""" )
150 argTypes = [ self.finalArgType( t ) for t in argTypes ]

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\platform\baseplatform.py in checkExtension(self, name)
268 if current is None:
269 from OpenGL import extensions
--> 270 result = extensions.ExtensionQuerier.hasExtension( name )
271 set[name] = result
272 return result

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\extensions.py in hasExtension(self, specifier)
96 def hasExtension( self, specifier ):
97 for registered in self.registered:
---> 98 result = registered( specifier )
99 if result:
100 return result

C:\Program Files\ChimeraX\bin\lib\site-packages\OpenGL\extensions.py in call(self, specifier)
103 def call( self, specifier ):
104 specifier = as_8_bit(specifier).replace(as_8_bit('.'),as_8_bit('_'))
--> 105 if not specifier.startswith( self.prefix ):
106 return None
107

TypeError: startswith first arg must be bytes or a tuple of bytes, not str

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions