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;
}
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)
{
// 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);
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()
// 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()
{
// 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);
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) )
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);
// (for key events).
event.Skip();
- if(event.LeftIsDown())
+ if (event.LeftIsDown())
{
- if(!dragging)
+ if (!dragging)
{
dragging = 1;
}
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);
glEnable( GL_VERTEX_ARRAY );
glEnable( GL_NORMAL_ARRAY );
}
+
+ InitMaterials();
+ LoadSurface("isosurf.dat.gz");
}