>WPFみたいな描画をSDKで行いたいと考えています。
>WPFはDirectXでDWM用のデータ(0xAARRGGBB)を吐くそうです。
>GDIを用いない描画システムを考えています。
DirectXを使えばいいのでは・・・
PATIOさん、たしかにそうですが研究中ですので。。
ryoさん、DirectXはちょっと使いにくいので・・
>WPFみたいな描画をSDKで行いたいと考えています。
Win32からはWIC(Windows Imaging Component)、Direct2D、DirectWriteを使うべき。
ちなみにDirectXをインストールしなくてもSDKのみで使えますよ。
subaruさん、ありがとうございます。Windows Imaging Componentとは何ですか?
dllダウンロードと.NETの話しか出てこないのですが・・
調べてみました。
MSDNのヘルプが以下になります。
MSDN: Windows Imaging Component (Windows)
http://msdn.microsoft.com/en-us/library/ee719902.aspx
あと,MSDNマガジンで2記事ほどありました。
MSDN: Windows with C++: Windows Imaging Component Basics
http://msdn.microsoft.com/ja-jp/magazine/cc500647.aspx
MSDN: Windows と C++: WIC を使用した Windows Vista アイコンのデコード
http://msdn.microsoft.com/ja-jp/magazine/cc546571.aspx
ROMしてたんですが.....
dicsonさん、
VRAMを直接制御できたのは、NECのPC-9801XXの全盛期のころですね。
グラフィック用のICもμPD7220系列で上位互換がありました。
DOS/Vも直接制御できたかもしれませんが、グラフィック用のICが機種ごとに
違ったのでややこしかったかも知れませんね。
統一規格はあったのですが.......
現在にいたっては、GPUのメーカも競争、かつ、VRAMの制御も独自規格です。
VRAMの直接制御は無理ですね。
WPFはぐぐれば専用のページが見れます。
ただ要約すると、
「vistaの頃のプレゼンテーションの機能をWindows7で実現する。」
みたいで、
GDI、DirectX等を使わないで直接VRAMを制御して高速に描画する。
のではないと思います。
vistaのグラフィックの描画はかえって遅かったのではないでしょうか。
むしろ、GDIやDirectX等を使って描画のアルゴリズムを考えるほうがいいと思います。
おおざっぱに説明するとWICがGDI+のBitmapクラスの機能に相当するもので
Direct2DがGDI+のGraphicsクラスの機能に相当すると言えるでしょうか。
WICはWPFでも使われていて、元々Vista以降からサポートされていましたが
現在はXPのSP3でも標準で使えるようになっていたと思います。
WPFの描画には、WPFとDirect3Dの中間にMedia Integration Layer(MIL)と
呼ばれるものが関わっているそうですが、VC++から直接MILを使うことは
できないようです。
(MSDNにはIMILBitmapEffectというインターフェースの説明もあるけど
本当に存在するか怪しい?)
しかしネイティブでもDirect3DをベースにDirect2Dが作られ
MILより高パフォーマンスな描画ができるようになった
・・・という話がこの辺りに書かれています。
http://msdn.microsoft.com/ja-jp/magazine/dd861344.aspx
Direct2DとDirectWriteはWindows7から提供されましたが
現在はVista SP2以降でも利用できるようになっているようで、
IE9やFireFox4でも採用されています。
> ただ要約すると、
> 「vistaの頃のプレゼンテーションの機能をWindows7で実現する。」
> みたいで、
これはWPFのことを言っていますか?
WPFはそういうものではないですよ。
そもそもWPFの描画はDirectX9に依る様になっていて,だからこそWindows XPでもWPFが動
くのですが。
# XPだといろいろ残念な描画になることも多いですが……。
> vistaのグラフィックの描画はかえって遅かったのではないでしょうか。
CPUがそれなりに速ければ遅いことはないですけどね。
ベンチマークはともかく。
個人的にNyaruru氏は信用できると思っているし,
否定するだけの知識を持っていないのでNyaruru氏のはてなダイアリーからいくつか参考
記事を挙げますが,
これらを読むかぎり,Windows 7で高速化,ということは無いように思えます。
Site: Windows Vista での GDI/GDI+ 描画 - NyaRuRuの日記
http://d.hatena.ne.jp/NyaRuRu/20061201/p1
Site: WDDM, DWM: pros and cons - NyaRuRuの日記
http://d.hatena.ne.jp/NyaRuRu/20061202/p2
Site: Windows 7 のグラフィックスの変更点を整理する - NyaRuRuの日記
http://d.hatena.ne.jp/NyaRuRu/20081126/p1
Site: GDI アクセラレーションについて整理する - NyaRuRuの日記
http://d.hatena.ne.jp/NyaRuRu/20090208/p1
> これはWPFのことを言っていますか?
> WPFはそういうものではないですよ。
うーーん、
そうですか、失礼しました。
まぁー僕が言いたかったのは、
dicsonさんが求めているのはVRAMに直接描画するような高速な方法はないですか?
ということだと思ったのですが、違いましたか?
ぼくはただ、「WPFでもおそらく無理です。」ということを説明したかっただけですね。
それでも、WPFに興味があって使ってみたいのであれば、WPFでぐぐればMSDNのページが
検索できます。
みなさんありがとうございました。
とりあえずVRAM直接描画は無理で、Direct2D,Write,3Dを使うべきだということがわかり
ました。
WICとDirect2Dでやってみようと思います。