[PyOpenGL-Users] Re: [wxPython-users] Multiple wxGLCanvas in one process
Brought to you by:
mcfletch
From: Mike C. F. <mcf...@ro...> - 2004-08-02 22:21:49
|
I sit corrected. I played around with stopping and starting that test-case with the external buttons, but never thought to check the keyboard/mouse event bindings. This does appear to be something weird going on at the wxPython level. In particular, the context windows appear to not properly restrict certain types of events to the context to which they are applied. That is, if you do this: EVT_LEFT_DOWN( self, self.wxOnMouseButton ) EVT_RIGHT_DOWN( self, self.wxOnMouseButton ) EVT_MIDDLE_DOWN( self, self.wxOnMouseButton ) EVT_LEFT_UP( self, self.wxOnMouseButton ) EVT_RIGHT_UP( self, self.wxOnMouseButton ) EVT_MIDDLE_UP( self, self.wxOnMouseButton ) EVT_MOTION( self, self.wxOnMouseMove ) as OpenGLContext does, where self is a wxGLCanvas-derived class, you do get the mouse-events registered, but *all* of the contexts direct their events to the last-created context AFAICS... that is, the different context windows appear to share a single dispatch table, so the last context to call EVT_* will be the only one with active callbacks. Same problem shows up for keyboard bindings (EVT_KEY_DOWN, EVT_KEY_UP, EVT_CHAR). That would *seem* to be a wxPython bug (there's nothing OpenGL specific here, the window is getting passed a Python function to call, that function just happens to manipulate the OpenGL context(s)). BTW, the EVT_PAINT, EVT_SIZE, and EVT_ERASE_BACKGROUND events *do* appear to be properly routed, it's just the keyboard/mouse events that appear to be shared among the contexts. Sorry for the wasted bandwidth all, this should be discussed on wxPython list after all. Have fun, Mike Mike C. Fletcher wrote: > Can't really give much help without considerably more information > (such as *what* is showing up as shared between the contexts). It's > definitely possible to run multiple OpenGL contexts within a wxPython > application, at least in my limited testing. I've attached a script > which creates two independent OpenGLContext contexts within the same > frame. OpenGLContext is fairly anal about making sure everything > occurs within SetCurrent calls, but you say you're doing that already. ... ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |