トップページ > 記事閲覧
最新版の文字フォントについて
名前:Tir 日時: 2015/08/03 16:19

最新版にしたところCreateFontToHandle関数で MS GothicとDX_FONTTYPE_ANTIALIASING_EDGE_4X4を 指定したところエッジが表示されない状態になりました。 何故かMeiryoだとエッジが表示されます。 因みにUnicode版です
メンテ

Page: 1 |

Re: 最新版の文字フォントについて ( No.1 )
名前:管理人 日時:2015/08/03 22:45

ご報告ありがとうございます ただ、こちらで以下のようなテストプログラムを実行してみたのですが、エッジは問題なく表示されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle ; ChangeWindowMode( TRUE ) ; SetBackgroundColor( 128,128,128 ) ; if( DxLib_Init() < 0 ) { return -1 ; } ClearDrawScreen() ; FontHandle = CreateFontToHandle( L"MS Gothic", 32, 0, DX_FONTTYPE_ANTIALIASING_EDGE_4X4 ) ; DrawStringToHandle( 10, 10, L"あいうえお", GetColor( 255,255,255 ), FontHandle ) ; WaitKey() ; DxLib_End() ; return 0 ; } よろしければ Tirさんの環境でもエッジが表示されるか試してみていただけないでしょうか?
メンテ
Re: 最新版の文字フォントについて ( No.2 )
名前:Tir(解決) 日時:2015/08/04 00:56

上記のプログラムを試したところ正常に動作しました。 それでこちらでも色々試してみたのですが、こちらの認識に誤りがありました。 フォントの種類は関係なくフォントを読み込む際にSetUseASyncLoadFlag関数で非同期読み込みにした場合に発生するようです。 しかし、上記のプログラムを少し変更して非同期読み込みにしても正常に描画されたので詳しい原因が分かりませんが、 非同期読み込みから外すことで無事に解決しました
メンテ
Re: 最新版の文字フォントについて ( No.3 )
名前:管理人 日時:2015/08/06 00:58

ご情報ありがとうございます、手元でも SetUseASyncLoadFlag を使用して非同期読み込みにした状態で CreateFontToHandle でフォントハンドルを作成した場合、縁なしになってしまいました 非同期読み込みでも縁ありになるように修正したバージョンをアップしましたので、 もしご必要でしたらお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 最新版の文字フォントについて ( No.4 )
名前:Tir 日時:2015/08/07 01:36

対応有難うございました。 もう少し気になったのですが MakeScreen関係で何かしら変更がありましたでしょうか? MakeScreenとピクセルシェーダを使い疑似的にマスク処理のような事をやっているのですが、何故か解像度640×480の場合透ける部分が青になってしまいました。 解像度1280×960の場合は正常に描画されます また以前のバージョンに戻すと640×480も正常に描画されます。
メンテ
Re: 最新版の文字フォントについて ( No.5 )
名前:管理人 日時:2015/08/08 14:34

ここ数ヶ月は MakeScreen に限らず色々内部処理を変更しているので、それが影響しているかもしれません > 何故か解像度640×480の場合透ける部分が青になってしまいました。 本来透ける筈の箇所が透けずに青になってしまった、ということでしょうか? それとも透ける筈ではない青の箇所が透けてしまった、ということでしょうか? ともあれ現象を手元で現象を確認できれば原因がわかると思いますので、もしよろしければこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に現象の再現に必要なファイルを送っていただけないでしょうか?
メンテ
Re: 最新版の文字フォントについて ( No.6 )
名前:管理人 日時:2015/08/09 09:28

ファイルをお送りいただきありがとうございます 添付していただいたプログラムを実行してみましたが、私の環境では問題なく動作しました ( どのような不具合か私は理解できていないので厳密には「問題があるようには見えなかった」ですが・・・ ) 恐らくですが、送っていただいたプログラムのこちらの部分の SetDrawScreen(GameScreen); Vert[ 0 ].pos = VGet(0.0-0.5f, 0.0f-0.5f ,0.0f) ; Vert[ 1 ].pos = VGet(640.f*HDVer-0.5f,0.f-0.5f, 0.0f ) ; Vert[ 2 ].pos = VGet(0.f-0.5f,480.f*HDVer-0.5f, 0.0f ) ; Vert[ 3 ].pos = VGet(640.f*HDVer-0.5f,480.f*HDVer-0.5f, 0.0f ) ; SetDrawScreen(GameScreen); と Vert[ 0 ].pos = VGet(0.0-0.5f, 0.0f-0.5f ,0.0f) ; の間に 以下の記述を追加すると正常に動作すると思います int TexSizeX, TexSizeY; GetGraphTextureSize( MaskScreen, &TexSizeX, &TexSizeY ); Vert[ 3 ].u = Vert[ 1 ].u = 640.0f * HDVer / TexSizeX; Vert[ 3 ].v = Vert[ 2 ].v = 480.0f * HDVer / TexSizeY; 少し解説しますと「MakeScreen で指定したサイズとライブラリ内部で作成されるテクスチャのサイズが異なることがある」ので、 上記のような記述が必要になります MakeScreen( 640, 480 ) → 作成されるテクスチャサイズ 1024 x 512 MakeScreen( 1280, 960 ) → 作成されるテクスチャサイズ 2048 x 1024 少し前のグラフィックスデバイスでは「2のn乗サイズ( 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ... )の テクスチャしか作成できない」という制限があるので、その制限があるグラフィックスデバイスの場合は 2のn乗ではない画像が読み込まれた場合は一番近い2のn乗サイズのテクスチャを作成して使用するため、 テクスチャ中の画像のサイズ以上の余分な箇所は使用されない状態になります なので、テクスチャ中の使用している部分のみを描画処理に使用するために上記のような処理が必要になります ( 画像のサイズが2のn乗サイズの場合は必要ありませんが・・・ ) よろしければお試しください
メンテ
Re: 最新版の文字フォントについて ( No.7 )
名前:Tir 日時:2015/08/09 14:42

返答有難うございます。 試しましたが正常に動作はしませんでした…。 実際にどのように描画されるかはメールに画像を添付してお送り致します
メンテ
Re: 最新版の文字フォントについて ( No.8 )
名前:管理人 日時:2015/08/09 14:57

メールを拝見しました うーん何故でしょう・・・ 使用されているピクセルシェーダーの内容を拝見すれば原因が分かるかもしれませんので、 前回のメールではコンパイル後の pso ファイルのみが添付されていましたが、 よろしければこちらのコンパイル前のソースファイルを送っていただけないでしょうか?
メンテ
Re: 最新版の文字フォントについて ( No.9 )
名前:管理人 日時:2015/08/09 23:38

メールありがとうございますシェーダーのソースファイルを拝見しました 最初の行の float4 temp : register( c0 ); が不要という以外は特に気になる点もありませんでした 頂いた現象発生時のスクリーンショットを拝見して、どのようにすれば本件の現象が発生するかを 考えてみたのですが、とりあえず mask.png を青色で塗りつぶしてみたら私の環境でもスクリーンショットと 同様の見た目になりました よろしければ HDVer を 1 にして、mask.png だけを描画して画面に表示してみていただけないでしょうか? もし黒い四角ではなく青い四角になっていましたら、mask.png が正常に読み込めていないということになりそうです
メンテ
Re: 最新版の文字フォントについて(解決) ( No.10 )
名前:Tir 日時:2015/08/10 01:40

管理人さんのご指摘通りmask.pngを描画したところ青い四角に描画されましたので 画像の形式を通常のpngに戻したところ正常に描画されるようになりました。 お手数おかけして申し訳ありませんでした
メンテ
Re: 最新版の文字フォントについて ( No.11 )
名前:管理人 日時:2015/08/10 03:24

すみません、青く描画されてしまう mask.png はパレットカラー画像で、maskHD.png はフルカラー画像なので、 パレットカラー画像であることが関係していると思います ということで、もしや Release ビルドでは発生する現象なのか、などと調べてみたところ 32bit版でビルドした場合には私の手元の環境でも現象が発生しました ( 最近は 64bit版でビルドしていたので現象が発生しなかったという落ちでした ) 32bit版ではパレットカラーから32bitカラーに変換する際の処理にアセンブリで書かれたコードを 実行しているのですが、ここにバグがありました( 64bit版ではインラインアセンブラが使用できないので C++ のコードが実行されるのですが、こちらにはバグはありませんでした ) 修正版をアップしましたので、よろしければこちらをお試しください・・・と行きたかったのですが、 すみません、現在修正版のビルドの完了を待っているのですが未だ終わらず、そろそろ睡眠をとらないと 明日の仕事に支障を来たすので、申し訳ありませんが次の夜までお待ちください m(_ _;m
メンテ
Re: 最新版の文字フォントについて ( No.12 )
名前:管理人 日時:2015/08/11 00:18

すみません、お待たせしました、修正版をこちらにアップしましたので、 よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 最新版の文字フォントについて ( No.13 )
名前:Tir(解決) 日時:2015/08/11 01:51

無事問題が解決したことを確認しました。 毎回些細でニッチな事が多いですがしっかり対応して頂き本当にありがとうございます
メンテ

Page: 1 |

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

   クッキー保存