Files
Work/ddraw/DIRECT3D.CPP
2024-08-07 09:16:27 -04:00

54 lines
1.4 KiB
C++

#include <ddraw/direct3d.hpp>
#include <ddraw/devenum.hpp>
#include <ddraw/devdesc.hpp>
#include <ddraw/surface.hpp>
#include <ddraw/device3d.hpp>
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<IDirect3D3>::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<IDirectDrawSurface4>&)surface),&lpDirect3DDevice3,0));
if(!status.okResult())return status;
device3D=lpDirect3DDevice3;
return status;
// (SmartPointer<IDirect3DDevice3>&)device3D=lpDirect3DDevice3;
}