トップページ > 記事閲覧
文字列の描画がおかしい(DrawStringやDrawStringToHandleなど)
名前:barrier 日時: 2023/02/15 16:49

初めてこの掲示板を使わせていただく者です DrawStringやDrawStringToHandleなどで文字列を描画しようとすると文字列の一部の文字の座標や縁取りがおかしかったり、たまに紫色の半透明な四角が重なっていることがあります。 私ともう一人の環境で確認したバグなので多分私の環境依存ではなさそうです。 以下実行環境とその現象を確認できる画像です。 私 CPU:12th Gen Intel(R) Core(TM) i7-12700 2.10 GHz RAM:16.0 GB GPU:NVIDIA GeForce RTX 3080 もう一人 CPU:Intel(R) Core(TM) i3-4000M CPU @ 2.40GHz 2.40 GHz RAM:4.00 GB GPU:Intel(R) HD Graphics 4600 画像(遭遇率が低いので二枚しかないです) (https)://ux.getuploader.com/barrier_is_others/download/6 (https)://ux.getuploader.com/barrier_is_others/download/7 どうかお時間が空いているときに目を通していただけると幸いです。
メンテ

Page: 1 |

Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.1 )
名前:管理人 日時:2023/02/16 01:59

すみません、2つ目の画像は『d』の文字の座標が上に移動してしまっているということが分かるのですが 1つ目の画像はどの部分が不具合の箇所なのでしょうか?
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.2 )
名前:barrier 日時:2023/02/16 03:35

一つ目の画像は本来縁取りがあるはずのフォントを描画するはずだったのですが、なぜかフォントの縁取りが消えているんです、 二枚目の画像と同じように縁取りがあるはず...ですが他から見ただけではその証拠はどこにあるんだってなるのは仕方ないと思いました。 何回もソフトを起動したりしてこれはバグであろうと一目見てわかる画像を、 3枚持ってきましたのでお時間があるときに再度ご確認お願いします。 (https)://ux.getuploader.com/barrier_is_others/download/8 あとこちらの現象はすべて同一のソースコードでコンパイルして確認しております(言うのが遅い)。
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.3 )
名前:管理人 日時:2023/02/16 05:22

追加の画像とご解説ありがとうございます このような現象は今までご報告頂いたことが無いので、ちょっと原因が分かりません もしかしたらこちらの暫定最新版では直っているかもしれませんので、 よろしければお試しになってみてください 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/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.4 )
名前:barrier 日時:2023/02/16 20:50

暫定最新版ありがとうございます。 早速試してみましたが直ってはなかったです。 ただ、出現頻度みたいなのがあるらしくて(?) 紫色の半透明な四角...遭遇率は低いが結構確認する 文字列の一部がずれる...数十回起動して一回しか確認できず 文字の縁取りが消える...今のところ未確認 といった感じです。 バグの元を探すヒントになれば嬉しいです。
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.5 )
名前:管理人 日時:2023/02/17 08:34

お試しいただきありがとうございます 暫定最新版でもだめでしたか… 2つほどご質問させてください 1.諸々の表示は一度表示されると消えるまではずっとそのままなのでしょうか?   それとも一瞬だけ表示されるものなのでしょうか? 2.こちらの現象が発生しているプログラムではマルチスレッドは使用されていますでしょうか?
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.6 )
名前:barrier 日時:2023/02/18 00:26

>1.諸々の表示は一度表示されると消えるまではずっとそのままなのでしょうか? >  それとも一瞬だけ表示されるものなのでしょうか? 何回も呼び出しても現象を確認できれば文字列の内容を変えようがそのままです >2.こちらの現象が発生しているプログラムではマルチスレッドは使用されていますでしょうか? threadで描画と内部処理を分けてます 今音ゲーを作っているんですが音ゲーでは精度の高い入力を求められるのでマルチスレッドで作っています
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.7 )
名前:管理人 日時:2023/02/18 02:13

ご返答ありがとうございます 断定はできませんが、本件の不具合は恐らく thread でマルチスレッドで処理を行っていることが原因だと思います DXライブラリはスレッドセーフのライブラリではないので、複数のスレッドからDXライブラリの関数が呼ばれると 正常に動作することが保証できなくなります もし thread で複数のスレッドを使用される場合は 『DXライブラリの関数を呼ぶスレッドは、どれか特定の一つだけ』 にするようにしてください 恐らくそうすることで本件の現象も発生しなくなると思います m(_ _)m もしどうしても複数のスレッドからDXライブラリの関数を呼ぶ場合は 『画面表示に関わる関数は必ず DxLib_Init() を呼んだスレッドで呼ぶ』 『入力に関係する関数のみ別スレッドで呼ぶ』 など、スレッド毎に呼ぶ関数のジャンルを限定することで正常に動作する可能性を高くすることができます ( ただ、基本的には複数のスレッドからDXライブラリの関数を呼んだ場合の動作の保証はできませんのでご了承ください )
メンテ
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.8 )
名前:barrier(解決) 日時:2023/02/19 00:07

なるほど、複数のスレッドからDxLibの関数を使おうとすると正常な動作は期待できないんですね... すこしだけソースコード変えたのがよかったのかはわかりませんが本件の現象も今のところ確認できてないので これにて解決とさせていただきます
メンテ

Page: 1 |

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

   クッキー保存