]>
git.saurik.com Git - wxWidgets.git/blob - src/common/glcmn.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/common/glcmn.cpp
3 // Purpose: wxGLCanvasBase implementation
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 // ============================================================================
13 // ============================================================================
15 // ----------------------------------------------------------------------------
17 // ----------------------------------------------------------------------------
19 // for compilers that support precompilation, includes "wx.h".
20 #include "wx/wxprec.h"
32 #include "wx/glcanvas.h"
34 // DLL options compatibility check:
36 WX_CHECK_BUILD_OPTIONS("wxGL")
38 IMPLEMENT_CLASS(wxGLApp
, wxApp
)
40 // ============================================================================
42 // ============================================================================
44 wxGLCanvasBase::wxGLCanvasBase()
46 #if WXWIN_COMPATIBILITY_2_8
50 // we always paint background entirely ourselves so prevent wx from erasing
51 // it to avoid flicker
52 SetBackgroundStyle(wxBG_STYLE_CUSTOM
);
55 bool wxGLCanvasBase::SetCurrent(const wxGLContext
& context
) const
57 // although on MSW it works even if the window is still hidden, it doesn't
58 // work in other ports (notably X11-based ones) and documentation mentions
59 // that SetCurrent() can only be called for a shown window, so check for it
60 wxASSERT_MSG( IsShownOnScreen(), wxT("can't make hidden GL canvas current") );
62 return context
.SetCurrent(*static_cast<const wxGLCanvas
*>(this));
65 #ifndef wxHAS_OPENGL_ES
66 bool wxGLCanvasBase::SetColour(const wxString
& colour
)
68 wxColour col
= wxTheColourDatabase
->Find(colour
);
73 glGetBooleanv(GL_RGBA_MODE
, &isRGBA
);
76 glColor3f(col
.Red() / 256., col
.Green() / 256., col
.Blue() / 256.);
78 else // indexed colour
80 GLint pix
= GetColourIndex(col
);
83 wxLogError(_("Failed to allocate colour for OpenGL"));
94 wxGLCanvasBase::~wxGLCanvasBase()
96 #if WXWIN_COMPATIBILITY_2_8
98 #endif // WXWIN_COMPATIBILITY_2_8
101 #if WXWIN_COMPATIBILITY_2_8
103 wxGLContext
*wxGLCanvasBase::GetContext() const
108 void wxGLCanvasBase::SetCurrent()
111 SetCurrent(*m_glContext
);
114 void wxGLCanvasBase::OnSize(wxSizeEvent
& WXUNUSED(event
))
118 #endif // WXWIN_COMPATIBILITY_2_8
121 bool wxGLCanvasBase::IsExtensionInList(const char *list
, const char *extension
)
126 for ( const char *p
= list
; *p
; p
++ )
128 // advance up to the next possible match
129 p
= wxStrstr(p
, extension
);
133 // check that the extension appears at the beginning/ending of the list
134 // or is preceded/followed by a space to avoid mistakenly finding
135 // "glExtension" in a list containing some "glFunkyglExtension"
136 if ( (p
== list
|| p
[-1] == ' ') )
138 char c
= p
[strlen(extension
)];
139 if ( c
== '\0' || c
== ' ' )
147 #endif // wxUSE_GLCANVAS