X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6bddd8c5f3cf709fc95747a4fe211690456e157d..55c56a6d80f0ee4a4bf2add6ba1f62c02cbfc23e:/utils/wxPython/demo/wxGLCanvas.py diff --git a/utils/wxPython/demo/wxGLCanvas.py b/utils/wxPython/demo/wxGLCanvas.py index 98ccbd9dba..2da77bfa2a 100644 --- a/utils/wxPython/demo/wxGLCanvas.py +++ b/utils/wxPython/demo/wxGLCanvas.py @@ -6,6 +6,15 @@ try: except ImportError: haveGLCanvas = false +try: + # The Python OpenGL package can be found at + # http://starship.python.net:9673/crew/da/Code/PyOpenGL/ + from OpenGL.GL import * + from OpenGL.GLUT import * + haveOpenGL = true +except ImportError: + haveOpenGL = false + #---------------------------------------------------------------------- if not haveGLCanvas: @@ -15,21 +24,38 @@ if not haveGLCanvas: dlg.ShowModal() dlg.Destroy() -else: +elif not haveOpenGL: + def runTest(frame, nb, log): + dlg = wxMessageDialog(frame, + 'The OpenGL package was not found. You can get it at\n' + 'http://starship.python.net:9673/crew/da/Code/PyOpenGL/', + 'Sorry', wxOK | wxICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() +else: def runTest(frame, nb, log): - #win = TestGLCanvas(nb) - #return win - win = wxFrame(frame, -1, "GL Cube", wxDefaultPosition, wxSize(400,300)) - canvas = TestGLCanvas(win) + win = wxFrame(frame, -1, "GL Demos", wxDefaultPosition, wxSize(300,300)) + CubeCanvas(win) + #MySplitter(win) frame.otherWin = win win.Show(true) return None + class MySplitter(wxSplitterWindow): + def __init__(self, parent): + wxSplitterWindow.__init__(self, parent, -1) + cube = CubeCanvas(self) + cone = ConeCanvas(self) + + self.SplitVertically(cube, cone) + self.SetSashPosition(300) + + - class TestGLCanvas(wxGLCanvas): + class CubeCanvas(wxGLCanvas): def __init__(self, parent): wxGLCanvas.__init__(self, parent, -1) EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) @@ -38,10 +64,9 @@ else: def OnEraseBackground(self, event): pass # Do nothing, to avoid flashing. - def OnSize(self, event): size = self.GetClientSize() - if self.GetContext() != 'NULL': + if self.GetContext(): self.SetCurrent() glViewport(0, 0, size.width, size.height) @@ -49,12 +74,8 @@ else: def OnPaint(self, event): dc = wxPaintDC(self) - ctx = self.GetContext() - if ctx == "NULL": return - self.SetCurrent() - if not self.init: self.InitGL() self.init = true @@ -123,8 +144,70 @@ else: + class ConeCanvas(wxGLCanvas): + def __init__(self, parent): + wxGLCanvas.__init__(self, parent, -1) + EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) + self.init = false + def OnEraseBackground(self, event): + pass # Do nothing, to avoid flashing. + def OnSize(self, event): + size = self.GetClientSize() + if self.GetContext(): + self.SetCurrent() + glViewport(0, 0, size.width, size.height) + + def GLInit( self ): + glMatrixMode(GL_PROJECTION); + # camera frustrum setup + glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); + glMaterial(GL_FRONT, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) + glMaterial(GL_FRONT, GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0]) + glMaterial(GL_FRONT, GL_SPECULAR, [1.0, 0.0, 1.0, 1.0]) + glMaterial(GL_FRONT, GL_SHININESS, 50.0) + glLight(GL_LIGHT0, GL_AMBIENT, [0.0, 1.0, 0.0, 1.0]) + glLight(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) + glLight(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) + glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0]); + glLightModel(GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) + glDepthFunc(GL_LESS) + glEnable(GL_DEPTH_TEST) + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + + + def OnPaint( self, event ): + dc = wxPaintDC(self) + if not self.init: + self.GLInit() + self.init = true + + ### Tell system to use _this_ glcanvas for all commands + self.SetCurrent() + # clear color and depth buffers + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + # position viewer + glMatrixMode(GL_MODELVIEW); + # use a fresh transformation matrix + glPushMatrix() + # position object + glTranslate(0.0, 0.0, -2.0); + glRotate(30.0, 1.0, 0.0, 0.0); + glRotate(30.0, 0.0, 1.0, 0.0); + + ### From cone.py + glTranslate(0, -1, 0) + glRotate(250, 1, 0, 0) + glutSolidCone(1, 2, 50, 10) + glPopMatrix() + # push into visible buffer + self.SwapBuffers() + + +#---------------------------------------------------------------------- @@ -145,8 +228,9 @@ overview = """\ def _test(): class MyApp(wxApp): def OnInit(self): - frame = wxFrame(NULL, -1, "GL Cube", wxDefaultPosition, wxSize(400,300)) - win = TestGLCanvas(frame) + frame = wxFrame(NULL, -1, "GL Demos", wxDefaultPosition, wxSize(600,300)) + #win = ConeCanvas(frame) + MySplitter(frame) frame.Show(TRUE) self.SetTopWindow(frame) return TRUE