Skip to content

Commit

Permalink
Fix reference count for Direct3D
Browse files Browse the repository at this point in the history
  • Loading branch information
elishacloud committed Feb 10, 2025
1 parent 175c2b0 commit acf2a43
Show file tree
Hide file tree
Showing 12 changed files with 203 additions and 93 deletions.
2 changes: 1 addition & 1 deletion Dllmain/BuildNo.rc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#define BUILD_NUMBER 7507
#define BUILD_NUMBER 7508
7 changes: 5 additions & 2 deletions ddraw/IDirect3DDeviceX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ HRESULT m_IDirect3DDeviceX::CreateExecuteBuffer(LPD3DEXECUTEBUFFERDESC lpDesc, L

ExecuteBufferList.push_back(pExecuteBuffer);

AddRef(1);

*lplpDirect3DExecuteBuffer = pExecuteBuffer;

return D3D_OK;
Expand Down Expand Up @@ -255,7 +257,8 @@ void m_IDirect3DDeviceX::ReleaseExecuteBuffer(LPDIRECT3DEXECUTEBUFFER lpDirect3D
auto it = std::find(ExecuteBufferList.begin(), ExecuteBufferList.end(), lpDirect3DExecuteBuffer);
if (it != ExecuteBufferList.end())
{
// Remove it from the list
Release(1);

ExecuteBufferList.erase(it);
}
}
Expand Down Expand Up @@ -5030,7 +5033,7 @@ void m_IDirect3DDeviceX::ReleaseInterface()

if (D3DInterface)
{
D3DInterface->ClearD3DDevice();
D3DInterface->ReleaseD3DDevice();
}

if (ddrawParent)
Expand Down
2 changes: 1 addition & 1 deletion ddraw/IDirect3DTextureX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,6 @@ void m_IDirect3DTextureX::ReleaseInterface()

if (DDrawSurface)
{
DDrawSurface->ClearAttachedTexture();
DDrawSurface->ReleaseAttachedTexture();
}
}
5 changes: 5 additions & 0 deletions ddraw/IDirect3DVertexBufferX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,11 @@ void m_IDirect3DVertexBufferX::ReleaseInterface()

ReleaseD9Buffer(false, false);

if (D3DInterface)
{
D3DInterface->ReleaseVertexBuffer(this);
}

if (ddrawParent)
{
ddrawParent->RemoveVertexBufferFromVector(this);
Expand Down
6 changes: 4 additions & 2 deletions ddraw/IDirect3DVertexBufferX.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class m_IDirect3DVertexBufferX : public IDirect3DVertexBuffer7, public AddressLo
ULONG RefCount1 = 0;
ULONG RefCount7 = 0;
m_IDirectDrawX* ddrawParent = nullptr;
m_IDirect3DX* D3DInterface = nullptr;
LPDIRECT3DDEVICE9* d3d9Device = nullptr;

// Vertex buffer desc
Expand Down Expand Up @@ -67,7 +68,7 @@ class m_IDirect3DVertexBufferX : public IDirect3DVertexBuffer7, public AddressLo

InitInterface(DirectXVersion);
}
m_IDirect3DVertexBufferX(m_IDirectDrawX* lpDdraw, LPD3DVERTEXBUFFERDESC lpVBDesc, DWORD DirectXVersion) : ddrawParent(lpDdraw)
m_IDirect3DVertexBufferX(m_IDirectDrawX* lpDdraw, m_IDirect3DX* D3D, LPD3DVERTEXBUFFERDESC lpVBDesc, DWORD DirectXVersion) : ddrawParent(lpDdraw), D3DInterface(D3D)
{
ProxyDirectXVersion = 9;

Expand Down Expand Up @@ -117,7 +118,8 @@ class m_IDirect3DVertexBufferX : public IDirect3DVertexBuffer7, public AddressLo
void ClearDdraw() { ddrawParent = nullptr; d3d9Device = nullptr; }

// Direct3D9 interfaces
const LPDIRECT3DVERTEXBUFFER9 GetCurrentD9VertexBuffer() const { return d3d9VertexBuffer; };
inline const LPDIRECT3DVERTEXBUFFER9 GetCurrentD9VertexBuffer() const { return d3d9VertexBuffer; };
inline void ClearD3D() { D3DInterface = nullptr; }
void ReleaseD9Buffer(bool BackupData, bool ResetBuffer);

DWORD GetFVF9() const { return d3d9VBDesc.FVF; };
Expand Down
Loading

0 comments on commit acf2a43

Please sign in to comment.