X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fe3d9123c6968b452a95133c635069d6f7ae8ea5..85f138db83939ce7c59a942aaecca7fa98168db3:/src/msw/glcanvas.cpp diff --git a/src/msw/glcanvas.cpp b/src/msw/glcanvas.cpp index 2772f79ba4..eacc888687 100644 --- a/src/msw/glcanvas.cpp +++ b/src/msw/glcanvas.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: src/msw/glcanvas.cpp -// Purpose: wxGLCanvas, for using OpenGL with wxWindows under MS Windows +// Purpose: wxGLCanvas, for using OpenGL with wxWidgets under MS Windows // Author: Julian Smart // Modified by: // Created: 04/01/98 @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "glcanvas.h" #endif @@ -26,12 +26,40 @@ #include "wx/settings.h" #include "wx/intl.h" #include "wx/log.h" + #include "wx/app.h" #endif #include "wx/msw/private.h" +// DLL options compatibility check: +#include "wx/build.h" +WX_CHECK_BUILD_OPTIONS("wxGL") + #include "wx/glcanvas.h" +/* + The following two compiler directives are specific to the Microsoft Visual + C++ family of compilers + + Fundementally what they do is instruct the linker to use these two libraries + for the resolution of symbols. In essence, this is the equivalent of adding + these two libraries to either the Makefile or project file. + + This is NOT a recommended technique, and certainly is unlikely to be used + anywhere else in wxWidgets given it is so specific to not only wxMSW, but + also the VC compiler. However, in the case of opengl support, it's an + applicable technique as opengl is optional in setup.h This code (wrapped by + wxUSE_GLCANVAS), now allows opengl support to be added purely by modifying + setup.h rather than by having to modify either the project or DSP fle. + + See MSDN for further information on the exact usage of these commands. +*/ +#ifdef _MSC_VER +# pragma comment( lib, "opengl32" ) +# pragma comment( lib, "glu32" ) +#endif + + static const wxChar *wxGLCanvasClassName = wxT("wxGLCanvasClass"); static const wxChar *wxGLCanvasClassNameNoRedraw = wxT("wxGLCanvasClassNR"); @@ -42,21 +70,21 @@ LRESULT WXDLLEXPORT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, * GLContext implementation */ -wxGLContext::wxGLContext(bool isRGB, wxGLCanvas *win, const wxPalette& palette) +wxGLContext::wxGLContext(bool WXUNUSED(isRGB), wxGLCanvas *win, const wxPalette& WXUNUSED(palette)) { m_window = win; m_hDC = win->GetHDC(); m_glContext = wglCreateContext((HDC) m_hDC); - wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGl context") ); + wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGL context") ); wglMakeCurrent((HDC) m_hDC, m_glContext); } wxGLContext::wxGLContext( - bool isRGB, wxGLCanvas *win, - const wxPalette& palette, + bool WXUNUSED(isRGB), wxGLCanvas *win, + const wxPalette& WXUNUSED(palette), const wxGLContext *other /* for sharing display lists */ ) { @@ -65,7 +93,7 @@ wxGLContext::wxGLContext( m_hDC = win->GetHDC(); m_glContext = wglCreateContext((HDC) m_hDC); - wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGl context") ); + wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGL context") ); if( other != 0 ) wglShareLists( other->m_glContext, m_glContext ); @@ -106,17 +134,14 @@ void wxGLContext::SetCurrent() void wxGLContext::SetColour(const wxChar *colour) { - float r = 0.0; - float g = 0.0; - float b = 0.0; - wxColour *col = wxTheColourDatabase->FindColour(colour); - if (col) - { - r = (float)(col->Red()/256.0); - g = (float)(col->Green()/256.0); - b = (float)(col->Blue()/256.0); - glColor3f( r, g, b); - } + wxColour col = wxTheColourDatabase->Find(colour); + if (col.Ok()) + { + float r = (float)(col.Red()/256.0); + float g = (float)(col.Green()/256.0); + float b = (float)(col.Blue()/256.0); + glColor3f( r, g, b); + } } @@ -143,7 +168,6 @@ wxGLCanvas::wxGLCanvas(wxWindow *parent, wxWindowID id, if ( ret ) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); - SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); } m_hDC = (WXHDC) ::GetDC((HWND) GetHWND()); @@ -151,7 +175,7 @@ wxGLCanvas::wxGLCanvas(wxWindow *parent, wxWindowID id, SetupPixelFormat(attribList); SetupPalette(palette); - m_glContext = new wxGLContext(TRUE, this, palette); + m_glContext = new wxGLContext(true, this, palette); } wxGLCanvas::wxGLCanvas( wxWindow *parent, @@ -167,7 +191,6 @@ wxGLCanvas::wxGLCanvas( wxWindow *parent, if ( ret ) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); - SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); } m_hDC = (WXHDC) ::GetDC((HWND) GetHWND()); @@ -175,7 +198,7 @@ wxGLCanvas::wxGLCanvas( wxWindow *parent, SetupPixelFormat(attribList); SetupPalette(palette); - m_glContext = new wxGLContext(TRUE, this, palette, shared ); + m_glContext = new wxGLContext(true, this, palette, shared ); } // Not very useful for wxMSW, but this is to be wxGTK compliant @@ -192,7 +215,6 @@ wxGLCanvas::wxGLCanvas( wxWindow *parent, const wxGLCanvas *shared, wxWindowID i if ( ret ) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); - SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); } m_hDC = (WXHDC) ::GetDC((HWND) GetHWND()); @@ -202,7 +224,7 @@ wxGLCanvas::wxGLCanvas( wxWindow *parent, const wxGLCanvas *shared, wxWindowID i wxGLContext *sharedContext=0; if (shared) sharedContext=shared->GetContext(); - m_glContext = new wxGLContext(TRUE, this, palette, sharedContext ); + m_glContext = new wxGLContext(true, this, palette, sharedContext ); } wxGLCanvas::~wxGLCanvas() @@ -222,7 +244,7 @@ bool wxGLCanvas::Create(wxWindow *parent, long style, const wxString& name) { - static bool s_registeredGLCanvasClass = FALSE; + static bool s_registeredGLCanvasClass = false; // We have to register a special window class because we need // the CS_OWNDC style for GLCanvas. @@ -265,7 +287,7 @@ bool wxGLCanvas::Create(wxWindow *parent, if ( !::RegisterClass(&wndclass) ) { wxLogLastError(wxT("RegisterClass(wxGLCanvasClass)")); - return FALSE; + return false; } // Register the GLCanvas class name for windows which don't do full repaint @@ -279,16 +301,16 @@ bool wxGLCanvas::Create(wxWindow *parent, ::UnregisterClass(wxGLCanvasClassName, wxhInstance); - return FALSE; + return false; } - s_registeredGLCanvasClass = TRUE; + s_registeredGLCanvasClass = true; } - wxCHECK_MSG( parent, FALSE, wxT("can't create wxWindow without parent") ); + wxCHECK_MSG( parent, false, wxT("can't create wxWindow without parent") ); if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) ) - return FALSE; + return false; parent->AddChild(this); @@ -444,8 +466,8 @@ void wxGLCanvas::SetupPalette(const wxPalette& palette) if (m_palette.Ok()) { - SelectPalette((HDC) m_hDC, (HPALETTE) m_palette.GetHPALETTE(), FALSE); - RealizePalette((HDC) m_hDC); + ::SelectPalette((HDC) m_hDC, (HPALETTE) m_palette.GetHPALETTE(), FALSE); + ::RealizePalette((HDC) m_hDC); } } @@ -497,7 +519,7 @@ void wxGLCanvas::SwapBuffers() m_glContext->SwapBuffers(); } -void wxGLCanvas::OnSize(wxSizeEvent& event) +void wxGLCanvas::OnSize(wxSizeEvent& WXUNUSED(event)) { } @@ -525,10 +547,10 @@ void wxGLCanvas::OnQueryNewPalette(wxQueryNewPaletteEvent& event) ::SelectPalette((HDC) GetHDC(), (HPALETTE) GetPalette()->GetHPALETTE(), FALSE); ::RealizePalette((HDC) GetHDC()); Refresh(); - event.SetPaletteRealized(TRUE); + event.SetPaletteRealized(true); } else - event.SetPaletteRealized(FALSE); + event.SetPaletteRealized(false); } // I think this doesn't have to be propagated to child windows. @@ -548,11 +570,11 @@ void wxGLCanvas::OnPaletteChanged(wxPaletteChangedEvent& event) /* Give extensions proper function names. */ /* EXT_vertex_array */ -void glArrayElementEXT(GLint i) +void glArrayElementEXT(GLint WXUNUSED(i)) { } -void glColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) +void glColorPointerEXT(GLint WXUNUSED(size), GLenum WXUNUSED(type), GLsizei WXUNUSED(stride), GLsizei WXUNUSED(count), const GLvoid *WXUNUSED(pointer)) { } @@ -571,15 +593,15 @@ void glDrawArraysEXT(GLenum mode, GLint first, GLsizei count) #endif } -void glEdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *pointer) +void glEdgeFlagPointerEXT(GLsizei WXUNUSED(stride), GLsizei WXUNUSED(count), const GLboolean *WXUNUSED(pointer)) { } -void glGetPointervEXT(GLenum pname, GLvoid* *params) +void glGetPointervEXT(GLenum WXUNUSED(pname), GLvoid* *WXUNUSED(params)) { } -void glIndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) +void glIndexPointerEXT(GLenum WXUNUSED(type), GLsizei WXUNUSED(stride), GLsizei WXUNUSED(count), const GLvoid *WXUNUSED(pointer)) { } @@ -598,7 +620,7 @@ void glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid #endif } -void glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) +void glTexCoordPointerEXT(GLint WXUNUSED(size), GLenum WXUNUSED(type), GLsizei WXUNUSED(stride), GLsizei WXUNUSED(count), const GLvoid *WXUNUSED(pointer)) { } @@ -617,33 +639,33 @@ void glVertexPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, } /* EXT_color_subtable */ -void glColorSubtableEXT(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *table) +void glColorSubtableEXT(GLenum WXUNUSED(target), GLsizei WXUNUSED(start), GLsizei WXUNUSED(count), GLenum WXUNUSED(format), GLenum WXUNUSED(type), const GLvoid *WXUNUSED(table)) { } /* EXT_color_table */ -void glColorTableEXT(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) +void glColorTableEXT(GLenum WXUNUSED(target), GLenum WXUNUSED(internalformat), GLsizei WXUNUSED(width), GLenum WXUNUSED(format), GLenum WXUNUSED(type), const GLvoid *WXUNUSED(table)) { } -void glCopyColorTableEXT(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) +void glCopyColorTableEXT(GLenum WXUNUSED(target), GLenum WXUNUSED(internalformat), GLint WXUNUSED(x), GLint WXUNUSED(y), GLsizei WXUNUSED(width)) { } -void glGetColorTableEXT(GLenum target, GLenum format, GLenum type, GLvoid *table) +void glGetColorTableEXT(GLenum WXUNUSED(target), GLenum WXUNUSED(format), GLenum WXUNUSED(type), GLvoid *WXUNUSED(table)) { } -void glGetColorTableParamaterfvEXT(GLenum target, GLenum pname, GLfloat *params) +void glGetColorTableParamaterfvEXT(GLenum WXUNUSED(target), GLenum WXUNUSED(pname), GLfloat *WXUNUSED(params)) { } -void glGetColorTavleParameterivEXT(GLenum target, GLenum pname, GLint *params) +void glGetColorTavleParameterivEXT(GLenum WXUNUSED(target), GLenum WXUNUSED(pname), GLint *WXUNUSED(params)) { } /* SGI_compiled_vertex_array */ -void glLockArraysSGI(GLint first, GLsizei count) +void glLockArraysSGI(GLint WXUNUSED(first), GLsizei WXUNUSED(count)) { } @@ -653,26 +675,26 @@ void glUnlockArraysSGI() /* SGI_cull_vertex */ -void glCullParameterdvSGI(GLenum pname, GLdouble* params) +void glCullParameterdvSGI(GLenum WXUNUSED(pname), GLdouble* WXUNUSED(params)) { } -void glCullParameterfvSGI(GLenum pname, GLfloat* params) +void glCullParameterfvSGI(GLenum WXUNUSED(pname), GLfloat* WXUNUSED(params)) { } /* SGI_index_func */ -void glIndexFuncSGI(GLenum func, GLclampf ref) +void glIndexFuncSGI(GLenum WXUNUSED(func), GLclampf WXUNUSED(ref)) { } /* SGI_index_material */ -void glIndexMaterialSGI(GLenum face, GLenum mode) +void glIndexMaterialSGI(GLenum WXUNUSED(face), GLenum WXUNUSED(mode)) { } /* WIN_swap_hint */ -void glAddSwapHintRectWin(GLint x, GLint y, GLsizei width, GLsizei height) +void glAddSwapHintRectWin(GLint WXUNUSED(x), GLint WXUNUSED(y), GLsizei WXUNUSED(width), GLsizei WXUNUSED(height)) { } @@ -714,10 +736,10 @@ bool wxGLApp::InitGLVisual(int *attribList) if (pixelFormat == 0) { wxLogError(_("Failed to initialize OpenGL")); - return FALSE; + return false; } - return TRUE; + return true; } wxGLApp::~wxGLApp()