mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Replaced DirectDraw palette and clipper raw pointers with smart pointers
This commit is contained in:
parent
e8f4a970e0
commit
f973291f93
@ -1,6 +1,5 @@
|
||||
#include <atomic>
|
||||
|
||||
#include "CompatDirectDrawPalette.h"
|
||||
#include "CompatGdi.h"
|
||||
#include "CompatGdiCaret.h"
|
||||
#include "CompatGdiDcCache.h"
|
||||
|
@ -1,7 +1,6 @@
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
|
||||
#include "CompatDirectDrawPalette.h"
|
||||
#include "CompatGdiDcCache.h"
|
||||
#include "CompatPrimarySurface.h"
|
||||
#include "CompatPtr.h"
|
||||
@ -20,7 +19,7 @@ namespace
|
||||
DWORD g_maxUsedCacheSize = 0;
|
||||
DWORD g_ddLockThreadId = 0;
|
||||
|
||||
IDirectDrawPalette* g_palette = nullptr;
|
||||
CompatWeakPtr<IDirectDrawPalette> g_palette;
|
||||
PALETTEENTRY g_paletteEntries[256] = {};
|
||||
void* g_surfaceMemory = nullptr;
|
||||
LONG g_pitch = 0;
|
||||
@ -167,7 +166,8 @@ namespace CompatGdiDcCache
|
||||
bool init()
|
||||
{
|
||||
auto dd(DDrawRepository::getDirectDraw());
|
||||
dd->CreatePalette(dd, DDPCAPS_8BIT | DDPCAPS_ALLOW256, g_paletteEntries, &g_palette, nullptr);
|
||||
dd->CreatePalette(dd,
|
||||
DDPCAPS_8BIT | DDPCAPS_ALLOW256, g_paletteEntries, &g_palette.getRef(), nullptr);
|
||||
return nullptr != g_palette;
|
||||
}
|
||||
|
||||
@ -221,8 +221,7 @@ namespace CompatGdiDcCache
|
||||
{
|
||||
std::memcpy(&g_paletteEntries[startingEntry], &entries[startingEntry],
|
||||
count * sizeof(PALETTEENTRY));
|
||||
CompatDirectDrawPalette::s_origVtable.SetEntries(
|
||||
g_palette, 0, startingEntry, count, g_paletteEntries);
|
||||
g_palette->SetEntries(g_palette, 0, startingEntry, count, g_paletteEntries);
|
||||
clear();
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
|
||||
#include "CompatDirectDrawPalette.h"
|
||||
#include "CompatPaletteConverter.h"
|
||||
#include "CompatPrimarySurface.h"
|
||||
#include "CompatPtr.h"
|
||||
@ -131,7 +130,7 @@ namespace CompatPaletteConverter
|
||||
g_dc = nullptr;
|
||||
}
|
||||
|
||||
void setClipper(IDirectDrawClipper* clipper)
|
||||
void setClipper(CompatWeakPtr<IDirectDrawClipper> clipper)
|
||||
{
|
||||
if (g_surface)
|
||||
{
|
||||
|
@ -12,6 +12,6 @@ namespace CompatPaletteConverter
|
||||
HDC getDc();
|
||||
CompatWeakPtr<IDirectDrawSurface7> getSurface();
|
||||
void release();
|
||||
void setClipper(IDirectDrawClipper* clipper);
|
||||
void setClipper(CompatWeakPtr<IDirectDrawClipper> clipper);
|
||||
void updatePalette(DWORD startingEntry, DWORD count);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ namespace CompatPrimarySurface
|
||||
|
||||
DisplayMode displayMode = {};
|
||||
bool isDisplayModeChanged = false;
|
||||
LPDIRECTDRAWPALETTE palette = nullptr;
|
||||
CompatWeakPtr<IDirectDrawPalette> palette;
|
||||
PALETTEENTRY paletteEntries[256] = {};
|
||||
LONG width = 0;
|
||||
LONG height = 0;
|
||||
|
@ -27,7 +27,7 @@ namespace CompatPrimarySurface
|
||||
|
||||
extern DisplayMode displayMode;
|
||||
extern bool isDisplayModeChanged;
|
||||
extern LPDIRECTDRAWPALETTE palette;
|
||||
extern CompatWeakPtr<IDirectDrawPalette> palette;
|
||||
extern PALETTEENTRY paletteEntries[256];
|
||||
extern LONG width;
|
||||
extern LONG height;
|
||||
|
@ -82,12 +82,12 @@ namespace
|
||||
void hookDirectDrawPalette(CompatRef<IDirectDraw7> dd)
|
||||
{
|
||||
PALETTEENTRY paletteEntries[2] = {};
|
||||
IDirectDrawPalette* palette = nullptr;
|
||||
HRESULT result = dd->CreatePalette(&dd, DDPCAPS_1BIT, paletteEntries, &palette, nullptr);
|
||||
CompatPtr<IDirectDrawPalette> palette;
|
||||
HRESULT result = dd->CreatePalette(&dd,
|
||||
DDPCAPS_1BIT, paletteEntries, &palette.getRef(), nullptr);
|
||||
if (SUCCEEDED(result))
|
||||
{
|
||||
CompatDirectDrawPalette::hookVtable(*palette);
|
||||
palette->lpVtbl->Release(palette);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,6 +1,5 @@
|
||||
#include <atomic>
|
||||
|
||||
#include "CompatDirectDrawPalette.h"
|
||||
#include "CompatDirectDrawSurface.h"
|
||||
#include "CompatGdi.h"
|
||||
#include "CompatPaletteConverter.h"
|
||||
@ -23,6 +22,7 @@ namespace
|
||||
|
||||
CompatWeakPtr<IDirectDrawSurface7> g_frontBuffer;
|
||||
CompatWeakPtr<IDirectDrawSurface7> g_backBuffer;
|
||||
CompatWeakPtr<IDirectDrawClipper> g_clipper;
|
||||
DDSURFACEDESC2 g_surfaceDesc = {};
|
||||
IReleaseNotifier g_releaseNotifier(onRelease);
|
||||
|
||||
@ -47,16 +47,6 @@ namespace
|
||||
|
||||
bool result = false;
|
||||
|
||||
if (!RealPrimarySurface::isFullScreen())
|
||||
{
|
||||
IDirectDrawClipper* clipper = nullptr;
|
||||
if (FAILED(g_frontBuffer->GetClipper(g_frontBuffer, &clipper)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
clipper->lpVtbl->Release(clipper);
|
||||
}
|
||||
|
||||
auto primary(CompatPrimarySurface::getPrimary());
|
||||
if (CompatPrimarySurface::pixelFormat.dwRGBBitCount <= 8)
|
||||
{
|
||||
@ -161,6 +151,7 @@ namespace
|
||||
timeEndPeriod(1);
|
||||
g_frontBuffer = nullptr;
|
||||
g_backBuffer.release();
|
||||
g_clipper = nullptr;
|
||||
g_isFullScreen = false;
|
||||
CompatPaletteConverter::release();
|
||||
|
||||
@ -347,15 +338,16 @@ HRESULT RealPrimarySurface::restore()
|
||||
return g_frontBuffer->Restore(g_frontBuffer);
|
||||
}
|
||||
|
||||
void RealPrimarySurface::setClipper(LPDIRECTDRAWCLIPPER clipper)
|
||||
void RealPrimarySurface::setClipper(CompatWeakPtr<IDirectDrawClipper> clipper)
|
||||
{
|
||||
CompatPaletteConverter::setClipper(clipper);
|
||||
|
||||
HRESULT result = g_frontBuffer->SetClipper(g_frontBuffer, clipper);
|
||||
if (FAILED(result))
|
||||
{
|
||||
LOG_ONCE("Failed to set clipper on the real primary surface: " << result);
|
||||
return;
|
||||
}
|
||||
CompatPaletteConverter::setClipper(clipper);
|
||||
g_clipper = clipper;
|
||||
}
|
||||
|
||||
void RealPrimarySurface::setPalette()
|
||||
@ -370,7 +362,7 @@ void RealPrimarySurface::setPalette()
|
||||
|
||||
void RealPrimarySurface::update()
|
||||
{
|
||||
if (!IsRectEmpty(&g_updateRect) && 0 == g_disableUpdateCount)
|
||||
if (!IsRectEmpty(&g_updateRect) && 0 == g_disableUpdateCount && (g_isFullScreen || g_clipper))
|
||||
{
|
||||
const long long qpcNow = Time::queryPerformanceCounter();
|
||||
if (Time::qpcToMs(qpcNow - g_qpcNextUpdate) >= 0)
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
static void release();
|
||||
static void removeUpdateThread();
|
||||
static HRESULT restore();
|
||||
static void setClipper(LPDIRECTDRAWCLIPPER clipper);
|
||||
static void setClipper(CompatWeakPtr<IDirectDrawClipper> clipper);
|
||||
static void setPalette();
|
||||
static void update();
|
||||
static void updatePalette(DWORD startingEntry, DWORD count);
|
||||
|
Loading…
x
Reference in New Issue
Block a user