#include #include #include using namespace std; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) struct D3DVERTEX { float fX, fY, fZ; DWORD dwColor; }; int main(void) { ALLEGRO_DISPLAY *display; ALLEGRO_BITMAP *bitmap; ALLEGRO_COLOR colBlack; al_init(); al_install_keyboard(); al_set_new_display_flags(ALLEGRO_FULLSCREEN | ALLEGRO_DIRECT3D); display = al_create_display(640, 480); ALLEGRO_KBDSTATE state; al_map_rgba( &colBlack, 0, 0, 0, 0 ); IDirect3DDevice9 *D3D = al_d3d_get_device(); D3D->SetRenderState(D3DRS_AMBIENT, 0x11111111 ); D3D->SetRenderState(D3DRS_LIGHTING,false); D3D->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); D3D->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE); D3D->SetFVF(D3DFVF_CUSTOMVERTEX); LPDIRECT3DVERTEXBUFFER9 pTriangleVB = NULL; VOID* pData; D3DVERTEX aTriangle[ ] = { {320.0f, 1.0f,1.0f,0xffff0000}, {0.0f,480.0f,1.0f,0xff00ff00}, {640.0f,480.0f,1.0f,0xff0000ff} }; D3D->CreateVertexBuffer( sizeof(aTriangle), D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &pTriangleVB, NULL); pTriangleVB->Lock(0,sizeof(pData),(void**)&pData,0); memcpy(pData,aTriangle,sizeof(aTriangle)); pTriangleVB->Unlock(); do { D3D->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0); D3D->BeginScene(); D3D->SetStreamSource(0,pTriangleVB,0,sizeof(D3DVERTEX)); D3D->DrawPrimitive(D3DPT_TRIANGLELIST,0,1); D3D->EndScene(); D3D->Present(NULL,NULL,NULL,NULL); al_get_keyboard_state( &state ); } while( !al_key_down( &state, KEY_ESC ) ); return 0; } END_OF_MAIN()