From 20fb404d2ef04f9fea98bc7d71cca5ac05ca19f8 Mon Sep 17 00:00:00 2001 From: pjgat09 Date: Sun, 20 Jul 2014 03:18:31 +0000 Subject: [PATCH] N64 D3D8 wrapper: handle wrapping/releasing textures better --- .../Direct3DResource8Functions.cpp | 2 ++ .../Direct3DTexture8Functions.cpp | 21 ++----------------- .../D3D8Interceptor/d3d8Wrapper.cpp | 1 - libmupen64plus/D3D8Interceptor/d3d8Wrapper.h | 2 -- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/libmupen64plus/D3D8Interceptor/Direct3DResource8Functions.cpp b/libmupen64plus/D3D8Interceptor/Direct3DResource8Functions.cpp index 1f23eb7b46..563e87a50d 100644 --- a/libmupen64plus/D3D8Interceptor/Direct3DResource8Functions.cpp +++ b/libmupen64plus/D3D8Interceptor/Direct3DResource8Functions.cpp @@ -4,6 +4,8 @@ extern "C" { namespace D3D8Wrapper { + ThreadSafePointerSet D3D8Wrapper::IDirect3DResource8::m_List; + D3D8Wrapper::IDirect3DResource8::IDirect3DResource8(D3D8Base::IDirect3DResource8* pResource) : IDirect3DUnknown((IUnknown*) pResource) { LOG("IDirect3DResource8 from base " << pResource << " made " << this); diff --git a/libmupen64plus/D3D8Interceptor/Direct3DTexture8Functions.cpp b/libmupen64plus/D3D8Interceptor/Direct3DTexture8Functions.cpp index 46bbb72bce..e091b1abc5 100644 --- a/libmupen64plus/D3D8Interceptor/Direct3DTexture8Functions.cpp +++ b/libmupen64plus/D3D8Interceptor/Direct3DTexture8Functions.cpp @@ -4,8 +4,6 @@ extern "C" { namespace D3D8Wrapper { - ThreadSafePointerSet D3D8Wrapper::IDirect3DTexture8::m_List; - D3D8Wrapper::IDirect3DTexture8::IDirect3DTexture8(D3D8Base::IDirect3DTexture8* pTexture) : IDirect3DBaseTexture8((D3D8Base::IDirect3DBaseTexture8*) pTexture) { LOG("IDirect3DTexture8"); @@ -14,12 +12,12 @@ extern "C" D3D8Wrapper::IDirect3DTexture8* D3D8Wrapper::IDirect3DTexture8::GetTexture(D3D8Base::IDirect3DTexture8* pTexture) { - D3D8Wrapper::IDirect3DTexture8* p = (D3D8Wrapper::IDirect3DTexture8*) m_List.GetDataPtr(pTexture); + D3D8Wrapper::IDirect3DTexture8* p = (D3D8Wrapper::IDirect3DTexture8*) D3D8Wrapper::IDirect3DResource8::m_List.GetDataPtr(pTexture); if( p == NULL ) { p = new D3D8Wrapper::IDirect3DTexture8(pTexture); LOG("IDirect3DTexture8::GetTexture " << pTexture << " created new " << p) - m_List.AddMember(pTexture, p); + D3D8Wrapper::IDirect3DResource8::m_List.AddMember(pTexture, p); return p; } @@ -28,21 +26,6 @@ extern "C" return p; } - STDMETHODIMP_(ULONG) D3D8Wrapper::IDirect3DTexture8::Release(THIS) - { - LOG("IDirect3DTexture8::Release " << this); - m_pUnk->Release(); - - ULONG ulRef = --m_ulRef; - if(ulRef == 0) - { - m_List.DeleteMember(GetResource()); - delete this; - return 0; - } - return ulRef; - } - /*STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3D8Base::D3DSURFACE_DESC *pDesc) PURE;*/ STDMETHODIMP D3D8Wrapper::IDirect3DTexture8::GetLevelDesc(UINT Level,D3D8Base::D3DSURFACE_DESC *pDesc) diff --git a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp index 4c71b7232b..7804b5c09d 100644 --- a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp +++ b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp @@ -5,7 +5,6 @@ D3D8Base::LPDIRECT3D8 g_D3D=NULL; HMODULE hD3D; ThreadSafePointerSet D3D8Wrapper::IDirect3DDevice8::m_List; -ThreadSafePointerSet D3D8Wrapper::IDirect3DResource8::m_List; ThreadSafePointerSet D3D8Wrapper::IDirect3DBaseTexture8::m_List; ThreadSafePointerSet D3D8Wrapper::IDirect3DVolumeTexture8::m_List; ThreadSafePointerSet D3D8Wrapper::IDirect3DCubeTexture8::m_List; diff --git a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h index 7afb7c8e11..7fc4902cc2 100644 --- a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h +++ b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h @@ -312,8 +312,6 @@ extern "C" static ThreadSafePointerSet m_List; public: - STDMETHOD_(ULONG,Release)(THIS); - IDirect3DTexture8(D3D8Base::IDirect3DTexture8*); static D3D8Wrapper::IDirect3DTexture8* GetTexture(D3D8Base::IDirect3DTexture8*);