diff --git a/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp b/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp index 0c1bd0048d..939463625c 100644 --- a/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp +++ b/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp @@ -137,6 +137,12 @@ extern "C" last_device = f; + D3D8Base::IDirect3DSurface8 *f2 = NULL; + + // make a new render target + HRESULT hr2 = base_device->CreateRenderTarget(pPresentationParameters->BackBufferWidth,pPresentationParameters->BackBufferHeight,D3D8Base::D3DFMT_X8R8G8B8,pPresentationParameters->MultiSampleType,TRUE,&f2); + render_surface = D3D8Wrapper::IDirect3DSurface8::GetSurface(f2); + // Return our wrapped object *ppReturnedDeviceInterface = f; diff --git a/libmupen64plus/D3D8Interceptor/Direct3DDevice8Functions.cpp b/libmupen64plus/D3D8Interceptor/Direct3DDevice8Functions.cpp index dcdae8c053..2a3311d487 100644 --- a/libmupen64plus/D3D8Interceptor/Direct3DDevice8Functions.cpp +++ b/libmupen64plus/D3D8Interceptor/Direct3DDevice8Functions.cpp @@ -415,7 +415,8 @@ extern "C" LOG("SetRenderTarget"); LOG(pRenderTarget); LOG(pNewZStencil); - HRESULT hr = m_pDevice->SetRenderTarget(pRenderTarget->GetSurface(),pNewZStencil->GetSurface()); + //HRESULT hr = m_pDevice->SetRenderTarget(pRenderTarget->GetSurface(),pNewZStencil->GetSurface()); + HRESULT hr = m_pDevice->SetRenderTarget(render_surface->GetSurface(),pNewZStencil->GetSurface()); /*if (this->rTarget != NULL) { diff --git a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp index 7804b5c09d..d8d70e4533 100644 --- a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp +++ b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp @@ -19,6 +19,7 @@ extern "C" namespace D3D8Wrapper { IDirect3DDevice8 *last_device = NULL; + IDirect3DSurface8 *render_surface = NULL; void (*rendering_callback)( int ); D3D8Wrapper::IDirect3D8* WINAPI Direct3DCreate8(UINT Version) @@ -64,13 +65,13 @@ extern "C" } // get back buffer (surface) - D3D8Base::IDirect3DSurface8 *backbuffer; - D3D8Wrapper::last_device->GetD3D8Device()->GetBackBuffer(0,D3D8Base::D3DBACKBUFFER_TYPE_MONO,&backbuffer); + //D3D8Base::IDirect3DSurface8 *backbuffer; + //D3D8Wrapper::last_device->GetD3D8Device()->GetBackBuffer(0,D3D8Base::D3DBACKBUFFER_TYPE_MONO,&backbuffer); // surface... // make a D3DSURFACE_DESC, pass to GetDesc D3D8Base::D3DSURFACE_DESC desc; - backbuffer->GetDesc(&desc); + D3D8Wrapper::render_surface->GetDesc(&desc); // get out height/width *width = desc.Width; @@ -88,7 +89,7 @@ extern "C" // make a D3DLOCKED_RECT, pass to LockRect D3D8Base::D3DLOCKED_RECT locked; - backbuffer->LockRect(&locked,&entire_buffer,D3DLOCK_READONLY); + HRESULT hr = D3D8Wrapper::render_surface->LockRect(&locked,&entire_buffer,D3DLOCK_READONLY); // read out pBits from the LOCKED_RECT int from_row = desc.Height - 1; @@ -102,11 +103,11 @@ extern "C" } // unlock rect - backbuffer->UnlockRect(); + D3D8Wrapper::render_surface->UnlockRect(); } // release the surface - backbuffer->Release(); + //backbuffer->Release(); // we're done, maybe? } diff --git a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h index c3096ab8de..d809394ebd 100644 --- a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h +++ b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h @@ -503,6 +503,7 @@ extern "C" typedef D3D8Base::IDirect3D8* (WINAPI *D3DCREATE)(UINT); IDirect3D8* WINAPI Direct3DCreate8(UINT Version); extern IDirect3DDevice8 *last_device; + extern IDirect3DSurface8 *render_surface; extern void (*rendering_callback)( int ); } } \ No newline at end of file diff --git a/output/dll/d3d8.dll b/output/dll/d3d8.dll index ba0f1b3433..c4c34bb1d1 100644 Binary files a/output/dll/d3d8.dll and b/output/dll/d3d8.dll differ