1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| //---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
FDevice = NULL;
FD3D = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormDestroy(TObject *Sender)
{
Cleanup();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
if( !SUCCEEDED( InitD3D( Handle )))
Close();
}
//-----------------------------------------------------------------------------
HRESULT __fastcall TMainForm::InitD3D( HWND hWnd )
{
// Create the D3D object, which is needed to create the D3DDevice.
if( NULL == ( FD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
// Remplissage des valeurs de la structure
D3DPRESENT_PARAMETERS params;
// Mise à zéro de toutes les valeurs de la structure }
ZeroMemory( ¶ms, sizeof( params ) );
params.Windowed = TRUE;
params.SwapEffect = D3DSWAPEFFECT_DISCARD;
params.BackBufferFormat = D3DFMT_UNKNOWN;
// Création du dispositif
if( FAILED( FD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
¶ms, &FDevice ) ) )
return E_FAIL;
// Création de la texture du sprite
if (D3D_OK != D3DXCreateTextureFromFile(FDevice, "Ball.png", &FSpriteTexture))
return E_FAIL;
// Création du sprite
if( FAILED( D3DXCreateSprite(FDevice, &FSprite)))
return E_FAIL;
/* Nous branchons un gestionnaire d'évènement sur l'évènement OnIdle de
l'application */
Application->OnIdle = Render;
return S_OK;
}
//---------------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects
//-----------------------------------------------------------------------------
void __fastcall TMainForm::Cleanup()
{
if( FDevice != NULL )
FDevice->Release();
if( FD3D != NULL )
FD3D->Release();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Render(TObject *Sender, bool &Done)
{
// Tracé du fond
Cardinal dxColor;
dxColor = D3DCOLOR_XRGB(0, 0, 255); // bleu pour le fond
FDevice->Clear(0, NULL, D3DCLEAR_TARGET, dxColor, 1, 0);
// Le tracé du sprite nécessite un vecteur de points réels
D3DXVECTOR3 dxVector;
dxVector.x=10.0f;
dxVector.y=20.0f;
dxVector.z=0.0f;
// Begin the scene
if( SUCCEEDED( FDevice->BeginScene() ) )
{
FSprite->Begin(D3DXSPRITE_ALPHABLEND);
FSprite->Draw(FSpriteTexture, NULL, NULL, &dxVector, 0xFFFFFFFF);
FSprite->End();
FDevice->EndScene();
}
// DirectX doit maintenant transférer le contenu du buffer vers l'affichage
FDevice->Present(NULL, NULL, NULL, NULL);
/* Ne pas oublier de mettre Done à false pour que la méthode soit
appelée à nouveau */
Done = false;
}
//--------------------------------------------------------------------------- |
Partager