Thread: [PyOpenGL-Users] Rendering performance under wxPython
Brought to you by:
mcfletch
From: Jason H. <jas...@vo...> - 2008-06-02 20:57:17
|
import wx from wx import glcanvas from OpenGL.GL import * from OpenGL.GLUT import * class Viewport(glcanvas.GLCanvas): def __init__(self, parent, canvasSize): glcanvas.GLCanvas.__init__(self, parent, -1, size=canvasSize) self.init = False self.size = canvasSize self.Viewpoint = (0.0, 0.0, 0.0) self.NearClip = -100.0 self.FarClip = 100.0 self.CurrentCursorPos = None self.LastClickPos = None self.LastCursorPos = None self.IsDragging = False self.Zoom = 1.0 self.ZoomSpeed = 0.1 self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_MIDDLE_DOWN, self.OnMiddleButtonDown) self.Bind(wx.EVT_MIDDLE_UP, self.OnMiddleButtonUp) self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) def AddZoomPct(self, zoomPct): self.Zoom += zoomPct if self.Zoom < 0.1: self.Zoom = 0.1 if self.Zoom > 2.0: self.Zoom = 2.0 def OnMouseWheel(self, event): wheelRotation = event.GetWheelRotation() # Zoom In if wheelRotation > 0: self.AddZoomPct(-self.ZoomSpeed) cursor = wx.StockCursor(wx.CURSOR_MAGNIFIER) self.SetCursor(cursor) # Zoom Out elif wheelRotation < 0: self.AddZoomPct(self.ZoomSpeed) cursor = wx.StockCursor(wx.CURSOR_MAGNIFIER) self.SetCursor(cursor) cursor = wx.StockCursor(wx.CURSOR_DEFAULT) self.SetCursor(cursor) self.Refresh() def OnMouseMove(self, event): """ """ self.CurrentCursorPos = event.GetPosition() if self.IsDragging: diff = wx.Point() diff[0] = self.CurrentCursorPos[0] - self.LastClickPos[0] diff[1] = self.CurrentCursorPos[1] - self.LastClickPos[1] self.Viewpoint = (self.Viewpoint[0] + (float(diff[0]) / self.Size[0]), self.Viewpoint[1] - (float(diff[1]) / self.Size[1]), 0.0) self.LastClickPos = event.GetPosition() self.Refresh() def OnMiddleButtonUp(self, event): """ """ self.IsDragging = False self.CurrentCursorPos = event.GetPosition() self.LastCursorPos = self.CurrentCursorPos cursor = wx.StockCursor(wx.CURSOR_DEFAULT) self.SetCursor(cursor) def OnMiddleButtonDown(self, event): """ """ cursor = wx.StockCursor(wx.CURSOR_HAND) self.SetCursor(cursor) self.CurrentCursorPos = event.GetPosition() self.IsDragging = True self.LastClickPos = self.CurrentCursorPos self.LastCursorPos = self.CurrentCursorPos def OnEraseBackground(self, event): pass def OnSize(self, event): size = self.size = self.GetClientSize() if self.GetContext(): self.SetCurrent() glViewport(0, 0, size.width, size.height) event.Skip() def OnPaint(self, event): dc = wx.PaintDC(self) self.SetCurrent() if not self.init: self.InitGL() self.init = True self.OnDraw() class ViewportCanvas(Viewport): def InitGL(self): glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-1.0, 1.0, -1.0, 1.0, self.NearClip, self.FarClip) glMatrixMode(GL_MODELVIEW) glShadeModel(GL_FLAT) def OnDraw(self): glLoadIdentity() glScalef(1.0 / self.Zoom, 1.0 / self.Zoom, 1.0) glTranslatef(self.Viewpoint[0], self.Viewpoint[1], 0.0) glClearColor(0.5, 0.5, 0.5, 0.0) glClear(GL_COLOR_BUFFER_BIT) glPointSize(4.0) a = 0.0 b = 0.0 x = 0.0 y = 0.0 dis = 0.1 num = 100 glBegin(GL_POINTS) for h in range(1,num): x = 0.0 for w in range(1, num): glVertex2f(a + x, b + y) x += dis y += dis glEnd() self.size = self.GetClientSize() self.SwapBuffers() class EditorWindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, size=(700, 500)) self.sizer = wx.BoxSizer() self.viewport = ViewportCanvas(self, self.Size) self.sizer.Add(self.viewport) self.SetSizer(self.sizer) self.Show() if __name__ == '__main__': app = wx.App() frame = EditorWindow(None, -1, "Editor") app.MainLoop() |
From: Jason H. <jas...@vo...> - 2008-06-02 21:58:46
|
Ignore my previous post. I just learned about display lists and I no longer have any performance problems. In fact, I can now easily render over 120,000 points. -Jason From: Jason Hayes Sent: Monday, June 02, 2008 3:57 PM To: 'pyo...@li...' Subject: Rendering performance under wxPython Hi, I am pretty new to using PyOpenGL (and OpenGL in general) and had a rendering performance question. I am embedding an opengl canvas into a wx.Frame. On my canvas, I am simply rendering ~10,000 points and the performance is chugging. I'm trying to determine if the limiting factor is wxPython or PyOpenGL? I doubt that OpenGL really has a problem with this many points, but maybe I'm doing something wrong. Attached is a text file of the code. Any feedback is appreciated. Thanks. _________________________________ Jason Hayes Technical Art Director THQ / Volition "Whenever I'm about to do something, I think "would an idiot do that?" and if they would, I do not do that thing." - Dwight Schrute |
From: altern <al...@gm...> - 2008-06-19 09:22:35
|
hi jason i am interested myself on performance of pyopengl within wxpython. do you have some example of the new version that uses display lists you could share? thanks. enrike Jason Hayes(e)k dio: > > > Ignore my previous post. I just learned about display lists and I no > longer have any performance problems. In fact, I can now easily render > over 120,000 points. > > > > -Jason > > > > *From:* Jason Hayes > *Sent:* Monday, June 02, 2008 3:57 PM > *To:* 'pyo...@li...' > *Subject:* Rendering performance under wxPython > > > > Hi, I am pretty new to using PyOpenGL (and OpenGL in general) and had a > rendering performance question. I am embedding an opengl canvas into a > wx.Frame. On my canvas, I am simply rendering ~10,000 points and the > performance is chugging. I’m trying to determine if the limiting factor > is wxPython or PyOpenGL? I doubt that OpenGL really has a problem with > this many points, but maybe I’m doing something wrong. Attached is a > text file of the code. > > > > Any feedback is appreciated. Thanks. > > > > _________________________________ > > Jason Hayes > > Technical Art Director > > THQ / Volition > > > > "Whenever I'm about to do something, I think > > "would an *idiot* do that?" and if they would, > > I do /not/ do that thing." > > > > - Dwight Schrute > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > > > ------------------------------------------------------------------------ > > _______________________________________________ > PyOpenGL Homepage > http://pyopengl.sourceforge.net > _______________________________________________ > PyOpenGL-Users mailing list > PyO...@li... > https://lists.sourceforge.net/lists/listinfo/pyopengl-users |