トップページ > 記事閲覧
キャッシュできない量のテキスト描画について
名前:32Ryo 日時: 2023/11/06 12:10

こんにちは。現在Dxlibで音ゲーなるものを作っています。 ゲーム制作中に一つ問題が生じ、自身の力では解決できそうないので質問させていただきます。 [経緯] 現在、音ゲーでよくある楽曲選択画面を制作中です。複数の曲名を描画しようとした所、テキスト描画のみ毎フレーム15〜20msぐらいかかってしまい、 どうにか処理を軽くできないかと考えました。(テキスト以外の描画処理は1msぐらいです。) 使用フォントのキャッシュ可能数をGetFontMaxCacheCharNumToHandleで調べたところ20〜30と少なく(描画したい文字数は40〜60)、 キャッシュしきれずにテキスト描画しているため処理に時間が掛かっていると判断しました。 描画する文字列を画像ハンドルとして保存できれば解決しそうですが、いい方法が思いつきませんでした。(←の関数があればいいなと思いましたが、そのような関数はないので別の方法を模索中です。) [質問] キャッシュできない量のテキスト描画処理を軽くできそうなアイデアがある方、教えていただきたいです。 [当方スペック] CPU: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz RAM: 16GB GPU: NVIDIA GeForce RTX 3050 Laptop
メンテ

Page: 1 |

Re: キャッシュできない量のテキスト描画について ( No.1 )
名前:名無三 日時:2023/11/06 13:05

横からですいません、それってDrawStringToHandleを60回呼ぶだけでそんなに時間を食ったという事でしょうか? 自環境では特にそのような事象が発生しなかったので気になりました… (キャッシュの数を増やすのはSetFontCacheCharNumがありそうです)
メンテ
Re: キャッシュできない量のテキスト描画について ( No.2 )
名前:Ketty 日時:2023/11/06 13:21

こんにちは(^^) 私も横からになりますがご参考までにお伝えします。 CreateFontToHandle でフォントハンドルを作成する前に、作成するフォントハンドルが 何文字までキャッシュできるようにするかを指定するための関数として、 SetFontCacheCharNumというのが用意されています。 使い方などは下記スレッドをご参考ください。 https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3949 あと、文字列を画像ハンドルにする方法は、下記ブログ様に紹介されています。 https://krustf.hateblo.jp/entry/20100808/1281213402
メンテ
Re: キャッシュできない量のテキスト描画について ( No.3 )
名前:32Ryo(解決) 日時:2023/11/06 17:09

名無三さん、Kettyさん、ご返信ありがとうございます。 > (キャッシュの数を増やすのはSetFontCacheCharNumがありそうです) > CreateFontToHandle でフォントハンドルを作成する前に、作成するフォントハンドルが何文字までキャッシュできるようにするかを指定するための関数として、  SetFontCacheCharNumというのが用意されています。 SetFontCacheCharNum関数は使用していましたが、どうやらフォントハンドル作成した"後"にSetFontCacheCharNum関数を呼び出していた点が原因のようです。 作成前に呼び出したところ、描画処理が1ms未満で完了するようになりました。 > あと、文字列を画像ハンドルにする方法は、下記ブログ様に紹介されています。 参考リンクありがとうございます。BltStringSoftImageToHandleという関数があるんですね… [Dxlib テキスト 画像化]のように検索しても、それっぽい関数が出てこなかったので勉強になりました。 お二方ともご協力ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存