トップページ > 記事閲覧
SetDrawBlendModeの引数について
名前:PATOLE 日時: 2013/11/14 23:33

お世話になっております。 DXライブラリを使用させていただいております、PATOLEと申します。 SetDrawBlendModeの仕様についてお伺いいたく、投稿させていただきました。 SetDrawBlendModeの第2引数についてですが 通常は、0〜255までの値を入れるかと思うのですが それ以外の値を入れた場合はどのような挙動を起こすのでしょうか。 -1以下や256以上を入れると、フリーズすることがまれにあります。 (メモリのアクセス違反の警告がでることもあります) また、32bitのPCで頻繁に発生するようです 64bitのPCでは今のところ確認できておりません。 もしかして、例外処理が無いのではないかと思いましたので、質問させていただきました。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: SetDrawBlendModeの引数について ( No.1 )
名前:レンタッカ 日時:2013/11/15 07:21

オブジェクト指向から言ったら、Byte型クラスを使ったら、0〜255の範囲で丸く収まるだろうけど。byteに置き換わったら便利だけど、SetDrawBlendModeを直にたくさん呼んでるゲームとかだと、膨大なエラー処理になるだろうし。ラッパ作ってたら、無問題だろうけど、みんながみんなラッパ作るわけじゃないし。リファクタすれば済む話なんだけど、リファクタできないVSもあるわけで(ry どうなんでしょうね。わたしも推測でしかわからないので。もしかしたらもしかして、管理者さんのコメントとかの自動変換ソフトの仕様上しかたなかったり、クロスプラットフォーム志向でいこうぜっとか。なんかあったりするのかもしれないですね。
メンテ
Re: SetDrawBlendModeの引数について ( No.2 )
名前:レンタッカ 日時:2013/11/15 07:25

あ、改行しようと思ったら、パスワードわからなくなった(汗
メンテ
Re: SetDrawBlendModeの引数について ( No.3 )
名前:管理人 日時:2013/11/17 19:44

SetDrawBlendMode の中で第二引数については if( BlendParam > 255 ) BlendParam = 255 ; if( BlendParam < 0 ) BlendParam = 0 ; と、値が 0〜255 の間に収まるようにしてありますので、 それ以外の値を渡すとフリーズするという現象は考え難いです なので SetBlendMode に 0〜255 の範囲から外れる値を渡して 呼び出しているときに行っている他の処理が原因でフリーズが 発生してる可能性が高いと思います
メンテ
Re: SetDrawBlendModeの引数について ( No.4 )
名前:PATOLE(解決) 日時:2013/11/29 21:34

ご返答ありがとうございます。 やはり、SetDrawBlendModeの第二引数の値を 0〜255以内に収めるようにするとフリーズする現象が発生しなくなりました。 また、ADDブレンドの際に、0未満、また256以上の値を入れると 異常なブレンド処理が発生してしまうようです。 (正常に加算されず、変な画像表示となる) もしかしたら、SetDrawBlendModeには問題が無いのかもしれませんが その後に描画される、DrawGraph系等に問題があるのかもしれません……。 とはいえ、0〜255以外の数値を入れなければフリーズすることは無いので、この件につきましては解決とさせていただきます。 確かに、私の処理のほうに問題があったのかもしれません。 レンタッカさんがおっしゃっているような処理をしていなかったのも原因であるかと存じます。 この度は回答ありがとうございました。
メンテ
Re: SetDrawBlendModeの引数について ( No.5 )
名前:管理人 日時:2013/12/01 01:53

こちらが SetDrawBlendMode の中身となります // 描画ブレンドモードをセットする extern int SetDrawBlendMode( int BlendMode, int BlendParam ) { if( GBASE.NotDrawFlag || ( GBASE.BlendMode == BlendMode && GBASE.BlendParam == BlendParam ) ) return 0 ; // ソフトが非アクティブの場合はアクティブになるまで待つ CheckActiveState() ; // ブレンドモードの保存 if( GBASE.BlendMode != BlendMode ) { GBASE.BlendMode = BlendMode ; GRH.DrawPrepAlwaysFlag = TRUE ; } if( BlendParam > 255 ) BlendParam = 255 ; if( BlendParam < 0 ) BlendParam = 0 ; GBASE.BlendParam = BlendParam ; SetMemImgDrawBlendMode( GBASE.BlendMode, GBASE.BlendParam ) ; // Direct3D の設定に反映 if( GRA2.ValidHardWare ) { // ディフーズカラーの更新 GRH.DiffuseColor = GetDiffuseColor() ; } // 終了 return 0 ; } 第二引数 BlendParam の値を実際に使用する箇所 GBASE.BlendParam = BlendParam ; SetMemImgDrawBlendMode( GBASE.BlendMode, GBASE.BlendParam ) ; を実行する前に BlendParam の値を 0 〜 255 に収める処理 if( BlendParam > 255 ) BlendParam = 255 ; if( BlendParam < 0 ) BlendParam = 0 ; が行われているので、0 〜 255 の範囲から外れる値による異常が発生する余地がありません SetDrawBlendMode の第二引数に渡している値を、SetDrawBlendMode 以外で使用している 箇所はありませんでしょうか?
メンテ

Page: 1 |

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

   クッキー保存