トップページ > 記事閲覧
DX_NON_DXAの設定について
名前:drednote 日時: 2016/06/20 17:39

自前のグラフィックツールの描画エンジンとしてDirectXの採用を考えており、色々と物色しています。 とりあえずDXライブラリのソース一式(3.16d)を落とさせて頂きまして、不要な機能をDxCompileConfig.hの設定で切っていった所 DX_NON_DXAの取り扱いに一部問題があったようなので報告致します。 症状: DX_NON_DXAを有効にしてビルドするとBinToChar128Table、Char128ToBinTableの配列未定義エラーとなる 原因: この2配列はDX_NON_DXAの定義でビルドから外れるのですが、この配列を使っているBinToChar128、Char128ToBinがDX_NON_DXAの定義如何に関わらず 常にビルドされてしまう為。 対策: DXA_Encodeの上のendifをChar128ToBinの下に移動してやる。 以上ご確認願います。 よろしくお願いします。
メンテ

Page: 1 |

Re: DX_NON_DXAの設定について ( No.1 )
名前:管理人 日時:2016/06/22 02:05

すみません、DX_NON_DXA を有効にしてもビルドエラーが発生しないように 修正したバージョンをアップしましたので、よろしければお使いください 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)」をして下さい) ただ、DX_NON_DXA を有効にしますと、注釈にあります通り併せて DX_NON_NORMAL_DRAW_SHADER DX_NON_MODEL DX_NON_FILTER DX_NON_MOVIE も有効になりますのでご注意ください
メンテ
Re: DX_NON_DXAの設定について ( No.2 )
名前:drednote 日時:2016/06/22 14:05

DxLibMakeTest.exeをダウンロードして確認させて頂きました。 確かにこの方法でも問題は回避出来ると思います(不要なコードが多少混じる為、全て切った場合よりも容量が少し増えますが) ですのでこの問題はこれで解決と思うのですが、また以下の依存関係が未解決であることがわかりましたのでこの場で報告させて頂きます。 DX_NON_SAVEFUNCTIONを定義して保存機能を切ろうとするとDxGateway.cppのCreateFontDataFileでNS_CreateFontDataFileが未定義になる。 CreateFontDataFileも要らないのでDX_NON_FONTを定義してフォント関連を切ろうとするとFONTMANAGE型が未定義になる為、DxFontWin.cppで大量にエラーが出る。 DxFontWin.cppはFONTMANAGEを使う関数を切る手段が存在しない為、つまり DX_NON_SAVEFUNCTION、DX_NON_FONTを定義すると必ずビルドエラーになる という結果になります。 DxFontWin.cppのifndef処理が未定義なのが問題なので、ここで適切に処理してやればよさそうな気もしますが、 このファイルはそもそもDxCompileConfig.hをincludeしていない為機能を切る事が難しいという事情があります。 この辺りのファイルの依存関係は色々と根が深そうなので、結局DxCompileConfig.hのDX_NON_SAVEFUNCTION、DX_NON_FONT についてはコメントで、定義するとビルドエラーになる旨を書いておくのが一番良いように思います。 よろしくお願いします。
メンテ
Re: DX_NON_DXAの設定について ( No.3 )
名前:管理人 日時:2016/06/24 02:50

すみません、DX_NON_SAVEFUNCTION と DX_NON_FONT を使用した際の コンパイルエラーも修正しました 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)」をして下さい) > DxFontWin.cppのifndef処理が未定義なのが問題なので、ここで適切に処理してやればよさそうな気もしますが、 > このファイルはそもそもDxCompileConfig.hをincludeしていない為機能を切る事が難しいという事情があります。 DxFontWin.cpp と DxFontWin.h で DxCompileConfig.h を include していないのはバグなので、 この二つのファイルも DxCompileConfig.h を include するようにしました
メンテ
Re: DX_NON_DXAの設定について ( No.4 )
名前:drednote 日時:2016/06/27 23:03

期間が空いてしまい申し訳ありません、色々忙しくて・・・・・・ さて、修正して頂いたソースで色々とビルドオプションを試させて頂きましたところ、以下2点について問題があるのではないか、と思われます。 1.DX_NON_ASYNCLOADが定義されているとDxGateway.cppでビルドエラーが出る。 これについてですが、SetUseASyncLoadFlag関数が中でNS_SetUseASyncLoadFlagを呼んでいるのですが、この関数がDX_NON_ASYNCLOADの定義により 未定義になります。 これについてはSetUseASyncLoadFlag関数のすぐ下に #ifndef DX_NON_ASYNCLOAD がありますので、これをSetUseASyncLoadFlagにも適用してやるとビルドが通るようになります。 2.DX_NON_INPUTが定義されているとDxWindow.cppでビルドエラーが出る。 ウィンドウプロシジャ内WM_TOUCHの処理でAddTouchInputData関数を呼んでいるのですが、DX_NON_INPUTの定義によりこの関数が未定義になります。 DX_NON_INPUTが定義されているのだからWM_TOUCH自体要らない気もしますが、その辺りの処理についてはライブラリの方針によると思いますので適切に処理をお願いします。 当方に必要なのはグラフィックエンジンだけなので色々と切っていった結果なのですが、ライブラリの想定ユーザーと大分かけ離れた使い方を しているような気がするので、ちょっと自重しようかなと言う気分になってます。
メンテ
Re: DX_NON_DXAの設定について ( No.5 )
名前:管理人 日時:2016/06/29 01:13

何度も申し訳ありません、DX_THREAD_SAFE を有効にしつつ、それ以外の定義も有効にした 場合のチェックが甘かったです 再度修正したソースをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ちなみに DX_THREAD_SAFE を有効にすると実行速度がかなり低下しますので( 大雑把なスレッドセーフ対応なので CPU への負荷が高い状態となります )、もしスレッドセーフである必要がありませんでしたら DX_THREAD_SAFE は 無効の状態でビルドをしてください > 当方に必要なのはグラフィックエンジンだけなので色々と切っていった結果なのですが、ライブラリの想定ユーザーと大分かけ離れた使い方を > しているような気がするので、ちょっと自重しようかなと言う気分になってます。 確かにグラフィック機能だけ使用される方は少ないかもしれませんが、グラフィック機能とそれ以外の機能は ある程度綺麗に分かれているので、恐らく正常に動作すると思います (・・;; ( そのような使い方をしたことが無いので曖昧な表現で申し訳ありません… )
メンテ
Re: DX_NON_DXAの設定について ( No.6 )
名前:drednote(解決) 日時:2016/06/30 11:09

上げて頂いたソースでビルドし、正常にビルド出来る事を確認致しました。 ご対応有り難うございます。 スレッドセーフについてですが、物がエディタなので描画スレッドとUIスレッド、他にサムネイル生成スレッドなどが走っていたりするのですがその辺のスレッド全てから ライブラリが呼ばれる可能性がある為、必須に近いです。 勿論総合的な速度は落ちるのは間違いないですが、スレッド分離でUIスループットが向上しますのでUIスレッドと描画スレッドを分離するのはほぼ必須ですし、 結局スレッドセーフが必要となります。 ゲームの場合は歴史的にあまりマルチスレッドが使われていないようですが(UIと描画を同期させる為?)、今回違う物へ使う為に無理言って申し訳ありませんでした。 有り難うございました。
メンテ
Re: DX_NON_DXAの設定について ( No.7 )
名前:管理人(解決) 日時:2016/07/03 13:30

正常にビルドが完了した様で何よりです m(_ _;m > ゲームの場合は歴史的にあまりマルチスレッドが使われていないようですが(UIと描画を同期させる為?) あまり考えたことがありませんでしたが、ゲームでマルチスレッドがあまり使われないのは確かに 同期が関係していると思います 例えば毎フレーム   プレイヤーの入力や主人公キャラの移動処理   ↓   敵キャラの処理   ↓   主人公キャラと敵キャラの当たり判定の処理   ↓   主人公キャラや敵キャラの描画処理   ↓   描画結果を画面に表示する処理 の順番で処理が行われているソフトをマルチスレッド化してプレイヤーの入力処理や敵キャラの動きや描画処理を 非同期で行ってしまうと見た目の動きがぎこちなくなったり当たり判定が正しく行われなかったりするので、 マルチスレッド化するとしても短い単位で同期処理を行う必要があり、マルチスレッドにはあまり向いてない ジャンルだと思います ( それでも最近の、特に3Dのゲームでは扱うデータ量が膨大になったので同期処理による処理負荷増大より マルチスレッド化による処理負荷軽減効果の方が大きいので当たり前のようにマルチスレッドが使用されるように なりましたが… )
メンテ

Page: 1 |

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

   クッキー保存