mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-20 06:41:15 +00:00
CreateDevice
This commit is contained in:
parent
1170cca8ea
commit
7e425c67c9
@ -128,6 +128,8 @@ class RendererImpl : public Renderer {
|
|||||||
int paletteEntryCount,
|
int paletteEntryCount,
|
||||||
const PaletteEntry* pEntries
|
const PaletteEntry* pEntries
|
||||||
);
|
);
|
||||||
|
inline Result CreateDevice(const DeviceDirect3DCreateData& rCreateData, DeviceImpl& rDevice);
|
||||||
|
inline Result CreateDevice(const DeviceDirectDrawCreateData& rCreateData, DeviceImpl& rDevice);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RendererDataType m_data;
|
RendererDataType m_data;
|
||||||
@ -186,7 +188,7 @@ class DeviceImpl : public Device {
|
|||||||
// FUNCTION: BETA10 0x101708e0
|
// FUNCTION: BETA10 0x101708e0
|
||||||
const DeviceDataType& ImplementationData() const { return m_data; }
|
const DeviceDataType& ImplementationData() const { return m_data; }
|
||||||
|
|
||||||
// FUNCTION: BETA10 0x100d95
|
// FUNCTION: BETA10 0x100d9540
|
||||||
DeviceDataType& ImplementationData() { return m_data; }
|
DeviceDataType& ImplementationData() { return m_data; }
|
||||||
|
|
||||||
void SetImplementationData(IDirect3DRMDevice2* device) { m_data = device; }
|
void SetImplementationData(IDirect3DRMDevice2* device) { m_data = device; }
|
||||||
|
|||||||
@ -36,38 +36,92 @@ Result RendererImpl::Create()
|
|||||||
return (m_data != NULL) ? Success : Error;
|
return (m_data != NULL) ? Success : Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016cf00
|
||||||
|
inline Result RendererCreateDevice(
|
||||||
|
IDirect3DRM2* pD3DRM,
|
||||||
|
const DeviceDirect3DCreateData& rCreateData,
|
||||||
|
IDirect3DRMDevice2*& rpDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Result result =
|
||||||
|
ResultVal(pD3DRM->CreateDeviceFromD3D(rCreateData.m_pDirect3D, rCreateData.m_pDirect3DDevice, &rpDevice));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016ce60
|
||||||
|
inline Result RendererImpl::CreateDevice(const DeviceDirect3DCreateData& rCreateData, DeviceImpl& rDevice)
|
||||||
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!rDevice.ImplementationData());
|
||||||
|
|
||||||
|
return RendererCreateDevice(m_data, rCreateData, rDevice.ImplementationData());
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a1830
|
// FUNCTION: LEGO1 0x100a1830
|
||||||
|
// FUNCTION: BETA10 0x10169d90
|
||||||
Device* RendererImpl::CreateDevice(const DeviceDirect3DCreateData& data)
|
Device* RendererImpl::CreateDevice(const DeviceDirect3DCreateData& data)
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
DeviceImpl* device = new DeviceImpl();
|
DeviceImpl* device = new DeviceImpl();
|
||||||
HRESULT result = m_data->CreateDeviceFromD3D(data.m_pDirect3D, data.m_pDirect3DDevice, &device->m_data);
|
|
||||||
if (!SUCCEEDED(result)) {
|
if (!CreateDevice(data, *device)) {
|
||||||
delete device;
|
delete device;
|
||||||
device = NULL;
|
device = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016cfe0
|
||||||
|
inline Result RendererCreateDevice(
|
||||||
|
IDirect3DRM2* pD3DRM,
|
||||||
|
const DeviceDirectDrawCreateData& rCreateData,
|
||||||
|
IDirect3DRMDevice2*& rpDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Result result = ResultVal(pD3DRM->CreateDeviceFromSurface(
|
||||||
|
const_cast<GUID*>(rCreateData.m_driverGUID),
|
||||||
|
rCreateData.m_pDirectDraw,
|
||||||
|
rCreateData.m_pBackBuffer,
|
||||||
|
&rpDevice
|
||||||
|
));
|
||||||
|
|
||||||
|
if (Succeeded(result)) {
|
||||||
|
if (rCreateData.m_pBackBuffer) {
|
||||||
|
// GLOBAL: LEGO1 0x10101040
|
||||||
|
// GLOBAL: BETA10 0x102055f4
|
||||||
|
static int g_setBufferCount = 1;
|
||||||
|
if (g_setBufferCount) {
|
||||||
|
Result result2 = ResultVal(rpDevice->SetBufferCount(2));
|
||||||
|
assert(Succeeded(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016cf40
|
||||||
|
inline Result RendererImpl::CreateDevice(const DeviceDirectDrawCreateData& rCreateData, DeviceImpl& rDevice)
|
||||||
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!rDevice.ImplementationData());
|
||||||
|
|
||||||
|
return RendererCreateDevice(m_data, rCreateData, rDevice.ImplementationData());
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a1900
|
// FUNCTION: LEGO1 0x100a1900
|
||||||
|
// FUNCTION: BETA10 0x10169ea0
|
||||||
Device* RendererImpl::CreateDevice(const DeviceDirectDrawCreateData& data)
|
Device* RendererImpl::CreateDevice(const DeviceDirectDrawCreateData& data)
|
||||||
{
|
{
|
||||||
// at LEGO1 0x10101040, needs no annotation
|
assert(m_data);
|
||||||
static int g_SetBufferCount = 1;
|
|
||||||
|
|
||||||
DeviceImpl* device = new DeviceImpl();
|
DeviceImpl* device = new DeviceImpl();
|
||||||
HRESULT result = m_data->CreateDeviceFromSurface(
|
|
||||||
const_cast<LPGUID>(data.m_driverGUID),
|
if (!CreateDevice(data, *device)) {
|
||||||
data.m_pDirectDraw,
|
|
||||||
data.m_pBackBuffer,
|
|
||||||
&device->m_data
|
|
||||||
);
|
|
||||||
if (SUCCEEDED(result) && data.m_pBackBuffer && g_SetBufferCount) {
|
|
||||||
device->m_data->SetBufferCount(2);
|
|
||||||
}
|
|
||||||
if (!SUCCEEDED(result)) {
|
|
||||||
delete device;
|
delete device;
|
||||||
device = NULL;
|
device = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user