SetDrawBlendModeがうまく機能しない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mochiduki

SetDrawBlendModeがうまく機能しない

#1

投稿記事 by mochiduki » 12年前

こんにちは。
現在新・ゲームプログラミングの館(http://dixq.net/g/index.html)でDXライブラリについて学習しているのですが、2.3章、2.4章にて登場するSetDrawBlendMode関数がうまく機能しなくて困っています。

具体的にいえば2.4章のサンプルプログラム

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

        int Handle;     // 画像格納用ハンドル
        Handle = LoadGraph( "画像/弾00.png" ); // 画像のロード

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

                SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128 );   //ブレンドモードをα(128/255)に設定
                DrawGraph( 100, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 120, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 140, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 160, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 180, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 200, 200, Handle, TRUE ); //画像の描画
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND,  0 );           //ブレンドモードをオフ

                SetDrawBlendMode( DX_BLENDMODE_ADD,  255 );             //ブレンドモードを加算(255/255)に設定
                DrawGraph( 300, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 320, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 340, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 360, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 380, 200, Handle, TRUE ); //画像の描画
                DrawGraph( 400, 200, Handle, TRUE ); //画像の描画
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND,  0 );           //ブレンドモードをオフ

        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
} 
をMicrosoft Visual Studio 2012の”デバッグなしで開始”にて実行すると、真っ暗なウィンドウがでてくるだけで本来出てくるはずの画像がうつりません。

なお12行目の
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128 );
をコメントアウトし同様に実行すると13行目から18行目の6つの画像はうつりますが、もちろんブレンドはされないままです。
21行目の
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
についても全く同様です。

また、ビルドそのものは正常終了しています。

環境は
Windows8 pro (MAC OS X mountain lion+paralles8で仮想化して使っています)
Microsoft Visual Studio 2012
です。
また、C言語の経験は入門書をひと通り読み終わった程度です。プログラミングの経験そのものもC言語以外にはほとんどありません。

なんとか画像のブレンドを行いたいので、もしよろしければご助言お願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: SetDrawBlendModeがうまく機能しない

#2

投稿記事 by softya(ソフト屋) » 12年前

DXライブラが正常に動いていないかもしれません。
Log.txtを確認してみてください。
BootCampで動かしたほうが確実だとは思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#3

投稿記事 by mochiduki » 12年前

softya(ソフト屋)さん、ご回答ありがとうございます。
softya(ソフト屋) さんが書きました:DXライブラが正常に動いていないかもしれません。
Log.txtを確認してみてください。
Log.txtを開いてみました。

[hr]
0:システムの情報を出力します
0: DXライブラリ Ver3.05
0: 論理プロセッサの数 : 2
0: OS Windows ( Build 9200 )
115: CPU動作速度:大体2.27GHz
118: MMX命令を使用します
121: SSE命令が使用可能です
124: SSE2命令が使用可能です
126: CPUベンダ:GenuineIntel
139: CPU名: Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz
142:COMの初期化... 成功しました
150:メモリ総量:4095.55MB 空きメモリ領域:2512.07MB
153:タイマーの精度を検査します
155:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
158: パフォーマンスカウンターを使用します タイマー精度 : 2240.953000 KHz
163: ソフトの二重起動検査... 二重起動はされていませんでした
169:ウインドウクラスを登録します... 登録に成功しました
176:ウインドウモード起動用のウインドウを作成します
180:ウインドウの作成に成功しました
202:IMEを無効にしました
206:ウインドウスタイルをウインドウモード用に変更します... 完了
215:DirectInput関係初期化処理
218: DirectInput7 の取得中... 成功
233: 引き続き初期化処理... 初期化成功
240: ジョイパッドの初期化...
245: ジョイパッドの初期化は正常に終了しました
248: マウスデバイスの初期化... 初期化成功
254: キーボードデバイスの初期化... 初期化成功
261:DirectInput 関連の初期化は正常に終了しました
265:DirectSound の初期化を行います
268:DirectSound インターフェースの取得を行います.... 成功
276:引き続きインターフェースの初期化処理... 成功
356: DirectSound デバイスを列挙します
360: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
364: モジュール名:{0.0.0.00000000}.{469ff7c8-2389-4f76-a1c0-36e0a122d67f} ドライバ記述:スピーカー (Parallels Audio Controller)
367: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
371: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

374: 利用可能サンプリング精度
377: プライマリ 16bit = OK 8bit = OK
379: セカンダリ 16bit = OK 8bit = OK

383: 利用可能チャンネル
387: プライマリ MONO = OK STEREO = OK
390: セカンダリ MONO = OK STEREO = OK

393:DirectSound の初期化は正常に終了しました
398:DirectDraw オブジェクトの取得を行います.... 成功
409:引き続き初期化処理... 初期化に成功しました
424:IDirect3D9Ex オブジェクトを取得します.... 成功
431:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
727:成功
731:Driver:prl_umdd.dll Description:Parallels Display Adapter (WDDM)
735:画面のフォーマットは D3DFMT_X8R8G8B8 です
737:Zバッファのフォーマットは D3DFMT_D16 です
741:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
744:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
747:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
751:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
754:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
758:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
761:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
763:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
765:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
770:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
774:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
777:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
781:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
784:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
788:最大テクスチャサイズ 幅:8192 高さ:8192
791:テクスチャステージテンポラリレジスタ:使用可
794:減算合成のハードウェア対応:ネイティブ
797:頂点シェーダーバージョンコード:300
800:ピクセルシェーダーバージョンコード:300
822:バックバッファロック転送の時間:1202nsec 一時的な描画可能バッファを使用した転送の時間:3265nsec
826:バックバッファロックを使用します
828:Zバッファを作成します.... 成功
847:プログラマブルシェーダーを使用します

970:フォントの初期化を行います
974:フォントの初期化は正常に終了しました
978:文字コードバッファの初期化を行います... 完了しました
2615:ウインドウを閉じようとしています
2637:ウインドウが破棄されようとしています
2641:ソフトを終了する準備が整いました
2678:フォントの初期化を行います
2682:フォントの初期化は正常に終了しました
2687:Direct3DDevice9 の解放 3
2733:Direct3D9 DLL の解放 4
2737:DirectInput 関連の終了処理... 完了
3295:DirectSound の終了処理は正常に終了しました
3298:
3302:Alloc memory dump
3306: Total size:0(0.000kb) Alloc num:0
3309:
[hr]

特に不審な点は無いように思えますが、どうなのでしょうか。

異常が無いのならば、やはりsoftya(ソフト屋) さんのおっしゃるようにBootCampなどで動かすしか無いでしょうか。

ru-pu

Re: SetDrawBlendModeがうまく機能しない

#4

投稿記事 by ru-pu » 12年前

>0: DXライブラリ Ver3.05
Ver3.05は公開日が2011年4月2日の古いバージョンのようです。
新しいバージョンを試されてみては?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: SetDrawBlendModeがうまく機能しない

#5

投稿記事 by softya(ソフト屋) » 12年前

たしかに不審は点はなさそうです。
こちらで実行すると問題無いので、バージョンを変えてみるのと、ゲームプログラミングの館で配布している画像に変えて試してみください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#6

投稿記事 by mochiduki » 12年前

ru-puさん、softya(ソフト屋) さん、ご回答してくださったのにもかかわらず、返信がおくれてしまいすみません。

実は今、WindowsをインストールしてあるMACを操作することができない状況にあり、お二方のアドバイスを未だ実行できずにいます。少なくともあと2日後ぐらいには操作できると思いますが、それまではこちらの状況を報告できないかと思われます。

アドバイスを実行できしだい再び書き込みをするつもりではありますが、結果の報告が遅れますこと重ね重ね本当に申し訳ありません。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#7

投稿記事 by mochiduki » 12年前

ru-puさん、softya(ソフト屋) さん、お二方のアドバイス通りにバージョンの新しいDXライブラリをためしてみました。
(新しいバージョンのDXライブラリを使う際の設定についてはhttp://homepage2.nifty.com/natupaji/DxL ... c2012.htmlを参考にしました。)

結果から言ってしまえばまたもやダメでして、その上画像のブレンドどころか画像の表示すらされませんでした。

新しいDXライブラリのもとで新・ゲームプログラミングの館(http://dixq.net/g/index.html)の1.4章のサンプルプログラム

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode( TRUE ); // ウィンドウモードに設定
        DxLib_Init();   // DXライブラリ初期化処理

        int Handle;     // データハンドル格納用変数
        Handle = LoadGraph( "画像/キャラクタ00.png" ); // 画像をロード
        DrawGraph( 50, 100, Handle, TRUE ); // データハンドルを使って画像を描画

        WaitKey();     // キー入力があるまで待機
        DxLib_End();   // DXライブラリ終了処理
        return 0;
} 
を実行したところ、真っ黒なウインドウが出るだけでした。ビルドは正常終了しています。また、キャラクタ00.pngの入っているフォルダ"画像"もこのプログラムソースが入っているのと同じフォルダに入れてあるのでパスも問題ないと思います。以下Log.txtです。

[hr]
0:システムの情報を出力します
0: DXライブラリ Ver3.10e
0: 論理プロセッサの数 : 2
0: OS Windows8 ( Build 9200 )
115: CPU動作速度:大体2.19GHz
117: MMX命令を使用します
119: SSE命令が使用可能です
121: SSE2命令が使用可能です
123: CPUベンダ:GenuineIntel
131: CPU名: Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz
133:COMの初期化... 成功しました
140:メモリ総量:4095.55MB 空きメモリ領域:2655.66MB
142:タイマーの精度を検査します
144:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
146: パフォーマンスカウンターを使用します タイマー精度 : 2240.962000 KHz
150: ソフトの二重起動検査... 二重起動はされていませんでした
156:ウインドウクラスを登録します... 登録に成功しました
161:ウインドウモード起動用のウインドウを作成します
164:ウインドウの作成に成功しました
166:ウインドウを表示します
179:IMEを無効にしました
182:ウインドウスタイルをウインドウモード用に変更します... 完了
208:DirectInput関係初期化処理
210: XInput DLL の読み込み中... 成功
218: DirectInput7 の取得中... 成功
237: 引き続き初期化処理... 初期化成功
244: ジョイパッドの初期化...
249: ジョイパッドの初期化は正常に終了しました
252: マウスデバイスの初期化... 初期化成功
258: キーボードデバイスの初期化... 初期化成功
266:DirectInput 関連の初期化は正常に終了しました
271:XAudio2 の初期化を行います
275: XAudio2_8.dll を使用します
278: XAudio2 インターフェースの取得と初期化を行います.... 成功 Ver2.8
313:XAudio2 の初期化は正常に終了しました
319:DirectDraw オブジェクトの取得を行います.... 成功
329:引き続き初期化処理... 初期化に成功しました
368:IDirect3D9Ex オブジェクトを取得します.... 成功
387:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
802:成功
805:Driver:prl_umdd.dll Description:Parallels Display Adapter (WDDM)
840:画面のフォーマットは D3DFMT_X8R8G8B8 です
843:Zバッファのフォーマットは D3DFMT_D16 です
846:16bit カラーフォーマットは D3DFMT_R5G6B5 です
848:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
850:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です
853:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
868:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です
870:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
872:DXT1テクスチャフォーマットはD3DFMT_DXT1 です
874:DXT2テクスチャフォーマットはD3DFMT_DXT2 です
877:DXT3テクスチャフォーマットはD3DFMT_DXT3 です
880:DXT4テクスチャフォーマットはD3DFMT_DXT4 です
882:DXT5テクスチャフォーマットはD3DFMT_DXT5 です
884:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です
887:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
889:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
891:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です
894:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です
897:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です
899:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です
903:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
906:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です
908:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です
912:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です
915:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
917:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です
920:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です
923:一度に描画できるプリミティブの最大数:1048576
926:対応している最大頂点インデックス:16777216
929:同時にレンダリングできるバッファの数:4
932:最大テクスチャサイズ 幅:8192 高さ:8192
935:テクスチャステージテンポラリレジスタ:使用可
937:減算合成のハードウェア対応:ネイティブ
940:ハードウェア頂点シェーダーバージョンコード:300
943:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し
946:ピクセルシェーダーバージョンコード:300
967:バックバッファロック転送の時間:1245nsec 一時的な描画可能バッファを使用した転送の時間:3247nsec
972:バックバッファロックを使用します
976:Zバッファを作成します.... 成功
1000:プログラマブルシェーダーを使用します

1096:フォントの初期化を行います
1100:フォントの初期化は正常に終了しました
1132:文字コードバッファの初期化を行います... 完了しました
3284:ウインドウを閉じようとしています
3294:ウインドウが破棄されようとしています
3297:ソフトを終了する準備が整いました
3305:フォントの初期化を行います
3317:フォントの初期化は正常に終了しました
3324:Direct3DDevice9 の解放 2
3391:Direct3D9 DLL の解放 1
3400:DirectInput 関連の終了処理... 完了
3523:
3526:Alloc memory dump
3529: Total size:0(0.000kb) Alloc num:0
3534:
[hr]

何が原因なのでしょうか。もし考えられるものがありましたら、お教えいただければと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: SetDrawBlendModeがうまく機能しない

#8

投稿記事 by softya(ソフト屋) » 12年前

DXライブラリから見るぶんには正常に動作している様に見えますが、たぶんparallesの問題でしょうね。
DXライブラリ使用のゲームやフリーソフトでDirectXのゲームなど動くものはあるか確認したほうが良いでしょう。
parallesに関しては利用したことがないので、よくわからないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#9

投稿記事 by mochiduki » 12年前

softya(ソフト屋) さん、ご回答ありがとうございます。

四聖龍神録PLUSをダウンロードして遊んでみたところこの作品は正常にプレイ出来ました。しかしながらhttp://dxlib.o.oo7.jp/cgi/patio/patio.cgiにあるソフトを5つほど選んでダウンロードし実行してみたところ、完全に正常にプレイできたのは1作品のみで、プレイはできるものの文字が欠損して表示されるものが2作品、残り2つは真っ黒なウインドウが生成されるだけでプレイは全く出来ませんでした。

以上をふまえるとやはり、softya(ソフト屋) のおっしゃるようにparallels側に問題がある可能性が大きいということになるのでしょうか。
ご意見いただければ幸いです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: SetDrawBlendModeがうまく機能しない

#10

投稿記事 by softya(ソフト屋) » 12年前

その状況だとparallels側との相性があると思います。
DXライブラリの開発者さんがparallelsを持っていれば解決してもらえるかも知れませんが、たぶん持ってなかったはずです。
それとBootCampの方が仕組み上は動く可能性が高いです。

「DXライブラリ置き場 HOME」 ご本家のサイト。
http://homepage2.nifty.com/natupaji/DxLib/
互換性などライブラリ問題は一番下の掲示板へ。質問時は、こちらと相互リンクでお願いします。
parallelsに関しては検索しましたが過去ログにはありませんでした。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#11

投稿記事 by mochiduki » 12年前

softya(ソフト屋) さん、ご回答ありがとうございます。同時に、レスNo: 9において敬称を付け忘れてしまった部分があり、大変失礼いたしました。有益な回答をしていただいているにもかかわらず申し訳ございません。

ご誘導していただいた掲示板に、スレッドを立ててまいりました。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3131
です。
また、過去ログ検索までしていただいて、ありがとうございました。

mochiduki

Re: SetDrawBlendModeがうまく機能しない

#12

投稿記事 by mochiduki » 12年前

マルチポスト先の掲示板
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3131
にて、動作は遅いものの、画像の表示と画像のブレンドを行うことができる処置をお教えいただきました。
[hr][処置]
DxLib_Init を呼ぶ前の部分に

SetUseDirectDrawFlag( FALSE );

を記述する。
[hr]
根本的な解決ではありませんが、一応の解決を得たということでトピックを閉めさせていただきます。
回答していただいた、softya(ソフト屋)さん、ru-puさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る