mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Hooked the IDirect3DTexture interfaces
This commit is contained in:
parent
6e95f7ca1b
commit
2d22ace9f1
@ -47,6 +47,8 @@ namespace Compat
|
|||||||
DEFINE_BASE_INTF(IDirect3D7, IDirectDraw);
|
DEFINE_BASE_INTF(IDirect3D7, IDirectDraw);
|
||||||
DEFINE_BASE_INTF(IDirect3DDevice2, IDirect3DDevice);
|
DEFINE_BASE_INTF(IDirect3DDevice2, IDirect3DDevice);
|
||||||
DEFINE_BASE_INTF(IDirect3DDevice3, IDirect3DDevice);
|
DEFINE_BASE_INTF(IDirect3DDevice3, IDirect3DDevice);
|
||||||
|
DEFINE_BASE_INTF(IDirect3DTexture, IDirectDrawSurface);
|
||||||
|
DEFINE_BASE_INTF(IDirect3DTexture2, IDirectDrawSurface);
|
||||||
DEFINE_BASE_INTF(IDirect3DViewport2, IDirect3DViewport);
|
DEFINE_BASE_INTF(IDirect3DViewport2, IDirect3DViewport);
|
||||||
DEFINE_BASE_INTF(IDirect3DViewport3, IDirect3DViewport);
|
DEFINE_BASE_INTF(IDirect3DViewport3, IDirect3DViewport);
|
||||||
|
|
||||||
@ -80,6 +82,8 @@ namespace Compat
|
|||||||
DEFINE_INTF_ID(IDirect3DDevice2);
|
DEFINE_INTF_ID(IDirect3DDevice2);
|
||||||
DEFINE_INTF_ID(IDirect3DDevice3);
|
DEFINE_INTF_ID(IDirect3DDevice3);
|
||||||
DEFINE_INTF_ID(IDirect3DDevice7);
|
DEFINE_INTF_ID(IDirect3DDevice7);
|
||||||
|
DEFINE_INTF_ID(IDirect3DTexture);
|
||||||
|
DEFINE_INTF_ID(IDirect3DTexture2);
|
||||||
DEFINE_INTF_ID(IDirect3DViewport);
|
DEFINE_INTF_ID(IDirect3DViewport);
|
||||||
DEFINE_INTF_ID(IDirect3DViewport2);
|
DEFINE_INTF_ID(IDirect3DViewport2);
|
||||||
DEFINE_INTF_ID(IDirect3DViewport3);
|
DEFINE_INTF_ID(IDirect3DViewport3);
|
||||||
|
@ -196,10 +196,12 @@
|
|||||||
<ClInclude Include="Direct3d\DepthBuffer.h" />
|
<ClInclude Include="Direct3d\DepthBuffer.h" />
|
||||||
<ClInclude Include="Direct3d\Direct3d.h" />
|
<ClInclude Include="Direct3d\Direct3d.h" />
|
||||||
<ClInclude Include="Direct3d\Direct3dDevice.h" />
|
<ClInclude Include="Direct3d\Direct3dDevice.h" />
|
||||||
|
<ClInclude Include="Direct3d\Direct3dTexture.h" />
|
||||||
<ClInclude Include="Direct3d\Direct3dViewport.h" />
|
<ClInclude Include="Direct3d\Direct3dViewport.h" />
|
||||||
<ClInclude Include="Direct3d\Hooks.h" />
|
<ClInclude Include="Direct3d\Hooks.h" />
|
||||||
<ClInclude Include="Direct3d\Types.h" />
|
<ClInclude Include="Direct3d\Types.h" />
|
||||||
<ClInclude Include="Direct3d\Visitors\Direct3dDeviceVtblVisitor.h" />
|
<ClInclude Include="Direct3d\Visitors\Direct3dDeviceVtblVisitor.h" />
|
||||||
|
<ClInclude Include="Direct3d\Visitors\Direct3dTextureVtblVisitor.h" />
|
||||||
<ClInclude Include="Direct3d\Visitors\Direct3dViewportVtblVisitor.h" />
|
<ClInclude Include="Direct3d\Visitors\Direct3dViewportVtblVisitor.h" />
|
||||||
<ClInclude Include="Direct3d\Visitors\Direct3dVtblVisitor.h" />
|
<ClInclude Include="Direct3d\Visitors\Direct3dVtblVisitor.h" />
|
||||||
<ClInclude Include="Dll\Procs.h" />
|
<ClInclude Include="Dll\Procs.h" />
|
||||||
@ -244,6 +246,7 @@
|
|||||||
<ClCompile Include="Direct3d\DepthBuffer.cpp" />
|
<ClCompile Include="Direct3d\DepthBuffer.cpp" />
|
||||||
<ClCompile Include="Direct3d\Direct3d.cpp" />
|
<ClCompile Include="Direct3d\Direct3d.cpp" />
|
||||||
<ClCompile Include="Direct3d\Direct3dDevice.cpp" />
|
<ClCompile Include="Direct3d\Direct3dDevice.cpp" />
|
||||||
|
<ClCompile Include="Direct3d\Direct3dTexture.cpp" />
|
||||||
<ClCompile Include="Direct3d\Direct3dViewport.cpp" />
|
<ClCompile Include="Direct3d\Direct3dViewport.cpp" />
|
||||||
<ClCompile Include="Direct3d\Hooks.cpp" />
|
<ClCompile Include="Direct3d\Hooks.cpp" />
|
||||||
<ClCompile Include="Dll\Procs.cpp" />
|
<ClCompile Include="Dll\Procs.cpp" />
|
||||||
|
@ -264,6 +264,12 @@
|
|||||||
<ClInclude Include="Direct3d\Direct3dViewport.h">
|
<ClInclude Include="Direct3d\Direct3dViewport.h">
|
||||||
<Filter>Header Files\Direct3d</Filter>
|
<Filter>Header Files\Direct3d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Direct3d\Visitors\Direct3dTextureVtblVisitor.h">
|
||||||
|
<Filter>Header Files\Direct3d\Visitors</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Direct3d\Direct3dTexture.h">
|
||||||
|
<Filter>Header Files\Direct3d</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="Gdi\Gdi.cpp">
|
<ClCompile Include="Gdi\Gdi.cpp">
|
||||||
@ -398,6 +404,9 @@
|
|||||||
<ClCompile Include="Direct3d\Direct3dViewport.cpp">
|
<ClCompile Include="Direct3d\Direct3dViewport.cpp">
|
||||||
<Filter>Source Files\Direct3d</Filter>
|
<Filter>Source Files\Direct3d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Direct3d\Direct3dTexture.cpp">
|
||||||
|
<Filter>Source Files\Direct3d</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Dll\DDrawCompat.def">
|
<None Include="Dll\DDrawCompat.def">
|
||||||
|
12
DDrawCompat/Direct3d/Direct3dTexture.cpp
Normal file
12
DDrawCompat/Direct3d/Direct3dTexture.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include "Direct3d/Direct3dTexture.h"
|
||||||
|
|
||||||
|
namespace Direct3d
|
||||||
|
{
|
||||||
|
template <typename TDirect3dTexture>
|
||||||
|
void Direct3dTexture<TDirect3dTexture>::setCompatVtable(Vtable<TDirect3dTexture>& /*vtable*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template Direct3dTexture<IDirect3DTexture>;
|
||||||
|
template Direct3dTexture<IDirect3DTexture2>;
|
||||||
|
}
|
17
DDrawCompat/Direct3d/Direct3dTexture.h
Normal file
17
DDrawCompat/Direct3d/Direct3dTexture.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Common/CompatVtable.h"
|
||||||
|
#include "Direct3d/Visitors/Direct3dTextureVtblVisitor.h"
|
||||||
|
|
||||||
|
namespace Direct3d
|
||||||
|
{
|
||||||
|
template <typename TDirect3dTexture>
|
||||||
|
class Direct3dTexture : public CompatVtable<Vtable<TDirect3dTexture>>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void setCompatVtable(Vtable<TDirect3dTexture>& vtable);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_COMPAT_VTABLE(IDirect3DTextureVtbl, Direct3d::Direct3dTexture<IDirect3DTexture>);
|
||||||
|
SET_COMPAT_VTABLE(IDirect3DTexture2Vtbl, Direct3d::Direct3dTexture<IDirect3DTexture2>);
|
@ -8,6 +8,7 @@
|
|||||||
#include "DDraw/Repository.h"
|
#include "DDraw/Repository.h"
|
||||||
#include "Direct3d/Direct3d.h"
|
#include "Direct3d/Direct3d.h"
|
||||||
#include "Direct3d/Direct3dDevice.h"
|
#include "Direct3d/Direct3dDevice.h"
|
||||||
|
#include "Direct3d/Direct3dTexture.h"
|
||||||
#include "Direct3d/Direct3dViewport.h"
|
#include "Direct3d/Direct3dViewport.h"
|
||||||
#include "Direct3d/Hooks.h"
|
#include "Direct3d/Hooks.h"
|
||||||
#include "Dll/Procs.h"
|
#include "Dll/Procs.h"
|
||||||
@ -16,6 +17,7 @@ namespace
|
|||||||
{
|
{
|
||||||
void hookDirect3dDevice(CompatRef<IDirect3D3> d3d, CompatRef<IDirectDrawSurface4> renderTarget);
|
void hookDirect3dDevice(CompatRef<IDirect3D3> d3d, CompatRef<IDirectDrawSurface4> renderTarget);
|
||||||
void hookDirect3dDevice7(CompatRef<IDirect3D7> d3d, CompatRef<IDirectDrawSurface7> renderTarget);
|
void hookDirect3dDevice7(CompatRef<IDirect3D7> d3d, CompatRef<IDirectDrawSurface7> renderTarget);
|
||||||
|
void hookDirect3dTexture(CompatRef<IDirectDraw> dd);
|
||||||
void hookDirect3dViewport(CompatRef<IDirect3D3> d3d);
|
void hookDirect3dViewport(CompatRef<IDirect3D3> d3d);
|
||||||
|
|
||||||
template <typename Interface>
|
template <typename Interface>
|
||||||
@ -82,6 +84,7 @@ namespace
|
|||||||
hookVtable<IDirect3D2>(d3d);
|
hookVtable<IDirect3D2>(d3d);
|
||||||
hookVtable<IDirect3D3>(d3d);
|
hookVtable<IDirect3D3>(d3d);
|
||||||
hookDirect3dDevice(*d3d, renderTarget);
|
hookDirect3dDevice(*d3d, renderTarget);
|
||||||
|
hookDirect3dTexture(dd);
|
||||||
hookDirect3dViewport(*d3d);
|
hookDirect3dViewport(*d3d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,6 +117,27 @@ namespace
|
|||||||
hookVtable<IDirect3DDevice7>(d3dDevice);
|
hookVtable<IDirect3DDevice7>(d3dDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hookDirect3dTexture(CompatRef<IDirectDraw> dd)
|
||||||
|
{
|
||||||
|
DDSURFACEDESC desc = {};
|
||||||
|
desc.dwSize = sizeof(desc);
|
||||||
|
desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
|
||||||
|
desc.dwWidth = 1;
|
||||||
|
desc.dwHeight = 1;
|
||||||
|
desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_SYSTEMMEMORY;
|
||||||
|
|
||||||
|
CompatPtr<IDirectDrawSurface> texture;
|
||||||
|
HRESULT result = dd->CreateSurface(&dd, &desc, &texture.getRef(), nullptr);
|
||||||
|
if (FAILED(result))
|
||||||
|
{
|
||||||
|
Compat::Log() << "Failed to create a texture for hooking: " << result;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hookVtable<IDirect3DTexture>(texture);
|
||||||
|
hookVtable<IDirect3DTexture2>(texture);
|
||||||
|
}
|
||||||
|
|
||||||
void hookDirect3dViewport(CompatRef<IDirect3D3> d3d)
|
void hookDirect3dViewport(CompatRef<IDirect3D3> d3d)
|
||||||
{
|
{
|
||||||
CompatPtr<IDirect3DViewport3> viewport;
|
CompatPtr<IDirect3DViewport3> viewport;
|
||||||
|
37
DDrawCompat/Direct3d/Visitors/Direct3dTextureVtblVisitor.h
Normal file
37
DDrawCompat/Direct3d/Visitors/Direct3dTextureVtblVisitor.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define CINTERFACE
|
||||||
|
|
||||||
|
#include <d3d.h>
|
||||||
|
|
||||||
|
#include "Common/VtableVisitor.h"
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct VtableForEach<IDirect3DTextureVtbl>
|
||||||
|
{
|
||||||
|
template <typename Vtable, typename Visitor>
|
||||||
|
static void forEach(Visitor& visitor)
|
||||||
|
{
|
||||||
|
VtableForEach<IUnknownVtbl>::forEach<Vtable>(visitor);
|
||||||
|
|
||||||
|
DD_VISIT(Initialize);
|
||||||
|
DD_VISIT(GetHandle);
|
||||||
|
DD_VISIT(PaletteChanged);
|
||||||
|
DD_VISIT(Load);
|
||||||
|
DD_VISIT(Unload);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct VtableForEach<IDirect3DTexture2Vtbl>
|
||||||
|
{
|
||||||
|
template <typename Vtable, typename Visitor>
|
||||||
|
static void forEach(Visitor& visitor)
|
||||||
|
{
|
||||||
|
VtableForEach<IUnknownVtbl>::forEach<Vtable>(visitor);
|
||||||
|
|
||||||
|
DD_VISIT(GetHandle);
|
||||||
|
DD_VISIT(PaletteChanged);
|
||||||
|
DD_VISIT(Load);
|
||||||
|
}
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user