void d3d_vis::draw_graph( vb_id verts, size_t n_verts, ib_id inds, size_t n_inds ) { in_world(); pdevice_->SetStreamSource(0, vbs_[verts], 0, sizeof (b_vertex)); pdevice_->SetIndices(ibs_[inds]); pdevice_->DrawIndexedPrimitive(D3DPT_LINELIST, 0, 0, n_verts, 0, n_inds); in_screen(); }
static inline int move_point (Point *p, int x, int y) { if ( in_screen( p->x + x, p->y + y ) ) { p->x += x; p->y += y; return 1; } else { return 0; } }
d3d_vis::d3d_vis(HWND hwnd, LPDIRECT3DDEVICE9 pdevice) : hwnd_ (hwnd), pdevice_ (pdevice), color_ (D3DCOLOR_XRGB(255,255,0)), ofs_ (0.0f, 0.0f), scale_ (1.0f) { RECT myrect; GetClientRect (hwnd_, &myrect); HRESULT hr = D3DXCreateFont( pdevice_, 16, 0, FW_NORMAL, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pfont_ ); assert (SUCCEEDED(hr)); D3DXMATRIX proj; D3DXMatrixOrthoOffCenterRH (&proj, 0, (float)myrect.right, (float)myrect.bottom, 0, -1.0f, 1.0f); pdevice_->SetTransform (D3DTS_PROJECTION, &proj); D3DVERTEXELEMENT9 dwDeclSingle[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {1, 0, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0} , D3DDECL_END() }; D3DVERTEXELEMENT9 dwDeclMulti[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0} , D3DDECL_END() }; pdevice_->CreateVertexDeclaration(dwDeclSingle, &pvdeclsingle_); pdevice_->CreateVertexDeclaration(dwDeclMulti, &pvdeclmulti_); pdevice_->CreateVertexBuffer(sizeof (DWORD), 0, 0, D3DPOOL_MANAGED, &psinglecolor_, NULL); pdevice_->CreateVertexBuffer(sizeof (b_vertex) * 5, 0, 0, D3DPOOL_MANAGED, &prect_, NULL); pdevice_->SetStreamSource(1, psinglecolor_, 0, 0); set_color (0xFFFFFFFF); in_screen(); }