@@ -187,7 +187,7 @@ def tkSwapBuffers( self ):
187187if sys .platform .startswith ( 'linux' ):
188188
189189 from ctypes import c_int , c_char_p , c_void_p , cdll , POINTER , util , \
190- pointer
190+ pointer , CFUNCTYPE , c_bool
191191 from OpenGL import GLX
192192 from OpenGL .raw ._GLX import Display
193193 import tk_read_XWindowAttributes
@@ -229,7 +229,7 @@ def tkCreateContext( self ):
229229 major = c_int (0 )
230230 minor = c_int (0 )
231231 GLX .glXQueryVersion ( self .__window , major , minor )
232- print ("GLX version:" , major .value ,minor .value )
232+ print ("GLX version: %d.%d" % ( major .value ,minor .value ) )
233233 if major .value == 1 and minor .value < 3 : # e.g. 1.2 and down
234234 visual = GLX .glXChooseVisual ( self .__window , 0 ,
235235 (GL .GLint * len (att ))(* att ) )
@@ -252,7 +252,6 @@ def tkCreateContext( self ):
252252 ncfg )
253253 print ( "Number of configs" ,ncfg .value )
254254 xwa = tk_read_XWindowAttributes .getXWA (self ._wid )
255-
256255 print ("xwa....id" ,xwa .visual .contents .visualid )
257256 ideal = xwa .visual .contents .visualid
258257 best = - 1
@@ -266,13 +265,44 @@ def tkCreateContext( self ):
266265 else :
267266 print ("OH dear - visual does not match?" )
268267 best = 0
269- typ = GLX .GLX_RGBA_TYPE #
270-
271- self .__context = GLX .glXCreateNewContext (self .__window ,
272- cfgs [best ],
273- typ ,
274- None , # share list
275- GL .GL_TRUE ) # direct
268+ extensions = GLX .glXQueryExtensionsString (self .__window , screen )
269+ if "GLX_ARB_create_context" not in extensions or True : # FIXME HERE old style then:
270+ typ = GLX .GLX_RGBA_TYPE #
271+ self .__context = GLX .glXCreateNewContext (self .__window ,
272+ cfgs [best ],
273+ typ ,
274+ None , # share list
275+ GL .GL_TRUE ) # direct
276+ else :
277+ s = "glXCreateContextAttribsARB"
278+ # FAILING HERE
279+ p = GLX .glXGetProcAddress ( c_char_p ( s ) )
280+
281+ print (p )
282+ if not p :
283+ p = GLX .glXGetProcAddressARB ( ( GL .GLubyte * len (s )).from_buffer_copy (s ) )
284+ print (p )
285+ if p :
286+ print (" p is true" )
287+ p .restype = GLX .GLXContext
288+ p .argtypes = [POINTER (Display ),
289+ GLX .GLXFBConfig ,
290+ GLX .GLXContext ,
291+ c_bool ,
292+ POINTER (c_int )]
293+ arb_attrs = fbatt [:- 1 ] + [ ]
294+
295+ # GLX.GLX_CONTEXT_MAJOR_VERSION_ARB , 3
296+ # GLX.GLX_CONTEXT_MINOR_VERSION_ARB , 1,
297+ # 0 ]
298+ #
299+ # GLX.GLX_CONTEXT_FLAGS_ARB
300+ # GLX.GLX_CONTEXT_PROFILE_MASK_ARB
301+ #]
302+ # import pdb
303+ # pdb.set_trace()
304+ self .__context = p ( self .__window , cfgs [best ], None , GL .GL_TRUE ,
305+ (GL .GLint * len (arb_attrs ))(* arb_attrs ) )
276306 if not self .__context :
277307 print ("Failed to create context" )
278308 print ("Is Direct?: " , GLX .glXIsDirect ( self .__window , self .__context ))
0 commit comments