@@ -81,7 +81,8 @@ def printContext(self):
8181 print (" GL_CONTEXT_COMPATIBILITY_PROFILE_BIT :" ,
8282 bool ( msk & GL .GL_CONTEXT_COMPATIBILITY_PROFILE_BIT ) )
8383 except :
84- raise
84+ print ("Old context errors arose" )
85+ # raise
8586
8687 def tkCreateContext ( self ):
8788 # Platform dependent part
@@ -192,7 +193,7 @@ def tkSwapBuffers( self ):
192193 _x11lib = cdll .LoadLibrary (util .find_library ( "X11" ) )
193194 XOpenDisplay = _x11lib .XOpenDisplay
194195 XOpenDisplay .argtypes = [c_char_p ]
195- XOpenDisplay .restype = POINTER (Display )
196+ XOpenDisplay .restype = POINTER (Display )
196197
197198 Colormap = c_void_p
198199
@@ -203,6 +204,20 @@ def tkSwapBuffers( self ):
203204 GLX .GLX_DEPTH_SIZE , 16 ,
204205 0 ,
205206 ]
207+ fbatt = [ GLX .GLX_X_RENDERABLE , 1 ,
208+ GLX .GLX_DRAWABLE_TYPE , GLX .GLX_WINDOW_BIT ,
209+ GLX .GLX_RENDER_TYPE , GLX .GLX_RGBA_BIT ,
210+ GLX .GLX_RED_SIZE , 4 ,
211+ GLX .GLX_GREEN_SIZE , 4 ,
212+ GLX .GLX_BLUE_SIZE , 4 ,
213+ # GLX.GLX_ALPHA_SIZE , 4,
214+ GLX .GLX_DEPTH_SIZE , 16 ,
215+ GLX .GLX_DOUBLEBUFFER , 1 ,
216+ # GLX.GLX_STENCIL_SIZE , 8,
217+ # GLX.GLX_X_VISUAL_TYPE , GLX.GLX_TRUE_COLOR,
218+ # GLX.GLX_CONFIG_CAVEAT , GLX.GLX_NONE,
219+ 0 ,
220+ ]
206221
207222 # Inherits the base and fills in the 3 platform dependent functions
208223 class OpenGLFrame ( baseOpenGLFrame ):
@@ -212,17 +227,58 @@ def tkCreateContext( self ):
212227 major = c_int (0 )
213228 minor = c_int (0 )
214229 GLX .glXQueryVersion ( self .__window , major , minor )
215- print ("GLX version:" ,major ,minor )
230+ print ("GLX version:" ,major . value ,minor . value )
216231 visual = GLX .glXChooseVisual ( self .__window , 0 ,
217- (GL .GLint * len (att ))(* att ) )
232+ (GL .GLint * len (att ))(* att ) )
218233 if not visual :
219234 _log .error ("glXChooseVisual call failed" )
220- self .__context = GLX .glXCreateContext (self .__window , visual ,
221- None ,
222- GL .GL_TRUE )
223- # This generally gets a 3.0 version even if the setup is newer
224- # ... needs ARB stuff ?
225- GLX .glXMakeCurrent (self .__window , self ._wid , self .__context )
235+ if major .value == 1 and minor .value < 3 : # e.g. 1.2 and down
236+ print ( visual .contents .visualid )
237+ self .__context = GLX .glXCreateContext (self .__window ,
238+ visual ,
239+ None ,
240+ GL .GL_TRUE )
241+ else :
242+ ncfg = GL .GLint (0 )
243+ XDefaultScreen = _x11lib .XDefaultScreen
244+ XDefaultScreen .argtypes = [POINTER (Display )]
245+ XOpenDisplay .restype = c_int
246+ screen = XDefaultScreen ( self .__window )
247+ print ("Screen is " ,screen )
248+ cfgs = GLX .glXChooseFBConfig ( self .__window ,
249+ screen ,
250+ (GL .GLint * len (fbatt ))(* fbatt ),
251+ ncfg )
252+ print ( "Number of configs" ,ncfg .value )
253+ print (visual .contents .visualid )
254+ best = - 1
255+ for i in range (ncfg .value ):
256+ vis = GLX .glXGetVisualFromFBConfig (self .__window , cfgs [i ])
257+ # print("i %d visualid %d:" %(i,vis.contents.visualid))
258+ if visual .contents .visualid == vis .contents .visualid :
259+ best = i
260+ if best >= 0 :
261+ print ("Got a matching visual?" ,best )
262+ else :
263+ print ("OH dear - visual does not match?" )
264+ best = 0
265+ typ = GLX .GLX_RGBA_TYPE #
266+
267+ self .__context = GLX .glXCreateNewContext (self .__window ,
268+ cfgs [best ],
269+ typ ,
270+ None , # share list
271+ GL .GL_TRUE ) # direct
272+ if not self .__context :
273+ print ("Failed to create context" )
274+ print ("Is Direct?: " , GLX .glXIsDirect ( self .__window , self .__context ))
275+ # print("wid: ",self._wid)
276+ # self._wid = GLX.glXCreateWindow( self.__window, cfgs[best], self._wid, None)
277+ # print("wid: ",self._wid)
278+ GLX .glXMakeContextCurrent ( self .__window , self ._wid , self ._wid ,
279+ self .__context )
280+ print ("Done making context" )
281+
226282
227283 def tkMakeCurrent ( self ):
228284 if self .winfo_ismapped ():
0 commit comments