3

Free Type 2 を使用してフォントをロードしたり、正しいグリフとそのサイズを見つけたりするハードウェア アクセラレーション テキスト レンダラーを作成したいと考えています。

これを行う私の計画は、ビデオ メモリに (特定のフォント、サイズなどの) グリフを含む大きなテクスチャを用意し、システム メモリにテクスチャの内容に関する情報を定義する各テクスチャのテーブルを用意することです。

次に、テーブルを使用して頂点バッファーを作成し、テキストをレンダリングします。

私が直面している問題は、テクスチャの構築です。Unicode のすべてのグリフに対してテクスチャを作成するのは現実的ではありません。多すぎます。以前の Ascii では、イメージ エディターでテクスチャを作成し、必要に応じて事前にテーブルに記入していましたが、このためには、必要なグリフを取得するだけでなく、それらを効率的にキャッシュする何らかの動的システムが必要になります。同じグリフを vram に繰り返しアップロードしないようにします... (私が推測する、最も一般的に使用されていないシステムの一種)

もう 1 つの問題は、すべてのグリフが同じサイズではないことです。最大のグリフに十分な大きさのグリッドにテクスチャを分割できます (これを正確に解決するには何らかの方法が必要です)。新しいグリフ(最も一般的に使用されていないものなどに基づく)ですが、多くの無駄なスペースが残りますが、グリフがスワップインおよびスワップアウトされるため、断片化の問題に遭遇することなく、それらをより効率的にパックする方法がわかりません...

また、テクスチャが以前のテキストにまだ使用されている場合、テクスチャを更新するとグラフィックス ハードウェアが停止する可能性があると思いますが、これは正しい仮定であり、その場合はどうすれば回避できますか?

4

2 に答える 2

3

テキストのレンダリングは、いくつかのグリフを「貼り付ける」という非常に複雑な問題です...非常に複雑なだけでなく、カーニング、合字、間隔、双方向テキスト、母音など、非常に複雑です...

Pango などのテキスト レンダリング用の通常のライブラリを使用してテキストを作成し、ビットマップを作成して 3D オブジェクトにビットマップとして表示しないのはなぜですか (必要なものを理解している場合)。

編集:マークアップのような単純な HTML も Pango でレンダリングできます: http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html

于 2009-07-27T10:53:34.377 に答える
1

Cairoは、多くのサーフェス タイプへのハードウェア アクセラレーションによるレンダリングをサポートしています

レンダリングに Cairo を使用している FontForgeというライブラリがありますが、自分では試していません。あなたはそれをチェックして、それがどうなるか教えてください:-)

于 2011-07-26T13:00:27.553 に答える