]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/opengl/isosurf/isosurf.cpp
Extract compiler-specific macro definitions in a new wx/compiler.h.
[wxWidgets.git] / samples / opengl / isosurf / isosurf.cpp
index fb8039efa78b22c5e83278f97b20404a29358061..66cc2a31c4c99a722577b7221538e77921ef1b1e 100644 (file)
@@ -51,14 +51,13 @@ GLboolean g_lighting = GL_TRUE;
 
 IMPLEMENT_APP(MyApp)
 
-// `Main program' equivalent, creating windows and returning main app frame
 bool MyApp::OnInit()
 {
     if ( !wxApp::OnInit() )
         return false;
 
     // Create the main frame window
-    SetTopWindow(new MyFrame(NULL, wxT("wxWidgets OpenGL Isosurf Sample")));
+    new MyFrame(NULL, wxT("wxWidgets OpenGL Isosurf Sample"));
 
     return true;
 }
@@ -93,9 +92,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(wxID_EXIT, MyFrame::OnExit)
 END_EVENT_TABLE()
 
-// My frame constructor
 MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos,
-    const wxSize& size, long style)
+                 const wxSize& size, long style)
     : wxFrame(frame, wxID_ANY, title, pos, size, style),
       m_canvas(NULL)
 {
@@ -105,9 +103,9 @@ MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos,
     // Make a menubar
     wxMenu *fileMenu = new wxMenu;
 
-    fileMenu->Append(wxID_EXIT, _T("E&xit"));
+    fileMenu->Append(wxID_EXIT, wxT("E&xit"));
     wxMenuBar *menuBar = new wxMenuBar;
-    menuBar->Append(fileMenu, _T("&File"));
+    menuBar->Append(fileMenu, wxT("&File"));
     SetMenuBar(menuBar);
 
 
@@ -138,10 +136,13 @@ MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos,
         g_doubleBuffer = GL_FALSE;
     }
 
+    m_canvas = new TestGLCanvas(this, wxID_ANY, gl_attrib);
+
     // Show the frame
     Show(true);
+    Raise();
 
-    m_canvas = new TestGLCanvas(this, wxID_ANY, gl_attrib);
+    m_canvas->InitGL();
 }
 
 MyFrame::~MyFrame()
@@ -179,13 +180,6 @@ TestGLCanvas::TestGLCanvas(wxWindow *parent,
 
     // Explicitly create a new rendering context instance for this canvas.
     m_glRC = new wxGLContext(this);
-
-    // Make the new context current (activate it for use) with this canvas.
-    SetCurrent(*m_glRC);
-
-    InitGL();
-    InitMaterials();
-    LoadSurface("isosurf.dat.gz");
 }
 
 TestGLCanvas::~TestGLCanvas()
@@ -212,7 +206,7 @@ void TestGLCanvas::LoadSurface(const wxString& filename)
 
     {
         // we suppose to have in input a text file containing floating numbers
-        // space/newline-separed... first 3 numbers are the coordinates of a
+        // space/newline-separated... first 3 numbers are the coordinates of a
         // vertex and the following 3 are the relative vertex normal and so on...
 
         wxTextInputStream inFile(*stream);
@@ -232,8 +226,12 @@ void TestGLCanvas::LoadSurface(const wxString& filename)
 
     delete stream;
 
-    wxLogMessage(_T("Loaded %d vertices, %d triangles from '%s'"),
+    wxLogMessage(wxT("Loaded %d vertices, %d triangles from '%s'"),
                  m_numverts, m_numverts-2, filename.c_str());
+
+    // NOTE: for some reason under wxGTK the following is required to avoid that
+    //       the surface gets rendered in a small rectangle in the top-left corner of the frame
+    PostSizeEventToParent();
 }
 
 void TestGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event) )
@@ -277,6 +275,8 @@ void TestGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event) )
 
 void TestGLCanvas::OnSize(wxSizeEvent& event)
 {
+    if ( !IsShownOnScreen() )
+        return;
     // This is normally only necessary if there is more than one wxGLCanvas
     // or more than one wxGLContext in the application.
     SetCurrent(*m_glRC);
@@ -345,9 +345,9 @@ void TestGLCanvas::OnMouseEvent(wxMouseEvent& event)
     // (for key events).
     event.Skip();
 
-    if(event.LeftIsDown())
+    if (event.LeftIsDown())
     {
-        if(!dragging)
+        if (!dragging)
         {
             dragging = 1;
         }
@@ -404,6 +404,9 @@ void TestGLCanvas::InitMaterials()
 
 void TestGLCanvas::InitGL()
 {
+    // Make the new context current (activate it for use) with this canvas.
+    SetCurrent(*m_glRC);
+
     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
 
     glShadeModel(GL_SMOOTH);
@@ -426,5 +429,8 @@ void TestGLCanvas::InitGL()
         glEnable( GL_VERTEX_ARRAY );
         glEnable( GL_NORMAL_ARRAY );
     }
+
+    InitMaterials();
+    LoadSurface("isosurf.dat.gz");
 }