diff options
44 files changed, 239 insertions, 188 deletions
| diff --git a/api/plugin-api.cpp b/api/plugin-api.cpp index 404ed434..3630beae 100644 --- a/api/plugin-api.cpp +++ b/api/plugin-api.cpp @@ -27,35 +27,27 @@ void BaseDialog::done(int)  // these exist so that vtable is emitted in a single compilation unit, not all of them. +Metadata_::Metadata_() = default;  Metadata_::~Metadata_() = default; -IFilter::~IFilter() = default; -IProtocol::~IProtocol() = default; -ITracker::~ITracker() = default; -IExtension::~IExtension() = default; - -void ITrackerDialog::register_tracker(ITracker*) {} -void ITrackerDialog::unregister_tracker() {} - -bool ITracker::center() { return false; } - -module_status ITracker::status_ok() -{ -    return module_status(); -} - -module_status ITracker::error(const QString& error) -{ -    return module_status(error); -} +Metadata::Metadata() = default; +Metadata::~Metadata() = default; -Metadata_::Metadata_() = default;  IFilter::IFilter() = default; +IFilter::~IFilter() = default;  IFilterDialog::IFilterDialog() = default; +IFilterDialog::~IFilterDialog() = default;  IProtocol::IProtocol() = default; +IProtocol::~IProtocol() = default;  IProtocolDialog::IProtocolDialog() = default; +IProtocolDialog::~IProtocolDialog() = default;  ITracker::ITracker() = default; +ITracker::~ITracker() = default; +bool ITracker::center() { return false; }  ITrackerDialog::ITrackerDialog() = default; - +ITrackerDialog::~ITrackerDialog() = default; +void ITrackerDialog::register_tracker(ITracker*) {} +void ITrackerDialog::unregister_tracker() {} +IExtension::~IExtension() = default;  IExtensionDialog::~IExtensionDialog() = default;  bool module_status::is_ok() const @@ -63,8 +55,8 @@ bool module_status::is_ok() const      return error.isNull();  } +module_status_mixin::~module_status_mixin() = default;  module_status::module_status(QString error) : error(std::move(error)) {} -  module_status module_status_mixin::status_ok() { return {}; }  module_status module_status_mixin::error(const QString& error) @@ -72,7 +64,12 @@ module_status module_status_mixin::error(const QString& error)      return module_status(error.isEmpty() ? "Unknown error" : error);  } -Metadata::Metadata() = default; -Metadata::~Metadata() = default; - +module_status ITracker::status_ok() +{ +    return module_status(); +} +module_status ITracker::error(const QString& error) +{ +    return module_status(error); +} diff --git a/api/plugin-api.hpp b/api/plugin-api.hpp index 52776986..3950ade0 100644 --- a/api/plugin-api.hpp +++ b/api/plugin-api.hpp @@ -84,7 +84,7 @@ class OTR_API_EXPORT Metadata : public TR, public Metadata_  public:      Metadata(); -    ~Metadata(); +    ~Metadata() override;  };  struct OTR_API_EXPORT module_status final @@ -104,6 +104,7 @@ struct OTR_API_EXPORT module_status_mixin      static module_status error(const QString& error); // return error message on init failure      virtual module_status initialize() = 0; // where to return from +    virtual ~module_status_mixin();  };  // implement this in filters @@ -125,6 +126,7 @@ struct OTR_API_EXPORT IFilter : module_status_mixin  struct OTR_API_EXPORT IFilterDialog : public plugin_api::detail::BaseDialog  {      IFilterDialog(); +    ~IFilterDialog() override;      // optional destructor      //~IFilterDialog() override; @@ -142,12 +144,11 @@ struct OTR_API_EXPORT IFilterDialog : public plugin_api::detail::BaseDialog  struct OTR_API_EXPORT IProtocol : module_status_mixin  {      IProtocol(); +    ~IProtocol() override;      IProtocol(const IProtocol&) = delete;      IProtocol& operator=(const IProtocol&) = delete; -    // optional destructor -    virtual ~IProtocol();      // called 250 times a second with XYZ yaw pitch roll pose      // try not to perform intense computation here. use a thread.      virtual void pose(const double* headpose) = 0; @@ -165,6 +166,7 @@ struct OTR_API_EXPORT IProtocolDialog : public plugin_api::detail::BaseDialog      virtual void unregister_protocol() = 0;      IProtocolDialog(); +    ~IProtocolDialog() override;  };  // call once with your chosen class names in the plugin @@ -203,6 +205,7 @@ struct OTR_API_EXPORT ITrackerDialog : public plugin_api::detail::BaseDialog      virtual void unregister_tracker();      ITrackerDialog(); +    ~ITrackerDialog() override;  };  // call once with your chosen class names in the plugin @@ -231,7 +234,7 @@ struct OTR_API_EXPORT IExtension : module_status_mixin      };      IExtension() = default; -    virtual ~IExtension(); +    ~IExtension() override;      virtual event_mask hook_types() = 0; diff --git a/cmake/opentrack-boilerplate.cmake b/cmake/opentrack-boilerplate.cmake index c56c43ee..9d72c1af 100644 --- a/cmake/opentrack-boilerplate.cmake +++ b/cmake/opentrack-boilerplate.cmake @@ -133,8 +133,6 @@ function(otr_module n_)      endif()      set(n "opentrack-${n_}") -    # XXX TODO update callers to use instead of long name -sh 20180527 -    set(self "${n}" PARENT_SCOPE)      if(NOT arg_SUBDIRS)          otr_glob_sources(${n} .) @@ -175,6 +173,8 @@ function(otr_module n_)          set_property(TARGET "${n}" PROPERTY PREFIX "")      endif() +    set(self "${n}" PARENT_SCOPE) +      if(NOT arg_RELINK)          set_property(TARGET ${n} PROPERTY LINK_DEPENDS_NO_SHARED TRUE)      else() @@ -205,6 +205,10 @@ function(otr_module n_)      otr_compat(${n}) +    if(CMAKE_COMPILER_IS_CLANG AND (arg_EXECUTABLE OR (NOT arg_BIN AND NOT arg_STATIC))) +        set_property(TARGET "${n}" APPEND_STRING PROPERTY COMPILE_FLAGS "-Wno-weak-vtables ") +    endif() +      if(NOT arg_NO-INSTALL)          if(arg_BIN AND WIN32)              install(TARGETS "${n}" RUNTIME DESTINATION . PERMISSIONS ${opentrack-perms-exec}) diff --git a/cmake/opentrack-policy.cmake b/cmake/opentrack-policy.cmake index e86cd284..e14bcbf7 100644 --- a/cmake/opentrack-policy.cmake +++ b/cmake/opentrack-policy.cmake @@ -1,5 +1,5 @@  include_guard(GLOBAL) -foreach(k CMP0020 CMP0022 CMP0058 CMP0028 CMP0042 CMP0063 CMP0053 CMP0011 CMP0054 CMP0012) +foreach(k CMP0020 CMP0022 CMP0058 CMP0028 CMP0042 CMP0063 CMP0053 CMP0011 CMP0054 CMP0012 CMP0069)      if(POLICY ${k})          cmake_policy(SET ${k} NEW)      endif() diff --git a/compat/correlation-calibrator.cpp b/compat/correlation-calibrator.cpp index a58d31cd..7edbd22d 100644 --- a/compat/correlation-calibrator.cpp +++ b/compat/correlation-calibrator.cpp @@ -16,7 +16,7 @@      using std::fflush;  #endif -using namespace correlation_calibrator_impl; +namespace correlation_calibrator_impl {  static constexpr unsigned nbuckets[6] =  { @@ -53,7 +53,7 @@ bool correlation_calibrator::check_buckets(const vec6& data)      for (unsigned k = 0; k < 6; k++)      {          const double val = clamp(data[k], min[k], max[k]); -        pos[k] = (val-min[k])/spacing[k]; +        pos[k] = unsigned((val-min[k])/spacing[k]);          if (pos[k] >= nbuckets[k])          { @@ -158,3 +158,5 @@ unsigned correlation_calibrator::sample_count() const  {      return data.size();  } + +} // ns correlation_calibrator_impl diff --git a/csv/csv.cpp b/csv/csv.cpp index aa518673..a1f62dc0 100644 --- a/csv/csv.cpp +++ b/csv/csv.cpp @@ -111,13 +111,12 @@ bool CSV::getGameData(int id, unsigned char* table, QString& gamename)      CSV csv(&file); -    int lineno = 0;      unsigned tmp[8];      unsigned fuzz[3];      QStringList gameLine; -    while (lineno++, csv.parseLine(gameLine)) +    for (int lineno = 0; csv.parseLine(gameLine); lineno++)      {          //qDebug() << "Column 0: " << gameLine.at(0);		// No.          //qDebug() << "Column 1: " << gameLine.at(1);		// Game Name diff --git a/dinput/dinput.cpp b/dinput/dinput.cpp index 8a3d0f4a..3931255b 100644 --- a/dinput/dinput.cpp +++ b/dinput/dinput.cpp @@ -10,12 +10,12 @@ diptr di_t::init_di_()      CoInitialize(nullptr);      diptr di = nullptr; -    if (HRESULT hr = DirectInput8Create(GetModuleHandle(nullptr), -                                        DIRECTINPUT_VERSION, -                                        IID_IDirectInput8, -                                        (void**)&di, -                                        nullptr); -        !SUCCEEDED(hr)) +    HRESULT hr = DirectInput8Create(GetModuleHandle(nullptr), +                                    DIRECTINPUT_VERSION, +                                    IID_IDirectInput8, +                                    (void**)&di, +                                    nullptr); +    if (!SUCCEEDED(hr))      {          qDebug() << "can't make dinput:" << (void*)(LONG_PTR)hr;          qDebug() << "crashing!"; @@ -32,7 +32,8 @@ di_t::di_t()  void di_t::ref_di()  { -    while (init_lock.test_and_set()) { /* busy loop */ } +    while (init_lock.test_and_set()) +        (void)0;      if (!handle)          handle = init_di_(); @@ -48,7 +49,8 @@ void di_t::unref_di()      if (refcnt_ == 0)      { -        while (init_lock.test_and_set()) { /* busy loop */ } +        while (init_lock.test_and_set()) +            (void)0;          qDebug() << "exit: di handle";          handle->Release(); diff --git a/dinput/keybinding-worker.hpp b/dinput/keybinding-worker.hpp index fdcf94c9..43a4aee1 100644 --- a/dinput/keybinding-worker.hpp +++ b/dinput/keybinding-worker.hpp @@ -53,7 +53,6 @@ private:      di_t din;      bool keystate[256] {}; -    bool old_keystate[256] {};      void run() override;      bool run_keyboard_nolock(); diff --git a/dinput/win32-joystick.hpp b/dinput/win32-joystick.hpp index 8d5524ff..59ec0c49 100644 --- a/dinput/win32-joystick.hpp +++ b/dinput/win32-joystick.hpp @@ -51,7 +51,6 @@ struct OTR_DINPUT_EXPORT win32_joy_ctx final          LPDIRECTINPUTDEVICE8 joy_handle;          QString guid, name;          bool last_state[max_buttons_and_pov_hats] {}; -        Timer first_timer;          static DIDEVICEOBJECTDATA keystate_buffers[num_buffers]; diff --git a/logic/pipeline.cpp b/logic/pipeline.cpp index 1bde1bb1..4700bcc7 100644 --- a/logic/pipeline.cpp +++ b/logic/pipeline.cpp @@ -119,8 +119,8 @@ Pose reltrans::apply_pipeline(reltrans_state state, const Pose& value,          {              const double dt = interp_timer.elapsed_seconds(); -            static constexpr float RC_stages[] = { 2, 1, .5, .1, .05 }; -            static constexpr float RC_time_deltas[] = { 1, .25, .25, 2 }; +            static constexpr double RC_stages[] = { 2, 1, .5, .1, .05 }; +            static constexpr double RC_time_deltas[] = { 1, .25, .25, 2 };              interp_timer.start(); diff --git a/logic/tracklogger.cpp b/logic/tracklogger.cpp index a287b633..758c2478 100644 --- a/logic/tracklogger.cpp +++ b/logic/tracklogger.cpp @@ -3,6 +3,8 @@  #include <QMessageBox> +TrackLogger::~TrackLogger() = default; +  void TrackLogger::write_pose(const double* p)  {      write(p, 6); diff --git a/logic/tracklogger.hpp b/logic/tracklogger.hpp index d6c34157..134a27fd 100644 --- a/logic/tracklogger.hpp +++ b/logic/tracklogger.hpp @@ -13,7 +13,7 @@ class OTR_LOGIC_EXPORT TrackLogger  public:      TrackLogger() = default; -    virtual ~TrackLogger() = default; +    virtual ~TrackLogger();      virtual void write(const char *) {}      virtual void write(const double *, int) {} diff --git a/logic/win32-shortcuts.cpp b/logic/win32-shortcuts.cpp index 1e2f1b77..324b1b04 100644 --- a/logic/win32-shortcuts.cpp +++ b/logic/win32-shortcuts.cpp @@ -15,6 +15,7 @@  #include <QVariant>  #include <QDebug> +#if 0  win_key const windows_key_mods[] {          {DIK_LCONTROL, Qt::Key_Control},          {DIK_RCONTROL, Qt::Key_Control}, @@ -25,6 +26,7 @@ win_key const windows_key_mods[] {          {DIK_LWIN, Qt::Key_Super_L},          {DIK_RWIN, Qt::Key_Super_R},  }; +#endif  static const win_key windows_key_sequences[] {         { DIK_F1, Qt::Key_F1 }, @@ -164,7 +166,7 @@ bool win_key::from_qt(const QKeySequence& qt_, int& dik, Qt::KeyboardModifiers&  #if 0      const unsigned qt = QVariant(qt_).toInt(); // verbose  #endif -    const unsigned qt = int(qt_); // deprecated +    const unsigned qt = (unsigned)int(qt_); // deprecated      const unsigned our_mods = qt & Qt::KeyboardModifierMask;      if (qt == 0) diff --git a/migration/migration.cpp b/migration/migration.cpp index 45965bee..59ceee1a 100644 --- a/migration/migration.cpp +++ b/migration/migration.cpp @@ -24,9 +24,7 @@ using namespace options::globals;  // individual migrations are run in the UI thread. they can be interactive if necessary. -namespace migrations { - -namespace detail { +namespace migrations::detail {  static std::vector<mptr> migration_list;  static std::vector<mfun> migration_thunks; @@ -180,9 +178,14 @@ std::vector<QString> migrator::run()      return done;  } -} +} // ns migrations::detail + +namespace migrations { + +migration::migration() = default; +migration::~migration() = default; -} // ns +} // ns migrations  std::vector<QString> run_migrations()  { diff --git a/migration/migration.hpp b/migration/migration.hpp index 42c8bead..4eaa959f 100644 --- a/migration/migration.hpp +++ b/migration/migration.hpp @@ -71,25 +71,19 @@ namespace detail {  #define OPENTRACK_MIGRATION(type) \      MIGRATE_EXPANDED1(type, MIGRATE_EXPAND1(__COUNTER__)) -#ifdef Q_CREATOR_RUN -#   pragma clang diagnostic ignored "-Wweak-vtables" -#endif -  struct migration  { -    migration() = default; +    migration();      migration(const migration&) = delete;      migration& operator=(const migration&) = delete; -    inline virtual ~migration(); +    virtual ~migration();      virtual QString unique_date() const = 0;      virtual QString name() const = 0;      virtual bool should_run() const = 0;      virtual void run() = 0;  }; -inline migration::~migration() {} -  } // ns migrations  OTR_MIGRATION_EXPORT std::vector<QString> run_migrations(); diff --git a/options/globals.cpp b/options/globals.cpp index 33327090..3bd185af 100644 --- a/options/globals.cpp +++ b/options/globals.cpp @@ -17,8 +17,9 @@ bool is_portable_installation()      // must keep consistent between invocations      static const bool ret = QFile::exists(OPENTRACK_BASE_PATH + "/portable.txt");      return ret; -#endif +#else      return false; +#endif  }  saver_::~saver_() diff --git a/options/value-traits.hpp b/options/value-traits.hpp index f5b74f73..765740f6 100644 --- a/options/value-traits.hpp +++ b/options/value-traits.hpp @@ -79,26 +79,13 @@ struct value_traits : default_value_traits<t> {};  template<>  struct value_traits<double> : default_value_traits<double>  { -    static bool is_equal(value_type x, value_type y) -    { -        if (x == y) -            return true; -        else -        { -            using I = std::int64_t; -            constexpr int K = 1000; - -            value_type x_, y_; - -            return I(std::modf(x, &x_) * K) == I(std::modf(y, &y_) * K) && -                   I(x_) == I(y_); -        } -    } +    static bool is_equal(value_type x, value_type y) { return std::fabs(x - y) < 1e-6; }  }; -template<> struct value_traits<float> : value_traits<float, double> +template<> +struct value_traits<float> : default_value_traits<float>  { -    static constexpr inline value_type pass_value(const value_type& x) { return x; } +    static bool is_equal(value_type x, value_type y) { return std::fabs(x - y) < 1e-6f; }  };  template<> diff --git a/pose-widget/pose-widget.cpp b/pose-widget/pose-widget.cpp index b10578d9..d9b563e9 100644 --- a/pose-widget/pose-widget.cpp +++ b/pose-widget/pose-widget.cpp @@ -182,7 +182,7 @@ bool Triangle::barycentric_coords(const vec2& px, vec2& uv, int& i) const  std::pair<vec2i, vec2i> pose_transform::get_bounds(const vec2& size)  { -    const int x = size.x(), y = size.y(); +    const num x = size.x(), y = size.y();      const vec3 corners[] = {          { -x, -y, 0 }, @@ -350,8 +350,8 @@ void pose_transform::project_quad_texture()                  const unsigned px_ = fx + 1;                  const unsigned py_ = fy + 1;  #endif -                const unsigned px = fx; -                const unsigned py = fy; +                const unsigned px = (unsigned)fx; +                const unsigned py = (unsigned)fy;                  const unsigned orig_pos = py * orig_pitch + px * const_depth;  #if defined BILINEAR_FILTER @@ -380,7 +380,7 @@ void pose_transform::project_quad_texture()                          dest[pos + k] = orig[orig_pos + k];                  else                      for (int k = 0; k < 3; k++) -                        dest[pos + k] = bgcolor(k); +                        dest[pos + k] = (unsigned char)bgcolor(k);              }          }      } diff --git a/pose-widget/pose-widget.hpp b/pose-widget/pose-widget.hpp index fa956b47..4a97b789 100644 --- a/pose-widget/pose-widget.hpp +++ b/pose-widget/pose-widget.hpp @@ -48,7 +48,7 @@ public:  struct pose_transform final : QThread  {      pose_transform(QWidget* dst); -    ~pose_transform(); +    ~pose_transform() override;      void rotate_async(double xAngle, double yAngle, double zAngle, double x, double y, double z);      void rotate_sync(double xAngle, double yAngle, double zAngle, double x, double y, double z); @@ -76,14 +76,13 @@ struct pose_transform final : QThread      QImage front, back;      QImage image, image2; -    struct uv_ +    struct uv_ // NOLINT(cppcoreguidelines-pro-type-member-init)      {          vec2 coords;          int i;      };      std::vector<uv_> uv_vec; -      std::atomic<bool> fresh;      static constexpr inline int w = 320, h = 240; @@ -93,7 +92,7 @@ class OTR_POSE_WIDGET_EXPORT pose_widget final : public QWidget  {  public:      pose_widget(QWidget *parent = nullptr); -    ~pose_widget(); +    ~pose_widget() override;      void rotate_async(double xAngle, double yAngle, double zAngle, double x, double y, double z);      void rotate_sync(double xAngle, double yAngle, double zAngle, double x, double y, double z); diff --git a/proto-flightgear/ftnoir_protocol_fg.h b/proto-flightgear/ftnoir_protocol_fg.h index 45cd0cad..4b4efa29 100644 --- a/proto-flightgear/ftnoir_protocol_fg.h +++ b/proto-flightgear/ftnoir_protocol_fg.h @@ -44,8 +44,8 @@ class flightgear : TR, public IProtocol      Q_OBJECT  public: -    void pose(const double *headpose); -    QString game_name() { return tr("FlightGear"); } +    void pose(const double *headpose) override; +    QString game_name() override { return tr("FlightGear"); }      module_status initialize() override;  private:      settings s; @@ -59,8 +59,8 @@ class FGControls: public IProtocolDialog      Q_OBJECT  public:      FGControls(); -    void register_protocol(IProtocol *) {} -    void unregister_protocol() {} +    void register_protocol(IProtocol *) override {} +    void unregister_protocol() override {}  private:      Ui::UICFGControls ui;      settings s; @@ -73,6 +73,6 @@ class flightgearDll : public Metadata  {      Q_OBJECT -    QString name() { return tr("FlightGear"); } -    QIcon icon() { return QIcon(":/images/flightgear.png"); } +    QString name() override { return tr("FlightGear"); } +    QIcon icon() override { return QIcon(":/images/flightgear.png"); }  }; diff --git a/proto-ft/ftnoir_protocol_ft.cpp b/proto-ft/ftnoir_protocol_ft.cpp index 314bb451..874f83da 100644 --- a/proto-ft/ftnoir_protocol_ft.cpp +++ b/proto-ft/ftnoir_protocol_ft.cpp @@ -23,8 +23,6 @@ freetrack::~freetrack()  static_assert(sizeof(LONG) == sizeof(std::int32_t));  static_assert(sizeof(LONG) == 4u); -static constexpr inline float d2r = float(M_PI/180); -  cc_noinline void store(float volatile& place, const float value)  {      union @@ -55,15 +53,17 @@ static std::int32_t load(std::int32_t volatile& place)  void freetrack::pose(const double* headpose)  { -    const float yaw = -headpose[Yaw] * d2r; -    const float roll = headpose[Roll] * d2r; +    constexpr double d2r = M_PI/180; + +    const float yaw = float(-headpose[Yaw] * d2r); +    const float roll = float(headpose[Roll] * d2r);      const float tx = float(headpose[TX] * 10);      const float ty = float(headpose[TY] * 10);      const float tz = float(headpose[TZ] * 10);      // HACK: Falcon BMS makes a "bump" if pitch is over the value -sh 20170615      const bool is_crossing_90 = std::fabs(headpose[Pitch] - 90) < .15; -    const float pitch = -d2r * (is_crossing_90 ? 89.86 : headpose[Pitch]); +    const float pitch = float(-d2r * (is_crossing_90 ? 89.86 : headpose[Pitch]));      FTHeap* const ft = pMemData;      FTData* const data = &ft->data; diff --git a/proto-udp/ftnoir_protocol_ftn.h b/proto-udp/ftnoir_protocol_ftn.h index dc6e3a6f..8bc581bf 100644 --- a/proto-udp/ftnoir_protocol_ftn.h +++ b/proto-udp/ftnoir_protocol_ftn.h @@ -35,11 +35,8 @@ class udp : public QObject, public IProtocol  public:      udp();      module_status initialize() override; -    void pose(const double *headpose); -    QString game_name() -    { -        return tr("UDP over network"); -    } +    void pose(const double *headpose) override; +    QString game_name() override { return tr("UDP over network"); }  private:      QUdpSocket outSocket;      settings s; @@ -58,8 +55,8 @@ class FTNControls: public IProtocolDialog  public:      FTNControls(); -    void register_protocol(IProtocol *) {} -    void unregister_protocol() {} +    void register_protocol(IProtocol *) override {} +    void unregister_protocol() override {}  private:      Ui::UICFTNControls ui;      settings s; @@ -72,6 +69,6 @@ class udp_sender_dll : public Metadata  {      Q_OBJECT -    QString name() { return tr("UDP over network"); } -    QIcon icon() { return QIcon(":/images/opentrack.png"); } +    QString name() override { return tr("UDP over network"); } +    QIcon icon() override { return QIcon(":/images/opentrack.png"); }  }; diff --git a/spline/spline-widget.cpp b/spline/spline-widget.cpp index 4a591870..36d3e2bf 100644 --- a/spline/spline-widget.cpp +++ b/spline/spline-widget.cpp @@ -107,7 +107,7 @@ void spline_widget::drawBackground()      const QPen pen(color__, 1, Qt::SolidLine, Qt::FlatCap); -    const int ystep = y_step_, xstep = x_step_; +    const int ystep = std::ceil(y_step_), xstep = std::ceil(x_step_);      const double maxx = config->max_input();      const double maxy = config->max_output(); @@ -505,7 +505,7 @@ void spline_widget::show_tooltip(const QPoint& pos, const QPointF& value_)      double x = value.x(), y = value.y();      if (preview_only) -        y = config->get_value_no_save(x); +        y = (double)config->get_value_no_save((float)x);      const int x_ = iround(x), y_ = iround(y); @@ -515,7 +515,7 @@ void spline_widget::show_tooltip(const QPoint& pos, const QPointF& value_)          y = y_;      // the style on OSX has different offsets -    static const bool is_fusion = +    constexpr bool is_fusion =  #if defined __APPLE__              true;  #else @@ -535,8 +535,8 @@ void spline_widget::show_tooltip(const QPoint& pos, const QPointF& value_)  bool spline_widget::is_in_bounds(const QPointF& pos) const  { -    const int grace = point_size_in_pixels * 3; -    const int bottom_grace = int(point_size_in_pixels * 1.5); +    const int grace = (int)std::ceil(point_size_in_pixels * 3); +    const int bottom_grace = (int)std::ceil(point_size_in_pixels * 1.5);      return (pos.x() + grace        > pixel_bounds.left() &&              pos.x() - grace        < pixel_bounds.right() &&              pos.y() + grace        > pixel_bounds.top() && diff --git a/spline/spline.cpp b/spline/spline.cpp index 0c619c50..ea5b8c95 100644 --- a/spline/spline.cpp +++ b/spline/spline.cpp @@ -25,7 +25,12 @@  #include <QDebug> -using namespace spline_detail; +namespace spline_detail { + +base_spline_::~base_spline_() = default; +base_spline::~base_spline() = default; +spline_modify_mixin::~spline_modify_mixin() = default; +spline_settings_mixin::~spline_settings_mixin() = default;  spline::spline(const QString& name, const QString& axis_name, Axis axis)  { @@ -220,7 +225,7 @@ void spline::update_interp_data() const      {          if (data[i] == magic_fill_value)              data[i] = last; -        data[i] = (float)clamp(data[i], 0, maxy); +        data[i] = clamp(data[i], 0, (float)maxy);          last = data[i];      }  } @@ -361,7 +366,7 @@ void spline::ensure_valid(points_t& list) const      const int sz = list.size();      QList<QPointF> all_points, tmp; -    all_points.reserve(sz), tmp.reserve(sz); +    all_points.reserve(sz); tmp.reserve(sz);      const double maxx = max_input(); @@ -445,14 +450,12 @@ void spline::disconnect_signals()  {      if (conn_changed)      { -        QObject::disconnect(conn_changed), conn_changed = {}; -        QObject::disconnect(conn_maxx), conn_maxx = {}; -        QObject::disconnect(conn_maxy), conn_maxy = {}; +        QObject::disconnect(conn_changed); conn_changed = {}; +        QObject::disconnect(conn_maxx); conn_maxx = {}; +        QObject::disconnect(conn_maxy); conn_maxy = {};      }  } -namespace spline_detail { -  settings::settings(bundle const& b, const QString& axis_name, Axis idx):      b(b ? b : make_bundle("")),      opts(axis_name, idx) @@ -460,5 +463,4 @@ settings::settings(bundle const& b, const QString& axis_name, Axis idx):  settings::~settings() = default; -} - +} // ns spline_detail diff --git a/spline/spline.hpp b/spline/spline.hpp index 270c4670..87489076 100644 --- a/spline/spline.hpp +++ b/spline/spline.hpp @@ -48,7 +48,8 @@ public:  struct OTR_SPLINE_EXPORT base_spline_  { -    virtual inline ~base_spline_(); +    virtual ~base_spline_(); +    base_spline_& operator=(const base_spline_&) = default;      virtual float get_value(double x) = 0;      virtual float get_value_no_save(double x) const = 0; @@ -72,7 +73,7 @@ struct OTR_SPLINE_EXPORT spline_settings_mixin      virtual std::shared_ptr<spline_detail::base_settings> get_settings() = 0;      virtual std::shared_ptr<const spline_detail::base_settings> get_settings() const = 0; -    virtual inline ~spline_settings_mixin(); +    virtual ~spline_settings_mixin();  };  struct OTR_SPLINE_EXPORT spline_modify_mixin @@ -83,11 +84,12 @@ struct OTR_SPLINE_EXPORT spline_modify_mixin      virtual void remove_point(int i) = 0;      virtual void clear() = 0; -    virtual inline ~spline_modify_mixin(); +    virtual ~spline_modify_mixin();  };  struct OTR_SPLINE_EXPORT base_spline : base_spline_, spline_modify_mixin, spline_settings_mixin  { +    ~base_spline() override;  };  class OTR_SPLINE_EXPORT spline : public base_spline @@ -158,10 +160,6 @@ public:      using settings = spline_detail::settings;  }; -inline base_spline_::~base_spline_() = default; -inline spline_modify_mixin::~spline_modify_mixin() = default; -inline spline_settings_mixin::~spline_settings_mixin() = default; -  } // ns spline_detail  using spline = spline_detail::spline; diff --git a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp index 269f8266..6622a3b7 100644 --- a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp +++ b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp @@ -61,12 +61,13 @@ void tracker_freepie::run() {              continue;              case flag_Raw | flag_Orient:                  for (int i = 0; i < 3; i++) -                    orient[i] = tmp.fl[i+9]; +                    orient[i] = (double)tmp.fl[i+9];              break;              case flag_Orient:                  for (int i = 0; i < 3; i++) -                    orient[i] = tmp.fl[i]; +                    orient[i] = (double)tmp.fl[i];              break; +            default: goto fail;              }              filled = true; @@ -100,6 +101,7 @@ void tracker_freepie::run() {                  pose[Yaw + i] = r2d * orient[axis] + add;              }          } +fail:          usleep(4000);      }  } diff --git a/tracker-hatire/ftnoir_tracker_hat.cpp b/tracker-hatire/ftnoir_tracker_hat.cpp index d9f0a33b..08027f48 100644 --- a/tracker-hatire/ftnoir_tracker_hat.cpp +++ b/tracker-hatire/ftnoir_tracker_hat.cpp @@ -141,7 +141,7 @@ void hatire::data(double *data)      };      for (auto& k : spec) -        k.place = (k.sign ? -1 : 1) * (k.enable ? k.input : 0); +        k.place = (k.sign ? -1 : 1) * (k.enable ? (double)k.input : 0);  }  #include "ftnoir_tracker_hat_dialog.h" diff --git a/tracker-hatire/thread.cpp b/tracker-hatire/thread.cpp index 3eb2579f..4c9574b9 100644 --- a/tracker-hatire/thread.cpp +++ b/tracker-hatire/thread.cpp @@ -304,7 +304,7 @@ void hatire_thread::serial_info_impl()  void hatire_thread::on_serial_read()  { -    const int sz = com_port.read(buf, sizeof(buf)); +    const int sz = (int)com_port.read(buf, sizeof(buf));      if (sz > 0)      { diff --git a/tracker-pt/module/camera.cpp b/tracker-pt/module/camera.cpp index 85439431..1b948932 100644 --- a/tracker-pt/module/camera.cpp +++ b/tracker-pt/module/camera.cpp @@ -19,6 +19,7 @@  #include <cstdlib>  using namespace pt_module; +namespace pt_module {  Camera::Camera(const QString& module_name) : s { module_name }  { @@ -141,10 +142,10 @@ bool Camera::start(int idx, int fps, int res_x, int res_y)  void Camera::stop()  {      cap = nullptr; -    desired_name = QString(); -    active_name = QString(); -    cam_info = pt_camera_info(); -    cam_desired = pt_camera_info(); +    desired_name = QString{}; +    active_name = QString{}; +    cam_info = {}; +    cam_desired = {};  }  bool Camera::get_frame_(cv::Mat& frame) @@ -171,3 +172,4 @@ void Camera::camera_deleter::operator()(cv::VideoCapture* cap)      }  } +} // ns pt_module diff --git a/tracker-pt/module/frame.cpp b/tracker-pt/module/frame.cpp index 6734edf6..7dd8c92f 100644 --- a/tracker-pt/module/frame.cpp +++ b/tracker-pt/module/frame.cpp @@ -4,7 +4,7 @@  #include <opencv2/imgproc.hpp> -using namespace pt_module; +namespace pt_module {  Preview& Preview::operator=(const pt_frame& frame_)  { @@ -76,3 +76,5 @@ void Preview::ensure_size(cv::Mat& frame, int w, int h, int type)      if (frame.cols != w || frame.rows != h)          frame = cv::Mat(h, w, type);  } + +} // ns pt_module diff --git a/tracker-pt/module/frame.hpp b/tracker-pt/module/frame.hpp index 49dde49e..d440bd67 100644 --- a/tracker-pt/module/frame.hpp +++ b/tracker-pt/module/frame.hpp @@ -5,6 +5,11 @@  #include <opencv2/core.hpp>  #include <QImage> +#ifdef __clang__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif +  namespace pt_module {  struct Frame final : pt_frame @@ -29,8 +34,11 @@ struct Preview final : pt_preview  private:      static void ensure_size(cv::Mat& frame, int w, int h, int type); -    bool fresh = true; -    cv::Mat frame_copy, frame_color, frame_out, frame_out2; +    cv::Mat frame_copy, frame_out;  };  } // ns pt_module + +#ifdef __clang__ +#   pragma clang diagnostic pop +#endif diff --git a/tracker-pt/module/module.cpp b/tracker-pt/module/module.cpp index 4731175a..f665face 100644 --- a/tracker-pt/module/module.cpp +++ b/tracker-pt/module/module.cpp @@ -12,7 +12,11 @@  static const QString module_name = "tracker-pt"; -using namespace pt_module; +#ifdef __clang__ +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +namespace pt_module {  struct pt_module_traits final : pt_runtime_traits  { @@ -54,13 +58,15 @@ struct dialog_pt : TrackerDialog_PT      dialog_pt();  }; -// ns pt_module - -using namespace pt_module; -  dialog_pt::dialog_pt() : TrackerDialog_PT(module_name) {}  QString metadata_pt::name() { return tr("PointTracker 1.1"); }  QIcon metadata_pt::icon() { return QIcon(":/Resources/Logo_IR.png"); } +} + +// ns pt_module + +using namespace pt_module; +  OPENTRACK_DECLARE_TRACKER(tracker_pt, dialog_pt, metadata_pt) diff --git a/tracker-pt/module/module.hpp b/tracker-pt/module/module.hpp index 3afe8bc9..0b3f12cf 100644 --- a/tracker-pt/module/module.hpp +++ b/tracker-pt/module/module.hpp @@ -13,8 +13,8 @@ class OTR_GENERIC_EXPORT metadata_pt : public Metadata  {      Q_OBJECT -    QString name(); -    QIcon icon(); +    QString name() override; +    QIcon icon() override;  };  } // ns pt_module diff --git a/tracker-pt/module/point_extractor.cpp b/tracker-pt/module/point_extractor.cpp index f8c37351..c0756a40 100644 --- a/tracker-pt/module/point_extractor.cpp +++ b/tracker-pt/module/point_extractor.cpp @@ -30,7 +30,6 @@  #include <QDebug>  using namespace types; -using namespace pt_module;  // meanshift code written by Michael Welter @@ -84,6 +83,8 @@ static cv::Vec2d MeanShiftIteration(const cv::Mat &frame_gray, const vec2 &curre          return current_center;  } +namespace pt_module { +  PointExtractor::PointExtractor(const QString& module_name) : s(module_name)  {      blobs.reserve(max_blobs); @@ -352,7 +353,9 @@ end:          const f overlay_size = dpi > 1.5 ? 2 : 1; -        cv::circle(preview_frame, p, iround((b.radius + 3.3) * c_ * c_fract), circle_color, overlay_size, cv::LINE_AA, fract_bits); +        cv::circle(preview_frame, p, iround((b.radius + 3.3) * c_ * c_fract), +                   circle_color, (int)overlay_size, +                   cv::LINE_AA, fract_bits);          char buf[16];          buf[sizeof(buf)-1] = '\0'; @@ -387,3 +390,5 @@ blob::blob(f radius, const vec2& pos, f brightness, const cv::Rect& rect) :  {      //qDebug() << "radius" << radius << "pos" << pos[0] << pos[1];  } + +} // ns pt_module diff --git a/tracker-pt/pt-api.hpp b/tracker-pt/pt-api.hpp index 6c36ebaf..300e4558 100644 --- a/tracker-pt/pt-api.hpp +++ b/tracker-pt/pt-api.hpp @@ -13,6 +13,11 @@  #include <QImage> +#ifdef __clang__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif +  struct pt_camera_info final  {      using f = types::f; @@ -107,3 +112,7 @@ struct pt_runtime_traits  template<typename t>  using pt_pointer = typename pt_runtime_traits::pointer<t>; + +#ifdef __clang__ +#   pragma clang diagnostic pop +#endif diff --git a/tracker-pt/pt-settings.hpp b/tracker-pt/pt-settings.hpp index 088dfe5a..2027302b 100644 --- a/tracker-pt/pt-settings.hpp +++ b/tracker-pt/pt-settings.hpp @@ -19,6 +19,11 @@ namespace pt_settings_detail {  using namespace options; +#ifdef __clang__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif +  struct pt_settings final : options::opts  {      using slider_value = options::slider_value; @@ -57,9 +62,13 @@ struct pt_settings final : options::opts      value<slider_value> threshold_slider { b, "threshold-slider", { 128, 0, 255 } };      explicit pt_settings(const QString& name) : opts(name) {} -    ~pt_settings() = default; +    ~pt_settings() override = default;  }; +#ifdef __clang__ +#   pragma clang diagnostic pop +#endif +  } // ns pt_settings_detail  using pt_settings = pt_settings_detail::pt_settings; diff --git a/tracker-wii/wii_camera.cpp b/tracker-wii/wii_camera.cpp index 83c6a0ce..ab216215 100644 --- a/tracker-wii/wii_camera.cpp +++ b/tracker-wii/wii_camera.cpp @@ -28,10 +28,10 @@ namespace pt_module {  WIICamera::WIICamera(const QString& module_name) : s { module_name }  { -	cam_info.fps = 70; -	cam_info.res_x = 1024; -	cam_info.res_y = 768; -	cam_info.fov = 42.0f; +    cam_info.fps = 70; +    cam_info.res_x = 1024; +    cam_info.res_y = 768; +    cam_info.fov = 42;      cam_info.idx = 0;  } diff --git a/tracker-wii/wii_frame.hpp b/tracker-wii/wii_frame.hpp index 10c1b122..5b55bec8 100644 --- a/tracker-wii/wii_frame.hpp +++ b/tracker-wii/wii_frame.hpp @@ -12,7 +12,10 @@  #include <opencv2/core.hpp>  #include <QImage> - +#ifdef __clang__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif  namespace pt_module { @@ -62,3 +65,7 @@ private:  };  } // ns pt_module + +#ifdef __clang__ +#   pragma clang diagnostic pop +#endif diff --git a/tracker-wii/wii_module.cpp b/tracker-wii/wii_module.cpp index 9f2a4b04..c4884f22 100644 --- a/tracker-wii/wii_module.cpp +++ b/tracker-wii/wii_module.cpp @@ -20,7 +20,12 @@  static const QString module_name = "tracker-wii-pt"; -using namespace pt_module; +#ifdef __clang__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +namespace pt_module {  struct wii_pt_module_traits final : pt_runtime_traits  { @@ -63,6 +68,12 @@ struct wii_dialog_pt : TrackerDialog_PT      wii_dialog_pt();  }; +} // ns pt_module + +#ifdef __clang__ +#   pragma clang diagnostic pop +#endif +  QString wii_metadata_pt::name()  {      return tr("WiiPointTracker 1.1"); @@ -73,13 +84,11 @@ QIcon wii_metadata_pt::icon()      return QIcon(":/Resources/wii.png");  } -// ns pt_module -  using namespace pt_module;  wii_dialog_pt::wii_dialog_pt() : TrackerDialog_PT(module_name)  { -	ui.tabWidget->removeTab(0); +    ui.tabWidget->removeTab(0);  }  OPENTRACK_DECLARE_TRACKER(wii_tracker_pt, wii_dialog_pt, wii_metadata_pt) diff --git a/tracker-wii/wii_point_extractor.cpp b/tracker-wii/wii_point_extractor.cpp index 2da91d01..c5c20c6a 100644 --- a/tracker-wii/wii_point_extractor.cpp +++ b/tracker-wii/wii_point_extractor.cpp @@ -72,8 +72,8 @@ bool WIIPointExtractor::draw_points(cv::Mat& preview_frame, const struct wii_inf  		if (dot.bvis) {  			//qDebug() << "wii:" << dot.RawX << "+" << dot.RawY;  			//anti-clockwise rotate the 2D point -			const float RX = W - dot.ux; -			const float RY = H - dot.uy; +			const double RX = W - dot.ux; +			const double RY = H - dot.uy;  			//vec2 dt((dot.RawX - W / 2.0f) / W, -(dot.RawY - H / 2.0f) / W);  			//vec2 dt((RX - W / 2.0f) / W, -(RY - H / 2.0f) / W);  			//vec2 dt((2.0f*RX - W) / W, -(2.0f*RY - H ) / W); @@ -99,8 +99,8 @@ void WIIPointExtractor::draw_bg(cv::Mat& preview_frame, const struct wii_info& w  		2);  	//draw horizon -	int pdelta = iround((preview_frame.rows / 4) * tan((wii.Pitch)* M_PI / 180.0f)); -	int rdelta = iround((preview_frame.cols / 4) * tan((wii.Roll)* M_PI / 180.0f)); +	int pdelta = iround((preview_frame.rows / 4.) * tan(((double)wii.Pitch)* M_PI / 180.)); +	int rdelta = iround((preview_frame.cols / 4.) * tan(((double)wii.Roll)* M_PI / 180.));  	cv::line(preview_frame,  		cv::Point(0, preview_frame.rows / 2 + rdelta - pdelta), diff --git a/tracker-wii/wiiyourself/warns-begin.hpp b/tracker-wii/wiiyourself/warns-begin.hpp index ca2b6b93..e4b148ef 100644 --- a/tracker-wii/wiiyourself/warns-begin.hpp +++ b/tracker-wii/wiiyourself/warns-begin.hpp @@ -3,7 +3,10 @@  #   pragma GCC diagnostic ignored "-Wswitch"  #   pragma GCC diagnostic ignored "-Wreorder"  #   pragma GCC diagnostic ignored "-Wunused-variable" -#   pragma GCC diagnostic ignored "-Wunused-but-set-variable"  #   pragma GCC diagnostic ignored "-Wunused-parameter" -#   pragma GCC diagnostic ignored "-Wcast-function-type" +#   pragma GCC diagnostic ignored "-Wcast-align" +#   ifndef __clang__ +#       pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#       pragma GCC diagnostic ignored "-Wcast-function-type" +#   endif  #endif diff --git a/tracker-wii/wiiyourself/wiimote.cpp b/tracker-wii/wiiyourself/wiimote.cpp index 0da0113b..f6946fad 100644 --- a/tracker-wii/wiiyourself/wiimote.cpp +++ b/tracker-wii/wiiyourself/wiimote.cpp @@ -10,16 +10,10 @@  #include "warns-begin.hpp" -// VC-specifics: -#ifdef _MSC_VER  - // disable warning "C++ exception handler used, but unwind semantics are not enabled." - //				     in <xstring> (I don't use it - or just enable C++ exceptions) -# pragma warning(disable: 4530) -//  auto-link with the necessary libs -//# pragma comment(lib, "setupapi.lib") -//# pragma comment(lib, "hid.lib")		// for HID API (from DDK) -//# pragma comment(lib, "winmm.lib")		// for timeGetTime() -#endif // _MSC_VER +#include <cmath> +#include <new> +#include <cstring> +#include <cstdio>  #include "wiimote.h"  #include <setupapi.h> @@ -29,8 +23,6 @@ extern "C" {  #include <sys/types.h>	// for _stat  #include <sys/stat.h>	// " -#include <cstring> -#include <cstdio>  #include <process.h>	// for _beginthreadex()  #include <math.h>		// for orientation  #include <mmreg.h>		// for WAVEFORMATEXTENSIBLE @@ -251,8 +243,9 @@ bool wiimote::Connect(unsigned wiimote_index, bool force_hidwrites)  		// (bizarre way of doing it) create a buffer large enough to hold the  		//  fixed-size detail struct components, and the variable string size -		SP_DEVICE_INTERFACE_DETAIL_DATA *didetail = -			(SP_DEVICE_INTERFACE_DETAIL_DATA*) new BYTE[req_size]; +                using spdidd = SP_DEVICE_INTERFACE_DETAIL_DATA; +		constexpr std::align_val_t align { alignof(spdidd) }; +                spdidd *didetail = (spdidd*)operator new(req_size, align);  		_ASSERT(didetail);  		didetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); @@ -1203,7 +1196,7 @@ bool wiimote::EstimateOrientationFrom(wiimote_state::acceleration &accel)  		// wiimote seems to be stationary:  normalize the current acceleration  		//  (ie. the assumed gravity vector) -		float inv_len = 1.f / sqrt(length_sq); +		float inv_len = 1.f / std::sqrt(length_sq);  		float x = accel.X * inv_len;  		float y = accel.Y * inv_len;  		float z = accel.Z * inv_len; @@ -1215,9 +1208,9 @@ bool wiimote::EstimateOrientationFrom(wiimote_state::acceleration &accel)  		// and extract pitch & roll from them:  		// (may not be optimal) -		float pitch = -asin(y)    * 57.2957795f; +		float pitch = -std::asin(y)    * 57.2957795f;  		//		float roll  =  asin(x)    * 57.2957795f; -		float roll = atan2(x, z) * 57.2957795f; +		float roll = std::atan2(x, z) * 57.2957795f;  		if (z < 0) {  			pitch = (y < 0) ? 180 - pitch : -180 - pitch;  			roll = (x < 0) ? -180 - roll : 180 - roll; diff --git a/tracker-wii/wiiyourself/wiimote.h b/tracker-wii/wiiyourself/wiimote.h index b4738026..9b6d3ba3 100644 --- a/tracker-wii/wiiyourself/wiimote.h +++ b/tracker-wii/wiiyourself/wiimote.h @@ -472,7 +472,7 @@ volatile int	 MotionPlusDetectCount;		  // waiting for the result  		volatile DWORD	 AsyncRumbleTimeout;  		// orientation estimation  		unsigned		 WiimoteNearGUpdates; -		unsigned		 NunchukNearGUpdates; +		//unsigned		 NunchukNearGUpdates;  		// audio  		HANDLE			 SampleThread;  		const wiimote_sample* volatile CurrentSample;	// otherwise playing square wave diff --git a/variant/default/main-window.cpp b/variant/default/main-window.cpp index 7b2456e8..11d3eb97 100644 --- a/variant/default/main-window.cpp +++ b/variant/default/main-window.cpp @@ -339,9 +339,15 @@ main_window::~main_window()      if (work)      {          stop_tracker_(); -        QEventLoop ev; -        ev.processEvents(); -        portable::sleep(2000); + +        constexpr int inc = 100, max = 2000; + +        for (int k = 0; k < max; k += inc) +        { +            QEventLoop ev; +            ev.processEvents(); +            portable::sleep(inc); +        }      }      exit(); | 
