こんばんは、Aquidです。
Zバッファを使っていて、環境によって得られる結果が大きく異なってしまったことを報告いたします。
本来なら以下のコードを実行することで赤と青の要素のみが画面に描画されるはずなのですが、実行環境によって結果が異なる状況に陥りました。
使用しているDXライブラリのバージョンは3.00です。
・WindowsXP + GeForce 8400GS
・WindowsVista + GeForce Go 7400
・Windows7 + Intel GMA4500
赤と青の要素のみで描画される。
・WindowsVista + Intel GMA 950
左半分が水色の要素が描画されてしまう。
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ){
MessageBox(NULL,"DirectXの初期化に失敗。\n","Error",MB_OK);
return -1 ; // エラーが起きたら直ちに終了
}
//メインループ
while(ProcessMessage() == 0){
SetDrawScreen(DX_SCREEN_BACK);
ClearDrawScreen();
//目安の円を先に描画
DrawCircle(320,240,240,GetColor(0,255,255),TRUE);
DrawCircle(320,240,120,GetColor(0,0,255),TRUE);
// Zバッファを有効にする
SetUseZBufferFlag(TRUE);
//画面左半分をマスクで覆う
DrawBoxToZBuffer(0,0,320,480,TRUE,DX_ZWRITE_MASK);
//中央を円でくりぬく
DrawCircleToZBuffer(320,240,240,TRUE,DX_ZWRITE_CLEAR);
//再度上より小さい円で埋める
DrawCircleToZBuffer(320,240,120,TRUE,DX_ZWRITE_MASK);
//画面を赤く描画
DrawBox(0,0,640,480,GetColor(255,0,0),TRUE);
ScreenFlip();
clsDx();
};
//DxLibを破棄
DxLib_End();
return 0 ;
}
なお、ログの出力を一部抜粋したものは以下のとおりです。
・WindowsVista + Intel GMA 950
524:IDirect3D9 オブジェクトを取得します.... 成功
525:IDirect3DDevice9 オブジェクトを取得します.... ソフトウエア頂点演算を使用します
572:成功
572:画面のフォーマットは D3DFMT_X8R8G8B8 です
572:Zバッファのフォーマットは D3DFMT_D16 です
573:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
573:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
573:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
574:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
574:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
574:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
574:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
575:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
575:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
575:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
575:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
575:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
576:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
576:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
576:Zバッファを作成します.... 成功
577:プログラマブルシェーダーを使用しません
・WindowsVista + GeForce Go 7400
520:IDirect3D9 オブジェクトを取得します.... 成功
522:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します
612:成功
612:画面のフォーマットは D3DFMT_X8R8G8B8 です
612:Zバッファのフォーマットは D3DFMT_D16 です
612:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
612:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
613:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
613:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
613:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
613:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
613:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
613:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
614:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
614:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
614:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
614:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です
614:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
614:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
615:Zバッファを作成します.... 成功
653:プログラマブルシェーダーを使用します
・WindowsXP + GeForce 8400GS
468:IDirect3D9 オブジェクトを取得します.... 成功
473:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します
574:成功
574:画面のフォーマットは D3DFMT_X8R8G8B8 です
574:Zバッファのフォーマットは D3DFMT_D16 です
574:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
574:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
575:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
575:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
575:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
575:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
575:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
575:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
575:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
576:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
576:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
576:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です
576:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
576:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
576:Zバッファを作成します.... 成功
578:プログラマブルシェーダーを使用します