3

私の目標は、特定の範囲のサイズと不透明度が異なる単一のレイアウトでテキストを描画することです。方法は一ID2D1RenderTarget::DrawTextLayout通りあるようです。

defaultForegroundBrushパラメータのドキュメント:

描画効果 ( IDWriteTextLayout::SetDrawingEffectメソッドで指定) としてブラシが関連付けられていない textLayout 内のテキストを描画するために使用されるブラシ 。

IDWriteTextLayout::SetDrawingEffectメソッドの備考欄によると、

ID2D1RenderTarget::DrawTextLayout を使用してテキストを描画し、そのブラシを使用して指定した範囲のテキストを描画する場合、色ブラシやグラデーション ブラシなどのID2D1Brushを描画効果として設定できます。

この描画効果は指定された範囲に関連付けられており、描画時に範囲が描画されるときにコールバックを介してアプリケーションに戻されます。

ID2D1RenderTarget::DrawTextLayoutで設定されたブラシを確実に使用するようIDWriteTextLayout::SetDrawingEffectです。この管理されていない C++ の回答は、この考えを裏付けているようです。

ただし、実際には、を使用して設定したDrawTextLayoutものは無視されます。適切な範囲のスタイルとサイズを取得しますが、すべてが既定のブラシを使用してペイントされます。SolidColorBrushSetDrawingEffect

これを回避するには、カスタム テキスト レンダラー ( gist ) を実装しましたID2D1RenderTarget::DrawTextLayout。私は満足していたでしょうが、TextRendererBaseとのパフォーマンスDrawGlyphRunは よりも 25% 以上遅くなりID2D1RenderTarget::DrawTextLayoutます。

この問題の原因は何ですか? ドキュメントが示唆するように色を使用し、引き続き使用できID2D1RenderTarget::DrawTextLayoutますか?

4

1 に答える 1