トップページ > 記事閲覧
DrawFormatStringToHandleが重い
名前:にこよう 日時: 2019/11/13 18:17

こんばんは DrawFormatStringToHandleを実行した際の実行時間は基本的に1ms以下なのですが、(初めて文字を渡した際のみ10ms程度) ある特定の条件下でのみ常に7ms程度の処理時間がかかっているようです 以下の様な計測方法なのですが、DrawString関数に同じ引き数で渡した場合は常に0ms以下で実行されます std::vector<int> co_; int b = GetNowCount(); DrawFormatStringToHandle(select_box_->draw_size_left_x + 3, dy + 5, col.black, font_h, config_data.text.c_str()); // 設定されているテキストを描画する //DrawString(select_box_->draw_size_left_x + 3, dy + 5, config_data.text.c_str(), col.black); co_.emplace_back(GetNowCount() - b); ただ、重くなる条件が分かりませんでした vectorのstringにあらかじめ文字を詰め込んで置き、ループしてこれを描画しているのですが、 遅くなる条件が分からないので、遅くなった時の中身を以下に書いておきます ( 不要だったため、スレッドを見やすくするために削除しました ) "[GamePad Config] ゲームオーバー時のコンティニュー(R)"がトリガー?のようでこれを空白にするか描画するかで 全て遅くなる/全て1ms以下が切り替わります ただ、この文字列を描画したからと言って重くなるわけではなく、別のゲーム上のシーンの上に描画しても処理速度に問題はありませんでした なので再現できる方法はわからないです、、、 どうしても文字を描画するだけで重くなるとは考えられず、色々試してみたのですが、結局このような結論になりました Dxライブラリが関係なかったらすみませんm(__)m
メンテ

Page: 1 |

Re: DrawFormatStringToHandleが重い ( No.1 )
名前:紺帽子 日時:2019/11/13 06:37

フォントキャッシュ関係なのかなと思うので フォントハンドルについて ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3949 テキスト描画時の処理落ち ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3307 このあたりの過去ログを読んでさらに原因を絞ってみてください
メンテ
Re: DrawFormatStringToHandleが重い ( No.2 )
名前:にこよう 日時:2019/11/13 18:20

御返信ありがとうございます 結論から言うと重くなる問題は解決しました このような関数、及びキャッシュのことは知りませんでした ゲーム内のシーンが重くなっていたシーンに移り変わる際のコンストラクタで SetFontCacheCharNum(400); を呼び出し、デトラクタでSetFontCacheCharNum(0);を呼び出すようにすることで問題なく動作するようになりました 文字数が原因であることは考えてはいたのですが、 aaaaaaa...と沢山の文字を描画しても重くならなかったため考えから外していました 1文字ずつキャッシュしていたということで理解しました 管理人様のご返信のうちに以下の文章がありますが、これはどのようにすれば取得できるのでしょうか? ヘッダの周囲を探してみたのですが、取得できそうな関数は見つけられませんでした キャッシュの数を設定するうえで参考にしたいので、教えていただければ嬉しいですm(__)m >サンプルプログラムを実行させて頂いたところ、キャッシュできる文字数は >81文字でした( フォントのサイズによって変化します ) スレッドが見づらくなるので一番上の無駄なサンプルコードは削除しておきます
メンテ
Re: DrawFormatStringToHandleが重い ( No.3 )
名前:管理人 日時:2019/11/14 01:07

> 管理人様のご返信のうちに以下の文章がありますが、これはどのようにすれば取得できるのでしょうか? > ヘッダの周囲を探してみたのですが、取得できそうな関数は見つけられませんでした > キャッシュの数を設定するうえで参考にしたいので、教えていただければ嬉しいですm(__)m キャッシュできる文字数を取得するための関数は無かったので追加しました、よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // デフォルトフォントハンドルのキャッシュできる文字の数を取得する int GetFontMaxCacheCharNum( void ) ; // フォントハンドルのキャッシュできる文字の数を取得する int GetFontMaxCacheCharNumToHandle( int FontHandle ) ; よろしければお試しください m(_ _)m
メンテ
Re: DrawFormatStringToHandleが重い ( No.4 )
名前:にこよう (解決) 日時:2019/11/14 19:36

ありがとうございますm(__)m 処理落ちしていたフォントのキャッシュできる文字数は171でした
メンテ

Page: 1 |

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

   クッキー保存