1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Hooked the IDirectDrawClipper interface

This commit is contained in:
narzoul 2017-03-05 12:50:45 +01:00
parent cd22b333e3
commit d1cd72b304
6 changed files with 73 additions and 2 deletions

View File

@ -0,0 +1,8 @@
#include "DDraw/DirectDrawClipper.h"
namespace DDraw
{
void DirectDrawClipper::setCompatVtable(IDirectDrawClipperVtbl& /*vtable*/)
{
}
}

View File

@ -0,0 +1,15 @@
#pragma once
#include "Common/CompatVtable.h"
#include "DDraw/Visitors/DirectDrawClipperVtblVisitor.h"
namespace DDraw
{
class DirectDrawClipper : public CompatVtable<IDirectDrawClipperVtbl>
{
public:
static void setCompatVtable(IDirectDrawClipperVtbl& vtable);
};
}
SET_COMPAT_VTABLE(IDirectDrawClipperVtbl, DDraw::DirectDrawClipper);

View File

@ -7,8 +7,9 @@
#include "Common/Log.h"
#include "DDraw/ActivateAppHandler.h"
#include "DDraw/DirectDraw.h"
#include "DDraw/DirectDrawSurface.h"
#include "DDraw/DirectDrawClipper.h"
#include "DDraw/DirectDrawPalette.h"
#include "DDraw/DirectDrawSurface.h"
#include "DDraw/Hooks.h"
#include "DDraw/RealPrimarySurface.h"
#include "DDraw/Repository.h"
@ -31,6 +32,20 @@ namespace
dd7.detach();
}
void hookDirectDrawClipper(CompatRef<IDirectDraw7> dd)
{
CompatPtr<IDirectDrawClipper> clipper;
HRESULT result = dd->CreateClipper(&dd, 0, &clipper.getRef(), nullptr);
if (SUCCEEDED(result))
{
DDraw::DirectDrawClipper::hookVtable(clipper.get()->lpVtbl);
}
else
{
Compat::Log() << "Failed to create a DirectDraw clipper for hooking: " << result;
}
}
void hookDirectDrawPalette(CompatRef<IDirectDraw7> dd)
{
PALETTEENTRY paletteEntries[2] = {};
@ -112,8 +127,9 @@ namespace DDraw
}
hookDirectDraw(*dd7);
hookDirectDrawSurface(*dd7);
hookDirectDrawClipper(*dd7);
hookDirectDrawPalette(*dd7);
hookDirectDrawSurface(*dd7);
}
void uninstallHooks()

View File

@ -0,0 +1,20 @@
#pragma once
#include "Common/VtableVisitor.h"
template <>
struct VtableForEach<IDirectDrawClipperVtbl>
{
template <typename Vtable, typename Visitor>
static void forEach(Visitor& visitor)
{
VtableForEach<IUnknownVtbl>::forEach<Vtable>(visitor);
DD_VISIT(GetClipList);
DD_VISIT(GetHWnd);
DD_VISIT(Initialize);
DD_VISIT(IsClipListChanged);
DD_VISIT(SetClipList);
DD_VISIT(SetHWnd);
}
};

View File

@ -182,6 +182,7 @@
<ClInclude Include="D3dDdi\Visitors\DeviceFuncsVisitor.h" />
<ClInclude Include="DDraw\ActivateAppHandler.h" />
<ClInclude Include="DDraw\DirectDraw.h" />
<ClInclude Include="DDraw\DirectDrawClipper.h" />
<ClInclude Include="DDraw\DirectDrawPalette.h" />
<ClInclude Include="DDraw\DirectDrawSurface.h" />
<ClInclude Include="DDraw\DisplayMode.h" />
@ -196,6 +197,7 @@
<ClInclude Include="DDraw\Types.h" />
<ClInclude Include="DDraw\IReleaseNotifier.h" />
<ClInclude Include="DDraw\RealPrimarySurface.h" />
<ClInclude Include="DDraw\Visitors\DirectDrawClipperVtblVisitor.h" />
<ClInclude Include="DDraw\Visitors\DirectDrawPaletteVtblVisitor.h" />
<ClInclude Include="DDraw\Visitors\DirectDrawSurfaceVtblVisitor.h" />
<ClInclude Include="DDraw\Visitors\DirectDrawVtblVisitor.h" />
@ -245,6 +247,7 @@
<ClCompile Include="D3dDdi\OversizedResource.cpp" />
<ClCompile Include="DDraw\ActivateAppHandler.cpp" />
<ClCompile Include="DDraw\DirectDraw.cpp" />
<ClCompile Include="DDraw\DirectDrawClipper.cpp" />
<ClCompile Include="DDraw\DirectDrawPalette.cpp" />
<ClCompile Include="DDraw\DirectDrawSurface.cpp" />
<ClCompile Include="DDraw\DisplayMode.cpp" />

View File

@ -300,6 +300,12 @@
<ClInclude Include="D3dDdi\OversizedResource.h">
<Filter>Header Files\D3dDdi</Filter>
</ClInclude>
<ClInclude Include="DDraw\Visitors\DirectDrawClipperVtblVisitor.h">
<Filter>Header Files\DDraw\Visitors</Filter>
</ClInclude>
<ClInclude Include="DDraw\DirectDrawClipper.h">
<Filter>Header Files\DDraw</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Gdi\Gdi.cpp">
@ -458,6 +464,9 @@
<ClCompile Include="D3dDdi\OversizedResource.cpp">
<Filter>Source Files\D3dDdi</Filter>
</ClCompile>
<ClCompile Include="DDraw\DirectDrawClipper.cpp">
<Filter>Source Files\DDraw</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Dll\DDrawCompat.def">