Full resolution in OpenGL canvas on Retina displays
This commit is contained in:
parent
6788e31a1e
commit
6fc59f9acd
|
@ -70,6 +70,10 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||||
isGrouping = false;
|
isGrouping = false;
|
||||||
groupCounter = 0;
|
groupCounter = 0;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
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 ) );
|
||||||
|
|
||||||
|
@ -122,10 +126,16 @@ void OPENGL_GAL::BeginDrawing()
|
||||||
SetCurrent( *glContext );
|
SetCurrent( *glContext );
|
||||||
clientDC = new wxClientDC( this );
|
clientDC = new wxClientDC( this );
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
const float scaleFactor = GetBackingScaleFactor();
|
||||||
|
#else
|
||||||
|
const float scaleFactor = 1.0f;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Set up the view port
|
// Set up the view port
|
||||||
glMatrixMode( GL_PROJECTION );
|
glMatrixMode( GL_PROJECTION );
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glViewport( 0, 0, (GLsizei) screenSize.x, (GLsizei) screenSize.y );
|
glViewport( 0, 0, (GLsizei) screenSize.x * scaleFactor, (GLsizei) screenSize.y * scaleFactor );
|
||||||
|
|
||||||
// Create the screen transformation
|
// Create the screen transformation
|
||||||
glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y,
|
glOrtho( 0, (GLint) screenSize.x, 0, (GLsizei) screenSize.y,
|
||||||
|
@ -528,8 +538,14 @@ void OPENGL_GAL::ResizeScreen( int aWidth, int aHeight )
|
||||||
{
|
{
|
||||||
screenSize = VECTOR2I( aWidth, aHeight );
|
screenSize = VECTOR2I( aWidth, aHeight );
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
const float scaleFactor = GetBackingScaleFactor();
|
||||||
|
#else
|
||||||
|
const float scaleFactor = 1.0f;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Resize framebuffers
|
// Resize framebuffers
|
||||||
compositor.Resize( aWidth, aHeight );
|
compositor.Resize( aWidth * scaleFactor, aHeight * scaleFactor );
|
||||||
isFramebufferInitialized = false;
|
isFramebufferInitialized = false;
|
||||||
|
|
||||||
wxGLCanvas::SetSize( aWidth, aHeight );
|
wxGLCanvas::SetSize( aWidth, aHeight );
|
||||||
|
@ -731,6 +747,7 @@ void OPENGL_GAL::DrawCursor( const VECTOR2D& aCursorPosition )
|
||||||
// Now we should only store the position of the mouse cursor
|
// Now we should only store the position of the mouse cursor
|
||||||
// The real drawing routines are in blitCursor()
|
// The real drawing routines are in blitCursor()
|
||||||
VECTOR2D screenCursor = worldScreenMatrix * aCursorPosition;
|
VECTOR2D screenCursor = worldScreenMatrix * aCursorPosition;
|
||||||
|
|
||||||
cursorPosition = screenWorldMatrix * VECTOR2D( screenCursor.x, screenSize.y - screenCursor.y );
|
cursorPosition = screenWorldMatrix * VECTOR2D( screenCursor.x, screenSize.y - screenCursor.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
--- include/wx/osx/glcanvas.h 2015-05-16 15:40:21.000000000 +0200
|
||||||
|
+++ include/wx/osx/glcanvas.h 2015-05-16 16:44:53.000000000 +0200
|
||||||
|
@@ -88,6 +88,9 @@ public:
|
||||||
|
// update the view port of the current context to match this window
|
||||||
|
void SetViewport();
|
||||||
|
|
||||||
|
+ void SetViewWantsBestResolution( bool aValue );
|
||||||
|
+ bool GetViewWantsBestResolution();
|
||||||
|
+ float GetBackingScaleFactor();
|
||||||
|
|
||||||
|
// deprecated methods
|
||||||
|
// ------------------
|
||||||
|
--- src/osx/cocoa/glcanvas.mm 2015-05-16 15:40:24.000000000 +0200
|
||||||
|
+++ src/osx/cocoa/glcanvas.mm 2015-05-16 17:10:50.000000000 +0200
|
||||||
|
@@ -313,6 +313,22 @@ bool wxGLCanvas::SwapBuffers()
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void wxGLCanvas::SetViewWantsBestResolution( bool aValue )
|
||||||
|
+{
|
||||||
|
+ [GetHandle() setWantsBestResolutionOpenGLSurface:aValue];
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+bool wxGLCanvas::GetViewWantsBestResolution()
|
||||||
|
+{
|
||||||
|
+ return [GetHandle() wantsBestResolutionOpenGLSurface];
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+float wxGLCanvas::GetBackingScaleFactor()
|
||||||
|
+{
|
||||||
|
+ return [[GetHandle() window] backingScaleFactor];
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
|
||||||
|
{
|
||||||
|
if ( !m_glContext )
|
|
@ -140,6 +140,8 @@ echo "*** Patching wxWidgets..."
|
||||||
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx.patch"
|
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx.patch"
|
||||||
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx_bug_15908.patch"
|
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx_bug_15908.patch"
|
||||||
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx_soname.patch"
|
doPatch "$1" "$3/patches/wxwidgets-3.0.0_macosx_soname.patch"
|
||||||
|
# high resolution in OpenGL canvas: http://trac.wxwidgets.org/ticket/15700
|
||||||
|
doPatch "$1" "$3/patches/wxwidgets-3.0.2_macosx_opengl_retina.patch"
|
||||||
|
|
||||||
# configure and build wxWidgets
|
# configure and build wxWidgets
|
||||||
wxWidgets_configure "$1" "$2" "$4"
|
wxWidgets_configure "$1" "$2" "$4"
|
||||||
|
|
Loading…
Reference in New Issue