「Windowsにおける仮想的ディスプレイ」の版間の差分

Notion-MW
タグ: 差し戻し済み
Notion-MW
 
(同じ利用者による、間の3版が非表示)
19行目: 19行目:
だが、それでもやはりちょっと素性が知れない。もう少し調べていくと、Indirect Display Driver (IDD)という技術を使うとそういうソフトウェアが書けるというMicrosoftのドキュメントが出てきた。そこからさらに調べてみるとこんなものがあった。
だが、それでもやはりちょっと素性が知れない。もう少し調べていくと、Indirect Display Driver (IDD)という技術を使うとそういうソフトウェアが書けるというMicrosoftのドキュメントが出てきた。そこからさらに調べてみるとこんなものがあった。


[https://github.com/roshkins/IddSampleDriver link_preview]
[https://github.com/roshkins/IddSampleDriver <span>https://github.com/roshkins/IddSampleDriver</span>]


これを試したら無事動いたので、ついでに解像度を変えてみたら、普通に8Kくらいまで動いた(ただしその分重くなる)。↑のレポジトリでも解像度増やしてというissueがあったので、forkして公開した。さらにver0.0.1.2では&quot;C&#58;\IddSampleDriver\option.txt”というファイルを設定することで解像度オプションやディスプレイの個数をユーザーが設定できるように変更した。
これを試したら無事動いたので、ついでに解像度を変えてみたら、普通に8Kくらいまで動いた(ただしその分重くなる)。↑のレポジトリでも解像度増やしてというissueがあったので、forkして公開した。さらにver0.0.1.2では&quot;C&#58;\IddSampleDriver\option.txt”というファイルを設定することで解像度オプションやディスプレイの個数をユーザーが設定できるように変更した。


[https://github.com/ge9/IddSampleDriver link_preview]
[https://github.com/ge9/IddSampleDriver <span>https://github.com/ge9/IddSampleDriver</span>]


本家のreadmeで紹介された結果、どうやらゲーム配信関係のRedditとかに載ったみたいで、実質的にはほぼ何もしていないのに400以上のstarを獲得している。
本家のreadmeで紹介された結果、どうやらゲーム配信関係のRedditとかに載ったみたいで、実質的にはほぼ何もしていないのに800以上のstarを獲得している。
 
また、さらにこれをforkしたものとして[https://github.com/VirtualDrivers/Virtual-Display-Driver <span>https://github.com/VirtualDrivers/Virtual-Display-Driver</span>]が作られ、これはすでに5000starを超える大きなプロジェクトになっている。
 
* <strong>こちらはHDRにも対応していて積極的に開発されているので、今は基本的にはこちらを使ったほうがいいだろう。</strong>(以下の情報はIddSampleDriverなので古いかもしれない)
 
{{Outdated}}


以下、このソフトの話を主にしていく。
以下、このソフトの話を主にしていく。
68行目: 74行目:
* 解像度やリフレッシュレートの設定が不適切だと、デバイスマネージャで何度か再読み込みされる感じの動作をしたあと自動的に停止され警告アイコンが表示される。
* 解像度やリフレッシュレートの設定が不適切だと、デバイスマネージャで何度か再読み込みされる感じの動作をしたあと自動的に停止され警告アイコンが表示される。
* 日付を超えるとタイムゾーン(筆者はJST&#61;UTC+9)の関係でInf2Catが失敗する。プロジェクトのプロパティからInf2Catのメニューに行き、General → Use Local Time を「はい (/uselocaltime)」に設定する。参考&#58; [https://monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html https&#58;//monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html]
* 日付を超えるとタイムゾーン(筆者はJST&#61;UTC+9)の関係でInf2Catが失敗する。プロジェクトのプロパティからInf2Catのメニューに行き、General → Use Local Time を「はい (/uselocaltime)」に設定する。参考&#58; [https://monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html https&#58;//monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html]
** さらに、これを設定してもなぜか現地時間の21&#58;00~24&#58;00の間にビルドしたものは正常動作しなかった(ビルドは通るしデバイスマネージャでの警告アイコンも出ないのにサブディスプレイが出ない)ので、ビルド時はその範囲外になるようにPCの時計設定を適宜変更する(報告済み [https://github.com/roshkins/IddSampleDriver/issues/5 https://github.com/roshkins/IddSampleDriver/issues/5])
** さらに、これを設定してもなぜか現地時間の21&#58;00~24&#58;00の間にビルドしたものは正常動作しなかった(ビルドは通るしデバイスマネージャでの警告アイコンも出ないのにサブディスプレイが出ない)ので、ビルド時はその範囲外になるようにPCの時計設定を適宜変更する(報告済み [https://github.com/roshkins/IddSampleDriver/issues/5 <span>https://github.com/roshkins/IddSampleDriver/issues/5</span>])


自分でビルドしたやつのインストール時は、(おそらく自分のユーザー名を用いて署名が作られているため?)最初の一回のみ改めて.cerを登録する必要がある。二回目以降は、サブフォルダに生成されてるcat, dll, infをもってきて置き換えたあとデバイスマネージャから「ドライバーの更新」をすればよい。デバイスマネージャーは使ったフォルダをちゃんと覚えているようなので、頻繁に移動しなくていい安定した場所でビルドを行うのがいいだろう。
自分でビルドしたやつのインストール時は、(おそらく自分のユーザー名を用いて署名が作られているため?)最初の一回のみ改めて.cerを登録する必要がある。二回目以降は、サブフォルダに生成されてるcat, dll, infをもってきて置き換えたあとデバイスマネージャから「ドライバーの更新」をすればよい。デバイスマネージャーは使ったフォルダをちゃんと覚えているようなので、頻繁に移動しなくていい安定した場所でビルドを行うのがいいだろう。
75行目: 81行目:
== HDR対応について ==
== HDR対応について ==


* HDRの基本についてはここがよさそう? [https://zenn.dev/okuoku/scraps/ca346768627367 https&#58;//zenn.dev/okuoku/scraps/ca346768627367]
Virtual&#45;Display&#45;DriverのほうではHDRに対応している。


GitHubのissueでも複数回挙がっているのが、HDR (High Dynamic Range)への対応であるが、現在のところ解決の目処は立っていない。
[https://github.com/VirtualDrivers/Virtual-Display-Driver/issues/32 https&#58;//github.com/VirtualDrivers/Virtual&#45;Display&#45;Driver/issues/32]や[https://github.com/roshkins/IddSampleDriver/issues/23 https&#58;//github.com/roshkins/IddSampleDriver/issues/23]で話題になっている通り、Windows 10ではHDRは動作しない。


* IDDの枠組みではそもそもサポートされてない?<br />
* HDRの基本についてはここがよさそう? [https://zenn.dev/okuoku/scraps/ca346768627367 https&#58;//zenn.dev/okuoku/scraps/ca346768627367]
[https://github.com/MicrosoftDocs/windows-driver-docs-ddi/issues/199 https://github.com/MicrosoftDocs/windows-driver-docs-ddi/issues/199]
* 報奨金を設定した人がいる<br />
[https://github.com/5andr0/Virtual-HDR-Display/issues/1 https://github.com/5andr0/Virtual-HDR-Display/issues/1]


=== その他参考情報 ===
=== その他参考情報 ===


このIDDというのはUser&#45;modeで動作するやつなのだがKernel&#45;modeで動作するKMDODとかいうものもあるらしく、そっちの方が多くのことができるのかもしれない。ただし調べた感じ、ただちに使えそうなものは見つからなかった。まあWindowsのディスプレイドライバなんか趣味でそうそう書くもんではないのでしょうがない。
このIDDというのはUser&#45;modeで動作するやつなのだがKernel&#45;modeで動作するKMDODとかいうものもあるらしく、そっちの方が多くのことができるのかもしれない。前述の両リポジトリのHDR関連issueでも言及されている。ただし調べた感じ、ただちに使えそうなものは見つからなかった。まあWindowsのディスプレイドライバなんか趣味でそうそう書くもんではないのでしょうがない。


一応適当に調べて出てきた参考リンクなど
一応適当に調べて出てきた参考リンクなど
95行目: 98行目:
[https://community.osr.com/discussion/286843/how-to-implement-virtual-display-adapter https&#58;//community.osr.com/discussion/286843/how&#45;to&#45;implement&#45;virtual&#45;display&#45;adapter]
[https://community.osr.com/discussion/286843/how-to-implement-virtual-display-adapter https&#58;//community.osr.com/discussion/286843/how&#45;to&#45;implement&#45;virtual&#45;display&#45;adapter]
** そこで言及されているLin JiaBang氏のソフト(動作未確認)<br />
** そこで言及されているLin JiaBang氏のソフト(動作未確認)<br />
[https://github.com/LinJiabang/virtual-display https://github.com/LinJiabang/virtual-display]
[https://github.com/LinJiabang/virtual-display <span>https://github.com/LinJiabang/virtual-display</span>]
* WDDMで仮想ディスプレイを作れるかどうかについて(2016年)<br />
* WDDMで仮想ディスプレイを作れるかどうかについて(2016年)<br />
[https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/2d60c1c2-5198-47e2-b5d9-2ba28461e72e/how-to-implement-virtual-display-adapter-driver-on-windows-10?forum=wdk https&#58;//social.msdn.microsoft.com/Forums/vstudio/ja&#45;JP/2d60c1c2&#45;5198&#45;47e2&#45;b5d9&#45;2ba28461e72e/how&#45;to&#45;implement&#45;virtual&#45;display&#45;adapter&#45;driver&#45;on&#45;windows&#45;10?forum&#61;wdk]
[https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/2d60c1c2-5198-47e2-b5d9-2ba28461e72e/how-to-implement-virtual-display-adapter-driver-on-windows-10?forum=wdk https&#58;//social.msdn.microsoft.com/Forums/vstudio/ja&#45;JP/2d60c1c2&#45;5198&#45;47e2&#45;b5d9&#45;2ba28461e72e/how&#45;to&#45;implement&#45;virtual&#45;display&#45;adapter&#45;driver&#45;on&#45;windows&#45;10?forum&#61;wdk]
113行目: 116行目:
まず s_KnownMonitorModes のところ。この際リフレッシュレートが60HzになるようにPixel Clock Rateをちゃんと計算する必要がある。
まず s_KnownMonitorModes のところ。この際リフレッシュレートが60HzになるようにPixel Clock Rateをちゃんと計算する必要がある。


<syntaxhighlight lang="python">
<syntaxhighlight lang="c++">{
 
c++
{
       229008 * KHZ,                                      // pixel clock rate [Hz]
       229008 * KHZ,                                      // pixel clock rate [Hz]
     { 229008 * KHZ, 2560 + 40 },                        // fractional horizontal refresh rate [Hz]
     { 229008 * KHZ, 2560 + 40 },                        // fractional horizontal refresh rate [Hz]