From d1e19450e051d70531a6c1f0973bfd6cfd64319b Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 3 Jun 2019 17:10:53 +0100 Subject: [PATCH] More accurate reporting of whether vsync is enabled. --- src/tools/dcpomatic.cc | 2 +- src/wx/gl_video_view.cc | 4 ++++ src/wx/gl_video_view.h | 5 +++++ src/wx/system_information_dialog.cc | 27 ++++++++++++++++++++------- src/wx/system_information_dialog.h | 7 +++++-- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 1e93977d7..2fe5187b4 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -994,7 +994,7 @@ private: void view_system_information () { if (!_system_information_dialog) { - _system_information_dialog = new SystemInformationDialog (this); + _system_information_dialog = new SystemInformationDialog (this, _film_viewer); } _system_information_dialog->Show (); diff --git a/src/wx/gl_video_view.cc b/src/wx/gl_video_view.cc index d16ac4441..0e8e459d8 100644 --- a/src/wx/gl_video_view.cc +++ b/src/wx/gl_video_view.cc @@ -51,6 +51,7 @@ using boost::optional; GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent) : VideoView (viewer) + , _vsync_enabled (false) { _canvas = new wxGLCanvas (parent, wxID_ANY, 0, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE); _context = new wxGLContext (_canvas); @@ -62,6 +63,7 @@ GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent) /* Enable vsync */ Display* dpy = wxGetX11Display(); glXSwapIntervalEXT (dpy, DefaultScreen(dpy), 1); + _vsync_enabled = true; } #endif @@ -69,6 +71,7 @@ GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent) if (_canvas->IsExtensionSupported("WGL_EXT_swap_control")) { /* Enable vsync */ wglSwapIntervalEXT (1); + _vsync_enabled = true; } #endif @@ -77,6 +80,7 @@ GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent) /* Enable vsync */ GLint swapInterval = 1; CGLSetParameter (CGLGetCurrentContext(), kCGLCPSwapInterval, &swapInterval); + _vsync_enabled = true; #endif glGenTextures (1, &_id); diff --git a/src/wx/gl_video_view.h b/src/wx/gl_video_view.h index c10f32335..ba4c7cfdc 100644 --- a/src/wx/gl_video_view.h +++ b/src/wx/gl_video_view.h @@ -38,6 +38,10 @@ public: } void update (); + bool vsync_enabled () const { + return _vsync_enabled; + } + private: void paint (); void draw (); @@ -46,4 +50,5 @@ private: wxGLContext* _context; GLuint _id; boost::optional _size; + bool _vsync_enabled; }; diff --git a/src/wx/system_information_dialog.cc b/src/wx/system_information_dialog.cc index 894239b65..0e1916202 100644 --- a/src/wx/system_information_dialog.cc +++ b/src/wx/system_information_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2019 Carl Hetherington This file is part of DCP-o-matic. @@ -20,6 +20,8 @@ #include "system_information_dialog.h" #include "wx_util.h" +#include "gl_video_view.h" +#include "film_viewer.h" #ifdef DCPOMATIC_OSX #include @@ -30,8 +32,10 @@ #endif using std::string; +using boost::weak_ptr; +using boost::shared_ptr; -SystemInformationDialog::SystemInformationDialog (wxWindow* parent) +SystemInformationDialog::SystemInformationDialog (wxWindow* parent, weak_ptr weak_viewer) : TableDialog (parent, _("System information"), 2, 1, false) { add (_("OpenGL version"), true); @@ -42,11 +46,20 @@ SystemInformationDialog::SystemInformationDialog (wxWindow* parent) add (_("unknown (OpenGL not enabled in DCP-o-matic)"), false); } + add (_("vsync"), true); -#if !defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_HAVE_GLX_SWAP_INTERVAL_EXT) - add (_("enabled"), false); -#else - add (_("disabled"), false); -#endif + shared_ptr viewer = weak_viewer.lock (); + + if (!viewer) { + add (_("unknown"), false); + } else { + GLVideoView* gl = dynamic_cast(viewer->panel()); + if (!gl) { + add (_("unknown"), false); + } else { + add (gl->vsync_enabled() ? _("enabled") : _("not enabled"), false); + } + } + layout (); } diff --git a/src/wx/system_information_dialog.h b/src/wx/system_information_dialog.h index b82c6341b..63c70fba5 100644 --- a/src/wx/system_information_dialog.h +++ b/src/wx/system_information_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2019 Carl Hetherington This file is part of DCP-o-matic. @@ -19,10 +19,13 @@ */ #include "table_dialog.h" +#include + +class FilmViewer; class SystemInformationDialog : public TableDialog { public: - SystemInformationDialog (wxWindow* parent); + SystemInformationDialog (wxWindow* parent, boost::weak_ptr viewer); }; -- 2.30.2