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:
Gilles Depeyrot
2001-11-16 07:17:37 +00:00
parent a7c7c1549c
commit 9d705dfa81
4 changed files with 58 additions and 31 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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)
{ {
// 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__ #ifndef __WXMOTIF__
if (!GetContext()) return; if (GetContext())
#endif #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)

View File

@@ -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)