やっとフォントデータ丸ごとコンバータを通るようになりました。
表示は Direct3D11 beta + RADEON HD4850
ハードウエアで動かすために GeometryShader 4.0 を使っています。
Reference Driver なら GeometryShader ではなくテセレータを使用可能。
fps 表示もアウトラインフォント
プロポーショナルフォントの処理が無いので字間が少々おかしい。
CPU Rendering の WARP Driver でも 30fps くらいは出ます。
Reference Driver だと 2.4fps 程度。
(WindowsVista x64 Core2 Duo)
頂点形式は float2 x4、これを 4頂点で 1パッチとして描画しています。
4頂点なら LINELIST_ADJ で GeometryShader に渡せます。
px py c0x c0y c1x c1y tscale cx px py c0x c0y c1x c1y tscale cy px py c0x c0y c1x c1y tscale 0 px py c0x c0y c1x c1y tscale 0
1頂点が 1エッジに相当します。tscale はテセレータに対する係数。
係数が 0 だと分割しないので直線部分に使用します。
カーブが急な部分、エッジが長い部分は係数を大きくするなどの調整も可能です。
cx cy はパッチの中心座標を埋め込んだもの。
フォントデータは SVG か FXG を使用しています。glyph や path 等。
パス情報自体はほぼ同じ形式なのでデコード処理は共通化できます。
使用していませんが XAML も attribute に埋め込まれたパスの書式は同一でした。
内外判定は NonZero 相当。自己交差したパスは未対応。
・Paths SVG 1.1
・FXG 1.0 Public Specification
・パス マークアップ構文
関連エントリ
・Direct3D11/DirectX11 (16) GPU を使ったアウトラインフォントの描画の(4)
・Direct3D11/DirectX11 (15) GPU を使ったアウトラインフォントの描画の(3)
・Direct3D11/DirectX11 (14) GPU を使ったアウトラインフォントの描画の(2)
・Direct3D11/DirectX11 (10) テセレータの補間
・Direct3D11/DirectX11 (9) テセレータによるアウトラインフォントの描画など
・Direct3D11/DirectX11 (8) テセレータの動作