Merge HIDPI_GL_CANVAS wrapper with OPENGL_GAL implementation.

This commit is contained in:
Bernhard Stegmaier 2017-12-07 22:37:36 +01:00 committed by Maciej Suminski
parent 909d95b5be
commit 19d7112fa2
4 changed files with 38 additions and 26 deletions

View File

@ -37,10 +37,7 @@ HIDPI_GL_CANVAS::HIDPI_GL_CANVAS( wxWindow *parent,
const wxPalette& palette ) : const wxPalette& palette ) :
wxGLCanvas( parent, dispAttrs, id, pos, size, style, name, palette ) wxGLCanvas( parent, dispAttrs, id, pos, size, style, name, palette )
{ {
#ifdef RETINA_OPENGL_PATCH initialize();
SetViewWantsBestResolution( true );
scaleFactor = GetBackingScaleFactor();
#endif
} }
HIDPI_GL_CANVAS::HIDPI_GL_CANVAS( wxWindow *parent, HIDPI_GL_CANVAS::HIDPI_GL_CANVAS( wxWindow *parent,
@ -53,10 +50,7 @@ HIDPI_GL_CANVAS::HIDPI_GL_CANVAS( wxWindow *parent,
const wxPalette& palette ) : const wxPalette& palette ) :
wxGLCanvas( parent, id, attribList, pos, size, style, name, palette ) wxGLCanvas( parent, id, attribList, pos, size, style, name, palette )
{ {
#ifdef RETINA_OPENGL_PATCH initialize();
SetViewWantsBestResolution( true );
scaleFactor = GetBackingScaleFactor();
#endif
} }
@ -65,9 +59,29 @@ wxSize HIDPI_GL_CANVAS::GetClientSize() const
wxSize size = wxGLCanvas::GetClientSize(); wxSize size = wxGLCanvas::GetClientSize();
#ifdef RETINA_OPENGL_PATCH #ifdef RETINA_OPENGL_PATCH
const float scaleFactor = GetBackingScaleFactor();
size.x *= scaleFactor; size.x *= scaleFactor;
size.y *= scaleFactor; size.y *= scaleFactor;
#endif #endif
return size; return size;
} }
float HIDPI_GL_CANVAS::GetBackingScaleFactor() const
{
#ifdef RETINA_OPENGL_PATCH
// this is ugly, but original method isn't marked const although it doesn't modify anything
// => clean up when it officially has arrived in wxWidgets
return static_cast< wxGLCanvas* >( const_cast< HIDPI_GL_CANVAS* >( this ))->GetBackingScaleFactor();
#else
return 1.0f;
#endif
}
void HIDPI_GL_CANVAS::initialize()
{
#ifdef RETINA_OPENGL_PATCH
SetViewWantsBestResolution( true );
#endif
}

View File

@ -68,7 +68,7 @@ OPENGL_GAL::OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
wxEvtHandler* aMouseListener, wxEvtHandler* aPaintListener, wxEvtHandler* aMouseListener, wxEvtHandler* aPaintListener,
const wxString& aName ) : const wxString& aName ) :
GAL( aDisplayOptions ), GAL( aDisplayOptions ),
wxGLCanvas( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize, HIDPI_GL_CANVAS( aParent, wxID_ANY, (int*) glAttributes, wxDefaultPosition, wxDefaultSize,
wxEXPAND, aName ), wxEXPAND, aName ),
mouseListener( aMouseListener ), paintListener( aPaintListener ), currentManager( nullptr ), mouseListener( aMouseListener ), paintListener( aPaintListener ), currentManager( nullptr ),
cachedManager( nullptr ), nonCachedManager( nullptr ), overlayManager( nullptr ) cachedManager( nullptr ), nonCachedManager( nullptr ), overlayManager( nullptr )
@ -96,10 +96,6 @@ OPENGL_GAL::OPENGL_GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions, wxWindow* aParent,
isGrouping = false; isGrouping = false;
groupCounter = 0; groupCounter = 0;
#ifdef RETINA_OPENGL_PATCH
SetViewWantsBestResolution( true );
#endif
// Connecting the event handlers // Connecting the event handlers
Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) ); Connect( wxEVT_PAINT, wxPaintEventHandler( OPENGL_GAL::onPaint ) );
@ -1155,13 +1151,8 @@ void OPENGL_GAL::ResizeScreen( int aWidth, int aHeight )
{ {
screenSize = VECTOR2I( aWidth, aHeight ); screenSize = VECTOR2I( aWidth, aHeight );
#ifdef RETINA_OPENGL_PATCH
const float scaleFactor = GetBackingScaleFactor();
#else
const float scaleFactor = 1.0f;
#endif
// Resize framebuffers // Resize framebuffers
const float scaleFactor = GetBackingScaleFactor();
compositor->Resize( aWidth * scaleFactor, aHeight * scaleFactor ); compositor->Resize( aWidth * scaleFactor, aHeight * scaleFactor );
isFramebufferInitialized = false; isFramebufferInitialized = false;

View File

@ -40,6 +40,7 @@
class HIDPI_GL_CANVAS : public wxGLCanvas class HIDPI_GL_CANVAS : public wxGLCanvas
{ {
public: public:
// wxGLCanvas constructor
HIDPI_GL_CANVAS( wxWindow *parent, HIDPI_GL_CANVAS( wxWindow *parent,
const wxGLAttributes& dispAttrs, const wxGLAttributes& dispAttrs,
wxWindowID id = wxID_ANY, wxWindowID id = wxID_ANY,
@ -49,6 +50,7 @@ public:
const wxString& name = wxGLCanvasName, const wxString& name = wxGLCanvasName,
const wxPalette& palette = wxNullPalette ); const wxPalette& palette = wxNullPalette );
// wxGLCanvas constructor
HIDPI_GL_CANVAS( wxWindow *parent, HIDPI_GL_CANVAS( wxWindow *parent,
wxWindowID id = wxID_ANY, wxWindowID id = wxID_ANY,
const int *attribList = NULL, const int *attribList = NULL,
@ -58,13 +60,19 @@ public:
const wxString& name = wxGLCanvasName, const wxString& name = wxGLCanvasName,
const wxPalette& palette = wxNullPalette ); const wxPalette& palette = wxNullPalette );
wxSize GetClientSize() const;
// wxGLCanvas override
virtual wxSize GetClientSize() const;
// wxGLCanvas override (with patch applied) or default value of 1.0
virtual float GetBackingScaleFactor() const;
#ifdef RETINA_OPENGL_PATCH
private: private:
float scaleFactor; /**
#endif * @brief Common initialization
*/
void initialize();
}; };
#endif // HIDPI_GL_CANVAS_H #endif // HIDPI_GL_CANVAS_H

View File

@ -38,8 +38,7 @@
#include <gal/opengl/cached_container.h> #include <gal/opengl/cached_container.h>
#include <gal/opengl/noncached_container.h> #include <gal/opengl/noncached_container.h>
#include <gal/opengl/opengl_compositor.h> #include <gal/opengl/opengl_compositor.h>
#include <gal/hidpi_gl_canvas.h>
#include <wx/glcanvas.h>
#include <unordered_map> #include <unordered_map>
#include <boost/smart_ptr/shared_array.hpp> #include <boost/smart_ptr/shared_array.hpp>
@ -62,7 +61,7 @@ class SHADER;
* and quads. The purpose is to provide a fast graphics interface, that takes advantage of modern * and quads. The purpose is to provide a fast graphics interface, that takes advantage of modern
* graphics card GPUs. All methods here benefit thus from the hardware acceleration. * graphics card GPUs. All methods here benefit thus from the hardware acceleration.
*/ */
class OPENGL_GAL : public GAL, public wxGLCanvas class OPENGL_GAL : public GAL, public HIDPI_GL_CANVAS
{ {
public: public:
/** /**