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(IDirect3DDevice2, IDirect3DDevice);
|
||||
DEFINE_BASE_INTF(IDirect3DDevice3, IDirect3DDevice);
|
||||
DEFINE_BASE_INTF(IDirect3DTexture, IDirectDrawSurface);
|
||||
DEFINE_BASE_INTF(IDirect3DTexture2, IDirectDrawSurface);
|
||||
DEFINE_BASE_INTF(IDirect3DViewport2, IDirect3DViewport);
|
||||
DEFINE_BASE_INTF(IDirect3DViewport3, IDirect3DViewport);
|
||||
|
||||
@ -80,6 +82,8 @@ namespace Compat
|
||||
DEFINE_INTF_ID(IDirect3DDevice2);
|
||||
DEFINE_INTF_ID(IDirect3DDevice3);
|
||||
DEFINE_INTF_ID(IDirect3DDevice7);
|
||||
DEFINE_INTF_ID(IDirect3DTexture);
|
||||
DEFINE_INTF_ID(IDirect3DTexture2);
|
||||
DEFINE_INTF_ID(IDirect3DViewport);
|
||||
DEFINE_INTF_ID(IDirect3DViewport2);
|
||||
DEFINE_INTF_ID(IDirect3DViewport3);
|
||||
|
@ -196,10 +196,12 @@
|
||||
<ClInclude Include="Direct3d\DepthBuffer.h" />
|
||||
<ClInclude Include="Direct3d\Direct3d.h" />
|
||||
<ClInclude Include="Direct3d\Direct3dDevice.h" />
|
||||
<ClInclude Include="Direct3d\Direct3dTexture.h" />
|
||||
<ClInclude Include="Direct3d\Direct3dViewport.h" />
|
||||
<ClInclude Include="Direct3d\Hooks.h" />
|
||||
<ClInclude Include="Direct3d\Types.h" />
|
||||
<ClInclude Include="Direct3d\Visitors\Direct3dDeviceVtblVisitor.h" />
|
||||
<ClInclude Include="Direct3d\Visitors\Direct3dTextureVtblVisitor.h" />
|
||||
<ClInclude Include="Direct3d\Visitors\Direct3dViewportVtblVisitor.h" />
|
||||
<ClInclude Include="Direct3d\Visitors\Direct3dVtblVisitor.h" />
|
||||
<ClInclude Include="Dll\Procs.h" />
|
||||
@ -244,6 +246,7 @@
|
||||
<ClCompile Include="Direct3d\DepthBuffer.cpp" />
|
||||
<ClCompile Include="Direct3d\Direct3d.cpp" />
|
||||
<ClCompile Include="Direct3d\Direct3dDevice.cpp" />
|
||||
<ClCompile Include="Direct3d\Direct3dTexture.cpp" />
|
||||
<ClCompile Include="Direct3d\Direct3dViewport.cpp" />
|
||||
<ClCompile Include="Direct3d\Hooks.cpp" />
|
||||
<ClCompile Include="Dll\Procs.cpp" />
|
||||
|
@ -264,6 +264,12 @@
|
||||
<ClInclude Include="Direct3d\Direct3dViewport.h">
|
||||
<Filter>Header Files\Direct3d</Filter>
|
||||
</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>
|
||||
<ClCompile Include="Gdi\Gdi.cpp">
|
||||
@ -398,6 +404,9 @@
|
||||
<ClCompile Include="Direct3d\Direct3dViewport.cpp">
|
||||
<Filter>Source Files\Direct3d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Direct3d\Direct3dTexture.cpp">
|
||||
<Filter>Source Files\Direct3d</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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 "Direct3d/Direct3d.h"
|
||||
#include "Direct3d/Direct3dDevice.h"
|
||||
#include "Direct3d/Direct3dTexture.h"
|
||||
#include "Direct3d/Direct3dViewport.h"
|
||||
#include "Direct3d/Hooks.h"
|
||||
#include "Dll/Procs.h"
|
||||
@ -16,6 +17,7 @@ namespace
|
||||
{
|
||||
void hookDirect3dDevice(CompatRef<IDirect3D3> d3d, CompatRef<IDirectDrawSurface4> renderTarget);
|
||||
void hookDirect3dDevice7(CompatRef<IDirect3D7> d3d, CompatRef<IDirectDrawSurface7> renderTarget);
|
||||
void hookDirect3dTexture(CompatRef<IDirectDraw> dd);
|
||||
void hookDirect3dViewport(CompatRef<IDirect3D3> d3d);
|
||||
|
||||
template <typename Interface>
|
||||
@ -82,6 +84,7 @@ namespace
|
||||
hookVtable<IDirect3D2>(d3d);
|
||||
hookVtable<IDirect3D3>(d3d);
|
||||
hookDirect3dDevice(*d3d, renderTarget);
|
||||
hookDirect3dTexture(dd);
|
||||
hookDirect3dViewport(*d3d);
|
||||
}
|
||||
}
|
||||
@ -114,6 +117,27 @@ namespace
|
||||
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)
|
||||
{
|
||||
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