applied SourceForge patch #479670 (fixes for OpenGL samples) by Paul Thiessen
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -133,20 +133,21 @@ unsigned long wxStopWatch( unsigned long *sec_base )
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  unsigned long secs,msec;
 | 
					  unsigned long secs,msec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __WXMSW__        // think every unice has gettimeofday
 | 
					#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;
 | 
					  struct timeval tv;
 | 
				
			||||||
  gettimeofday( &tv, (struct timezone *)NULL );
 | 
					  gettimeofday( &tv, (struct timezone *)NULL );
 | 
				
			||||||
  secs = tv.tv_sec;
 | 
					  secs = tv.tv_sec;
 | 
				
			||||||
  msec = tv.tv_usec/1000;
 | 
					  msec = tv.tv_usec/1000;
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  struct timeb tb;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ftime( &tb );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  secs = tb.time;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  msec = tb.millitm;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if( *sec_base == 0 )
 | 
					  if( *sec_base == 0 )
 | 
				
			||||||
@@ -214,6 +215,11 @@ void TestGLCanvas::Render()
 | 
				
			|||||||
        m_init = TRUE;
 | 
					        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 */
 | 
					    /* clear color and depth buffers */
 | 
				
			||||||
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 | 
					    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -269,15 +275,18 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TestGLCanvas::OnSize(wxSizeEvent& event)
 | 
					void TestGLCanvas::OnSize(wxSizeEvent& event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int width, height;
 | 
					    // this is also necessary to update the context on some platforms
 | 
				
			||||||
    GetClientSize(& width, & height);
 | 
					    wxGLCanvas::OnSize(event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
 | 
				
			||||||
 | 
							int w, h;
 | 
				
			||||||
 | 
							GetClientSize(&w, &h);
 | 
				
			||||||
#ifndef __WXMOTIF__
 | 
					#ifndef __WXMOTIF__
 | 
				
			||||||
    if (GetContext())
 | 
					    if (GetContext())
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        SetCurrent();
 | 
					        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 );
 | 
					        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;
 | 
					        m_LastRedraw = wxStopWatch(&m_secbase) - m_gsynct;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        m_LastTime = currTime;
 | 
					        m_LastTime = currTime;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -452,7 +465,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& event)
 | 
				
			|||||||
  frame->SetMenuBar(menuBar);
 | 
					  frame->SetMenuBar(menuBar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  frame->m_canvas = new TestGLCanvas( frame, *m_canvas, -1,
 | 
					  frame->m_canvas = new TestGLCanvas( frame, *m_canvas, -1,
 | 
				
			||||||
               wxPoint(0, 0), wxSize(200, 200) );
 | 
					               wxDefaultPosition, wxDefaultSize );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Show the frame
 | 
					  // Show the frame
 | 
				
			||||||
  frame->Show(TRUE);
 | 
					  frame->Show(TRUE);
 | 
				
			||||||
@@ -508,7 +521,7 @@ bool MyApp::OnInit(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  frame->SetMenuBar(menuBar);
 | 
					  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
 | 
					  // Show the frame
 | 
				
			||||||
  frame->Show(TRUE);
 | 
					  frame->Show(TRUE);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
#ifndef _WX_CUBE_H_
 | 
					#ifndef _WX_CUBE_H_
 | 
				
			||||||
#define _WX_CUBE_H_
 | 
					#define _WX_CUBE_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <wx/glcanvas.h>
 | 
					#include "wx/glcanvas.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Define a new application type
 | 
					// Define a new application type
 | 
				
			||||||
class MyApp: public wxApp
 | 
					class MyApp: public wxApp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,12 @@
 | 
				
			|||||||
#  include <GL/glu.h>
 | 
					#  include <GL/glu.h>
 | 
				
			||||||
#endif
 | 
					#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"
 | 
					#include "isosurf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The following part is taken largely unchanged from the original C Version
 | 
					// The following part is taken largely unchanged from the original C Version
 | 
				
			||||||
@@ -197,13 +203,6 @@ static void Init(void)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void Reshape(int width, int height)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  glViewport(0, 0, (GLint)width, (GLint)height);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static GLenum Args(int argc, char **argv)
 | 
					static GLenum Args(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
   GLint i;
 | 
					   GLint i;
 | 
				
			||||||
@@ -282,7 +281,7 @@ bool MyApp::OnInit(void)
 | 
				
			|||||||
      doubleBuffer = GL_FALSE;
 | 
					      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 );
 | 
					                                     0, "TestGLCanvas", gl_attrib );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Show the frame
 | 
					  // Show the frame
 | 
				
			||||||
@@ -363,14 +362,19 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TestGLCanvas::OnSize(wxSizeEvent& event)
 | 
					void TestGLCanvas::OnSize(wxSizeEvent& event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifndef __WXMOTIF__
 | 
					    // this is also necessary to update the context on some platforms
 | 
				
			||||||
    if (!GetContext()) return;
 | 
					    wxGLCanvas::OnSize(event);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
 | 
				
			||||||
 | 
							int w, h;
 | 
				
			||||||
 | 
							GetClientSize(&w, &h);
 | 
				
			||||||
 | 
					#ifndef __WXMOTIF__
 | 
				
			||||||
 | 
					    if (GetContext())
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
    SetCurrent();
 | 
					    SetCurrent();
 | 
				
			||||||
    int width, height;
 | 
					        glViewport(0, 0, (GLint) w, (GLint) h);
 | 
				
			||||||
    GetClientSize(& width, & height);
 | 
					    }
 | 
				
			||||||
    Reshape(width, height);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestGLCanvas::OnChar(wxKeyEvent& event)
 | 
					void TestGLCanvas::OnChar(wxKeyEvent& event)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ bool MyApp::OnInit(void)
 | 
				
			|||||||
  menuBar->Append(fileMenu, "&File");
 | 
					  menuBar->Append(fileMenu, "&File");
 | 
				
			||||||
  frame->SetMenuBar(menuBar);
 | 
					  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 */
 | 
					  /* Load file wiht mesh data */
 | 
				
			||||||
  frame->m_canvas->LoadLWO( "penguin.lwo" );
 | 
					  frame->m_canvas->LoadLWO( "penguin.lwo" );
 | 
				
			||||||
@@ -155,9 +155,19 @@ void TestGLCanvas::OnPaint( wxPaintEvent& event )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TestGLCanvas::OnSize(wxSizeEvent& 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
 | 
					    // this is also necessary to update the context on some platforms
 | 
				
			||||||
    wxGLCanvas::OnSize(event);
 | 
					    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)
 | 
					void TestGLCanvas::OnEraseBackground(wxEraseEvent& event)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user