Description
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