OSDN Ticket Archive


Ticket #39721

macOS版 ディスプレイリンク対応

登録: 2019-11-04 21:50 最終更新: 2019-11-07 01:30

報告者:
yknk
担当者:
yknk
チケットの種類:
サポートリクエスト
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for macOS
マイルストーン:
Version 1.3.1 for macOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

独自スレッドによる描画処理から、ディスプレイリンクを用いた描画処理に移行する。

ディスプレイリンク移行の背景は以下チケット参照。

  • #39720 macOS版 開発環境をXcode 10に移行

チケットの履歴

2019-11-04 21:50 更新者: yknk
  • 新しいチケット "macOS版 ディスプレイリンク対応" が作成されました
2019-11-04 21:52 更新者: yknk
コメント

対策1:メインビューの独自描画スレッド廃止とディスプレイリンク導入

フレームワーク追加

利用するフレームワークに CoreVideo.framework を追加する。

Targets / MIDITrail / General
Linked Frameworks and Libraries

MTMainView

メンバ変数にOpenGLコンテキストとディスプレイリンクを追加(m_pOpenGLContext, m_DisplayLinkRef)。 FPS算出用メンバ変数を追加(m_PrevFPSUpdateTime, m_DrawCount)。

MTMainView::initWithFrame

追加したメンバ変数の初期化処理を追加。

MTMainView::dealloc

ディスプレイリンクの解放処理を追加。

MTMainView::prepareOpenGL

基底クラスのメソッド呼び出し [super prepareOpenGL] を追加。これまで呼び出し忘れていた。 ディスプレイリンクの生成と初期設定の処理を追加。

MTMainView::startScene

描画スレッド起動処理を削除して、ディスプレイリンク開始処理を追加。 FPS算出用メンバ変数初期化処理を追加。

MTMainView::stopScene

描画スレッドへのメッセージ送信処理を削除して、ディスプレイリンク停止処理を追加。

MTMainView::pauseScene

シーン一時停止メソッドを追加。 ディスプレイリンク処理を停止する。

MTMainView::resumeScene

シーン再開メソッドを追加。 ディスプレイリンク処理を開始する。 FPS算出用メンバ変数初期化処理を追加。

DisplayLinkCallback

ディスプレイリンクコールバック関数を追加。 ディスプレイリンクのスレッドから呼び出される。 シーン描画処理を実行する。

MTMainView::thread_DrawScene

これまで独自スレッドでシーン描画処理のループを行なっていたが、 ループを取りやめ、描画処理を1回実施するだけで終了とする。 OpenGLコンテキストのロックとコンテキストの取得を、シーン描画処理の最上位に位置する本メソッドで行う。

MTMainView::thread_DrawProc

OpenGLコンテキストのロックとコンテキストの取得を上位メソッドに移管するため、本メソッドから削除する。

MTMainView::thread_ExecSceneMsg

シーン停止のメッセージ対応処理を削除。 ディスプレイリンクの停止により、描画スレッドを停止することができるようになったため。

MTMainView::thread_WaitInterval

独自スレッドでループする際の待機メソッドを削除。

MTMainView::thread_UpdateFPS

独自スレッドを廃止したことに伴い、FPSの算出ロジックを変更。

(編集済, 2019-11-04 22:06 更新者: yknk)
2019-11-04 21:54 更新者: yknk
コメント

対策2:フルスクリーン表示の修正ほか

MTMainWindowCtrl::windowWillEnterFullScreen

フルスクリーン開始前にシーンの一時停止メソッド呼び出しを追加する。(ディスプレイリンク停止)

MTMainWindowCtrl::windowDidEnterFullScreen

フルスクリーン開始後にシーンの再開メソッド呼び出しを追加する。(ディスプレイリンク開始)

MTMainWindowCtrl::windowWillExitFullScreen

フルスクリーン終了前にシーンの一時停止メソッド呼び出しを追加する。(ディスプレイリンク停止)

MTMainWindowCtrl::windowDidExitFullScreen

フルスクリーン終了後にシーンの再開メソッド呼び出しを追加する。(ディスプレイリンク開始)

MTMainWindowCtrl::timerControl

スペルミスを修正(リファクタリング)。ただしこの処理が呼び出されることはない。

変更前:pTitle = @"MIDItrail";
変更後:pTitle = @"MIDITrail";

MTSceneMsgStopScene

シーン停止メッセージクラスを削除。

(編集済, 2019-11-04 21:57 更新者: yknk)
2019-11-07 01:30 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました

添付ファイルリスト

添付ファイルはありません