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 以外で使用している
箇所はありませんでしょうか?
 |