#include #include #include #include #include Direct3D::Direct3D(void) { } Direct3D::Direct3D(const Direct3D &someDirect3D) { // private implementation *this=someDirect3D; } Direct3D::~Direct3D() { destroy(); } Direct3D &Direct3D::operator=(const Direct3D &/*someDirect3D*/) { // private implementation return *this; } void Direct3D::destroy(void) { if(!isOkay())return; operator->()->Release(); SmartPointer::destroy(); } BOOL Direct3D::enumerateDevice(DeviceEnumerator &deviceEnumerator) { if(!isOkay())return FALSE; deviceEnumerator.enumeratedDevices().remove(); operator->()->EnumDevices(DeviceEnumerator::enumDeviceCallback,&deviceEnumerator); return TRUE; } DirectDrawError Direct3D::createDevice(const DeviceDescription &deviceDescription,Surface &surface,DirectDevice3D &device3D) { LPDIRECT3DDEVICE3 lpDirect3DDevice3; DirectDrawError status; // device3D.destroy(); if(!isOkay())return DirectDrawError::GenericFailure; status=DirectDrawError::DirectDrawResult(operator->()->CreateDevice(deviceDescription.guid(),(IDirectDrawSurface4*)((SmartPointer&)surface),&lpDirect3DDevice3,0)); if(!status.okResult())return status; device3D=lpDirect3DDevice3; return status; // (SmartPointer&)device3D=lpDirect3DDevice3; }