High DPI
High DPIにもそれなりに対応していると思っていたのもつかの間、High DPIのドキュメントを見ているとWin 8.1で少しHigh DPIの対応方法が変わっているのに気付いた。詳細は下記に書いてある。
- Writing DPI-Aware Desktop and Win32 Applications
- Tutorial: Writing High-DPI Win32 Applications
- Windows 8.1 用の高 DPI アプリケーションを作成する
- DPI Tutorial sample
DPI対応のレベル(SystemかPer Monitor)を教えて、それぞれのレベルに応じたDPI対応コードを書くという風に変わっている。いままではSystemレベルに相当するものしかなかった。
そういうことで、上記に合わせてコードを書き換えなくてはならない。サンプルコードにDPI対応用のヘルパークラスがある。私もWin7のサンプルをベースに作ったものがあるのでそれを少し変更するだけで対応できそうな感じではある。
DWMのデスクトップ・コンポジションはWindows 8以降では常にONとなり、無効にはできない。
これは下記のドキュメントに書いていある。
ようするにWindows 8ではどのようなテーマであってもGPUによるコンポジションが可能となったのである。私が気にしているのは、Windows 7ではDWMが管理するウィンドウ・サーフェースを直接アプリがアクセスする(つまりDXGIサーフェースを直接Direct3Dなどでいじる)と、自動的にDWMはそのサーフェースのコンポジションをやめていたようなのだが、Windows 8ではどうなったのかである。実際試してみるとそのように動いているように見えるので、そうなのかなと思っているけれども、明確ドキュメントに書かれていないのでちょっと気になっている。気にしなくてもよいような気もするけど。もうひとつはWindows 7での注意事項としてゲームなどのフルスクリーン・アプリはできればコンポジションは無効化したほうがいいなんていうドキュメントを見かけたのだけれども、Windows 8以降ではどうなのかである。
DWMのコンポーズ・エンジンとDirect Compositionは密接にかかわっているようだし、これとDirect 3Dでウィンドウをレンダーターゲットにしたときの協調はどうなっているのだろう。この辺でやり方によっては冗長でリソース喰いな処理になりそうで、できればそういうことは避けたいので。