]> git.saurik.com Git - wxWidgets.git/commitdiff
applied SourceForge patch #479670 (fixes for OpenGL samples) by Paul Thiessen
authorGilles Depeyrot <gilles_depeyrot@mac.com>
Fri, 16 Nov 2001 07:17:37 +0000 (07:17 +0000)
committerGilles Depeyrot <gilles_depeyrot@mac.com>
Fri, 16 Nov 2001 07:17:37 +0000 (07:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/opengl/cube/cube.cpp
samples/opengl/cube/cube.h
samples/opengl/isosurf/isosurf.cpp
samples/opengl/penguin/penguin.cpp

index 886bbe12faa7c4f08fe784effaadaf46a6c59825..a617a4c7562dc950cd1de902c2a77cb0b65ff80d 100644 (file)
@@ -133,20 +133,21 @@ unsigned long wxStopWatch( unsigned long *sec_base )
 {
   unsigned long secs,msec;
 
-#ifndef __WXMSW__        // think every unice has gettimeofday
-  struct timeval tv;
-  gettimeofday( &tv, (struct timezone *)NULL );
-  secs = tv.tv_sec;
-  msec = tv.tv_usec/1000;
-#else
+#if defined(__WXMSW__)
   struct timeb tb;
-
   ftime( &tb );
-
   secs = tb.time;
-
   msec = tb.millitm;
-
+#elif defined(__WXMAC__) && !defined(__DARWIN__)
+  wxLongLong tl = wxGetLocalTimeMillis();
+  secs = (unsigned long) (tl.GetValue() / 1000);
+  msec = (unsigned long) (tl.GetValue() - secs*1000);
+#else
+  // think every unice has gettimeofday
+  struct timeval tv;
+  gettimeofday( &tv, (struct timezone *)NULL );
+  secs = tv.tv_sec;
+  msec = tv.tv_usec/1000;
 #endif
 
   if( *sec_base == 0 )
@@ -214,6 +215,11 @@ void TestGLCanvas::Render()
         m_init = TRUE;
     }
 
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glFrustum(-0.5F, 0.5F, -0.5F, 0.5F, 1.0F, 3.0F);
+    glMatrixMode(GL_MODELVIEW);
+
     /* clear color and depth buffers */
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
@@ -269,15 +275,18 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 
 void TestGLCanvas::OnSize(wxSizeEvent& event)
 {
-    int width, height;
-    GetClientSize(& width, & height);
+    // this is also necessary to update the context on some platforms
+    wxGLCanvas::OnSize(event);
 
+    // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
+               int w, h;
+               GetClientSize(&w, &h);
 #ifndef __WXMOTIF__
     if (GetContext())
 #endif
     {
         SetCurrent();
-        glViewport(0, 0, width, height);
+        glViewport(0, 0, (GLint) w, (GLint) h);
     }
 }
 
@@ -375,7 +384,11 @@ void TestGLCanvas::OnKeyDown( wxKeyEvent& event )
     {
         Action( m_Key, m_LastTime-m_StartTime, currTime-m_StartTime );
 
+#if defined(__WXMAC__) && !defined(__DARWIN__)
+        m_LastRedraw = currTime;       // wxStopWatch() doesn't work on Mac...
+#else
         m_LastRedraw = wxStopWatch(&m_secbase) - m_gsynct;
+#endif
         m_LastTime = currTime;
     }
 
@@ -452,7 +465,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& event)
   frame->SetMenuBar(menuBar);
 
   frame->m_canvas = new TestGLCanvas( frame, *m_canvas, -1,
-               wxPoint(0, 0), wxSize(200, 200) );
+               wxDefaultPosition, wxDefaultSize );
 
   // Show the frame
   frame->Show(TRUE);
@@ -508,7 +521,7 @@ bool MyApp::OnInit(void)
 
   frame->SetMenuBar(menuBar);
 
-  frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200));
+  frame->m_canvas = new TestGLCanvas(frame, -1, wxDefaultPosition, wxDefaultSize);
 
   // Show the frame
   frame->Show(TRUE);
index b7af99ee0e013048b2b112e0de703d6bad6c5fe1..be348b54275bb00c61bad33997c66e5550a9f33d 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_CUBE_H_
 #define _WX_CUBE_H_
 
-#include <wx/glcanvas.h>
+#include "wx/glcanvas.h"
 
 // Define a new application type
 class MyApp: public wxApp
index 3d3bda3dc983ef0de7de25fa73498d4c32bb8724..fbb0a5e75219301d6533b8bdecdde3f9fd8ae360 100644 (file)
 #  include <GL/glu.h>
 #endif
 
+// disabled because this has apparently changed in OpenGL 1.2, so doesn't link
+// correctly if this is on...
+#ifdef GL_EXT_vertex_array
+#undef GL_EXT_vertex_array
+#endif
+
 #include "isosurf.h"
 
 // The following part is taken largely unchanged from the original C Version
@@ -197,13 +203,6 @@ static void Init(void)
 #endif
 }
 
-
-static void Reshape(int width, int height)
-{
-  glViewport(0, 0, (GLint)width, (GLint)height);
-}
-
-
 static GLenum Args(int argc, char **argv)
 {
    GLint i;
@@ -282,7 +281,7 @@ bool MyApp::OnInit(void)
       doubleBuffer = GL_FALSE;
   }
  
-  frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200),
+  frame->m_canvas = new TestGLCanvas(frame, -1, wxDefaultPosition, wxDefaultSize,
                                      0, "TestGLCanvas", gl_attrib );
 
   // Show the frame
@@ -363,14 +362,19 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 
 void TestGLCanvas::OnSize(wxSizeEvent& event)
 {
+    // this is also necessary to update the context on some platforms
+    wxGLCanvas::OnSize(event);
+    
+    // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
+               int w, h;
+               GetClientSize(&w, &h);
 #ifndef __WXMOTIF__
-    if (!GetContext()) return;
+    if (GetContext())
 #endif
-
+    {
     SetCurrent();
-    int width, height;
-    GetClientSize(& width, & height);
-    Reshape(width, height);
+        glViewport(0, 0, (GLint) w, (GLint) h);
+    }
 }
 
 void TestGLCanvas::OnChar(wxKeyEvent& event)
index 7e2e82a16d63d551ff7a59a678885a6b113a4fe9..1b09d9530ca8b1302c14d562088558a0f7b772cc 100644 (file)
@@ -57,7 +57,7 @@ bool MyApp::OnInit(void)
   menuBar->Append(fileMenu, "&File");
   frame->SetMenuBar(menuBar);
 
-  frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200));
+  frame->m_canvas = new TestGLCanvas(frame, -1, wxPoint(0, 0), wxSize(200, 200), wxSUNKEN_BORDER);
 
   /* Load file wiht mesh data */
   frame->m_canvas->LoadLWO( "penguin.lwo" );
@@ -155,9 +155,19 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 
 void TestGLCanvas::OnSize(wxSizeEvent& event)
 {
-    // the viewport must be initialized this way, not glViewport
     // this is also necessary to update the context on some platforms
     wxGLCanvas::OnSize(event);
+    
+    // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
+               int w, h;
+               GetClientSize(&w, &h);
+#ifndef __WXMOTIF__
+    if (GetContext())
+#endif
+    {
+        SetCurrent();
+        glViewport(0, 0, (GLint) w, (GLint) h);
+    }
 }
 
 void TestGLCanvas::OnEraseBackground(wxEraseEvent& event)