HDR有効化中のウィンドウを異なるディスプレイ間を移動した場合に移動先でスクリーンサイズが正しく反映されない

お世話になっております。

<br/>

現在、ゲームオプションで表示するディスプレイを選択するオプション機能の実装を行っており、その際にいくつかの設定手順によっては、正しくオプションの反映が行われないことを確認いたしました。

そのケースのうち、再現手法であった手順でウィンドウを変更するとウィンドウの変更イベントが無視されるような挙動がEpicLauncherから起動したエンジンでも確認しております。

<br/>

こちらについて問題があるためディスプレイ移動処理前にHDRをオフにし、それぞれフレームをずらして実行しようと考えたのですが、数フレーム遅らせただけではHDRをオフに仕切る前にディスプレイ移動処理が走ってしまい、症状の解決には至りませんでした。その他、UEのサービスによりHDRの状態の監視も行いましたが、ハードウェア的にHDRの状態が切り替わったことは取得できなかったためこちらも症状の解決には至りませんでした。

<br/>

そのため、HDRが確実に無効化されたことを確認し、安全にディスプレイの移動ができるような状態になったことを確認してから移動処理を走らせたいのですが、そのようなことは可能でしょうか。

お手数をおかけいたしますが、ご確認よろしくお願いいたします。

[Attachment Removed]

お世話になっております。

今回ご相談頂いている件ですが、HDR設定を変更した後に実際に適用するにはViewportのアップデートが必要となる見込みです。

※RHIResizeViewport()のResize()からShutdownHDR()は呼ばれている状況のようでした。

設定変更後、以下のようにUpdateViewportRHI()を直接実行し、その後移動処理を行うことで対応可能かご確認頂けますでしょうか?

  FViewport* Viewport = GEngine->GameViewport->Viewport;
  FIntPoint Size = Viewport->GetSizeXY();
  Viewport->UpdateViewportRHI(false, Size.X, Size.Y, Viewport->GetWindowMode(), PF_Unknown);

お手数おかけしますが、よろしくお願いいたします。

[Attachment Removed]

ご回答ありがとうございます。

HDRの設定時の挙動について、承知いたしました。

いただいたコードについてですが、UpdateViewportRHIがprotectedとなっており、外部から呼べないようです。

お手数ですがご確認よろしくお願いいたします。

[Attachment Removed]

ご確認ありがとうございます。

手元ではエンジン改変を含み確認してしまっており情報が不足してしまっておりました。申し訳ございません。

改めてエンジン改造を行わずに対応できないか確認したところ、SceneViewport側からのUpdateViewportRHI()を呼ぶことで対応できそうでした。

サンプル

  if (UGameEngine* GameEngine = Cast<UGameEngine>(GEngine))
  {
    if (GameEngine->SceneViewport.IsValid())
    {
      FSceneViewport* Viewport = GameEngine->SceneViewport.Get();
      Viewport->UpdateViewportRHI(
        false,
        Viewport->GetSizeXY().X,
        Viewport->GetSizeXY().Y,
        Viewport->GetWindowMode(),
        PF_Unknown
      );
    }
  }

お手数おかけしますが、上記でお試しいただけますと幸いです。

よろしくお願いいたします。

[Attachment Removed]

ご回答ありがとうございます

すみません、こちらに関してですが、HDRを無効化した後に無効化するまでの間、GEngineのGameViewportからViewportを取得取得し続け、HDRが無効になったタイミングでスクリーン変更処理を走らせることで、問題の解決を確認できました。

こちらの解決方法について特に懸念がなければ、この方法を採用し、こちらクローズとさせていただきたいと考えております。

お手数をおかけいたしますが、ご確認よろしくお願いいたします。

[Attachment Removed]

ご確認ありがとうございます。

今回の目的としては、HDRの無効化が確認できてからスクリーンの変更処理​を行いたい、といった状況かと思われますので、

Viewportを取得、HDRの状態を確認して無効化が確認できてから順次変更処理を行う形で問題ないかと思われます。

現状懸念点はありませんが、もし何らかの問題が発生するようであれば再度​ご相談頂ければと思います。

よろしくお願いいたします。​

[Attachment Removed]