Skip to content

Commit d97a4b1

Browse files
committed
Allow Direct3D9 wrapper even without shaders
1 parent ee2459b commit d97a4b1

File tree

8 files changed

+258
-165
lines changed

8 files changed

+258
-165
lines changed

Resources/BuildNo.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
#define BUILD_NUMBER 2247
1+
#define BUILD_NUMBER 2248

Wrappers/d3d8/IDirect3DDevice8.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,7 @@ HRESULT m_IDirect3DDevice8::SetRenderState(D3DRENDERSTATETYPE State, DWORD Value
882882
// Fix for 2D Fog, light switches, pictures and glow around the flashlight lens
883883
if (d3d8to9 && State == D3DRS_ZBIAS)
884884
{
885-
Value = Value / 8;
885+
Value = (Value * 15) / 16;
886886
}
887887

888888
// Restores self shadows

Wrappers/d3d8/d3d8wrapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void HookDirect3DCreate8(HMODULE ScriptDll)
100100
}
101101

102102
// Get 'Direct3DCreate8' for local d3d8.dll
103-
bool GetLocalDirect3DCreate8()
103+
static bool GetLocalDirect3DCreate8()
104104
{
105105
// Only allow function to run once
106106
static bool AlreadyRun = false;

Wrappers/d3d9/IDirect3D9.cpp

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -144,40 +144,52 @@ HRESULT m_IDirect3D9::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType, HWND hFo
144144
<< ", ppReturnedDeviceInterface = " << ppReturnedDeviceInterface
145145
<< ')' << " ...";
146146

147-
if (pPresentationParameters == nullptr)
147+
if (pPresentationParameters == nullptr || ppReturnedDeviceInterface == nullptr)
148148
{
149149
return D3DERR_INVALIDCALL;
150150
}
151151

152-
if ((BehaviorFlags & D3DCREATE_ADAPTERGROUP_DEVICE) != 0)
152+
if (EnableCustomShaders)
153153
{
154-
Logging::Log() << "Adapter group devices are unsupported.";
155-
return D3DERR_NOTAVAILABLE;
156-
}
154+
if ((BehaviorFlags & D3DCREATE_ADAPTERGROUP_DEVICE) != 0)
155+
{
156+
Logging::Log() << "Adapter group devices are unsupported.";
157+
return D3DERR_NOTAVAILABLE;
158+
}
157159

158-
D3DPRESENT_PARAMETERS pp = *pPresentationParameters;
160+
D3DPRESENT_PARAMETERS pp = *pPresentationParameters;
159161

160-
const bool use_software_rendering = (BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) != 0;
161-
if (use_software_rendering)
162-
{
163-
Logging::Log() << "> Replacing 'D3DCREATE_SOFTWARE_VERTEXPROCESSING' flag with 'D3DCREATE_MIXED_VERTEXPROCESSING' to allow for hardware rendering ...";
164-
BehaviorFlags = (BehaviorFlags & ~D3DCREATE_SOFTWARE_VERTEXPROCESSING) | D3DCREATE_MIXED_VERTEXPROCESSING;
165-
}
162+
const bool use_software_rendering = (BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) != 0;
163+
if (use_software_rendering)
164+
{
165+
Logging::Log() << "> Replacing 'D3DCREATE_SOFTWARE_VERTEXPROCESSING' flag with 'D3DCREATE_MIXED_VERTEXPROCESSING' to allow for hardware rendering ...";
166+
BehaviorFlags = (BehaviorFlags & ~D3DCREATE_SOFTWARE_VERTEXPROCESSING) | D3DCREATE_MIXED_VERTEXPROCESSING;
167+
}
166168

167-
const HRESULT hr = ProxyInterface->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, &pp, ppReturnedDeviceInterface);
168-
// Update output values (see https://docs.microsoft.com/windows/win32/api/d3d9/nf-d3d9-idirect3d9-createdevice)
169-
pPresentationParameters->BackBufferWidth = pp.BackBufferWidth;
170-
pPresentationParameters->BackBufferHeight = pp.BackBufferHeight;
171-
pPresentationParameters->BackBufferFormat = pp.BackBufferFormat;
172-
pPresentationParameters->BackBufferCount = pp.BackBufferCount;
169+
const HRESULT hr = ProxyInterface->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, &pp, ppReturnedDeviceInterface);
170+
// Update output values (see https://docs.microsoft.com/windows/win32/api/d3d9/nf-d3d9-idirect3d9-createdevice)
171+
pPresentationParameters->BackBufferWidth = pp.BackBufferWidth;
172+
pPresentationParameters->BackBufferHeight = pp.BackBufferHeight;
173+
pPresentationParameters->BackBufferFormat = pp.BackBufferFormat;
174+
pPresentationParameters->BackBufferCount = pp.BackBufferCount;
175+
176+
if (FAILED(hr))
177+
{
178+
Logging::Log() << "IDirect3D9::CreateDevice" << " failed with error code " << (D3DERR)hr << '!';
179+
return hr;
180+
}
181+
182+
init_runtime_d3d(*ppReturnedDeviceInterface, DeviceType, pp, use_software_rendering);
173183

174-
if (FAILED(hr))
175-
{
176-
Logging::Log() << "IDirect3D9::CreateDevice" << " failed with error code " << (D3DERR)hr << '!';
177184
return hr;
178185
}
179186

180-
init_runtime_d3d(*ppReturnedDeviceInterface, DeviceType, pp, use_software_rendering);
187+
const HRESULT hr = ProxyInterface->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
188+
189+
if (SUCCEEDED(hr))
190+
{
191+
*ppReturnedDeviceInterface = new m_IDirect3DDevice9(*ppReturnedDeviceInterface, false);
192+
}
181193

182194
return hr;
183195
}

0 commit comments

Comments
 (0)