« Git submodule メモ | メイン

2017年06月13日

吉里吉里Z 開発:: ハードウェア描画と互換性

    

従来の Layer を使った描画機能と互換性を持たせつつ、新規実装されるハードウェアによる描画機能を使うように作ることも出来る形にする。

新規に実装されるハードウェアによる描画は、従来のソフトウェアによる描画、つまり Layer を使った描画機構とはまったく互換性がない。
現状、最終描画は DrawDevice 機構によって行われているが、Android 版では DrawDevice はなくしてしまう予定である。
DrawDevice は、主に描画 API の抽象化を行うものであるが、描画 API の異なる Windows と Android では別実装になってしまう上、DrawDevice 自体が Windows 依存している。
DrawDevice は、Layer の最終合成結果を実際に画面に描画する機能を持っているので、DrawDevice がないと Layer を使った描画が出来ないかと言うと、そうではなく、以前この時のために実装していた LayerTreeOwner 機構がある。

Window 抽象化機構Layer Tree Owner に詳しく書いている。
「ハードウェア描画対応の準備も兼ねている」と書いているが、これがやっと日の目を見る。
BitmapLayerTreeOwner クラスは、実証実装と言うか、期待通り機能することを示すための実装だった。

ハードウェア描画機能の一部でテクスチャに Layer 合成結果を描画(転送)する機能が追加される。
ただ、これだけでは従来のように Window クラスを指定して Layer を生成しても何も描画されない。
そこで、Window クラスを指定して Layer が生成された場合、Layer Tree Owner インターフェイスを持つテクスチャクラスが内部で生成され、その LTO インターフェイスを Window クラスは返す。
これによって Window を指定した Layer の生成が従来通りできる。
この時、内部生成された LTO インターフェイスを持つテクスチャクラスは、自動的に画面描画するテクスチャとして関連付けられ、特に意識することなく従来のような Layer を使った描画が実現する。
この仕組みによって多くの人はそのまま移行できると考えている。

ただし、前述のように DrawDevice が Android では消えるので、DrawDevice 依存した実装を行っていた人はそのままでは移行できない。
まあ、 DrawDevice 自体 Windows 依存で、独自実装しているということは、Windows に依存した実装を行っていた可能性も高いので、どのみち Android 対応には何かしら作業が必要であったと思われるが。

なお、LTO インターフェイスを持つテクスチャクラスが自動追加される機構が初回リリースで入るかどうかは未定。
マルチプラットフォーム版はハードウェアによる描画が本丸である。

追記
Windows 版では、オプションで従来の DrawDevice 描画にすることもできる。
ただし、その場合はハードウェア描画は使えない。


投稿者 Takenori : 2017年06月13日 18:28




comments powered by Disqus
Total : Today : Yesterday : なかのひと