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

Fixed crash due to setting clipper on uninitialized palette converter

This commit is contained in:
narzoul 2016-04-03 11:15:21 +02:00
parent 607eb5e25b
commit 9aa22534ab
4 changed files with 12 additions and 11 deletions

View File

@ -9,6 +9,7 @@
#include "CompatGdiPaintHandlers.h" #include "CompatGdiPaintHandlers.h"
#include "CompatGdiScrollFunctions.h" #include "CompatGdiScrollFunctions.h"
#include "CompatGdiWinProc.h" #include "CompatGdiWinProc.h"
#include "CompatPaletteConverter.h"
#include "CompatPrimarySurface.h" #include "CompatPrimarySurface.h"
#include "DDrawProcs.h" #include "DDrawProcs.h"
#include "RealPrimarySurface.h" #include "RealPrimarySurface.h"
@ -231,6 +232,7 @@ namespace CompatGdi
void installHooks() void installHooks()
{ {
InitializeCriticalSection(&g_gdiCriticalSection); InitializeCriticalSection(&g_gdiCriticalSection);
CompatPaletteConverter::init();
if (CompatGdiDcCache::init()) if (CompatGdiDcCache::init())
{ {
g_ddUnlockBeginEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); g_ddUnlockBeginEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);

View File

@ -87,7 +87,7 @@ namespace
namespace CompatPaletteConverter namespace CompatPaletteConverter
{ {
bool init() bool create()
{ {
if (CompatPrimarySurface::displayMode.pixelFormat.dwRGBBitCount > 8 && if (CompatPrimarySurface::displayMode.pixelFormat.dwRGBBitCount > 8 &&
RealPrimarySurface::s_surfaceDesc.ddpfPixelFormat.dwRGBBitCount > 8) RealPrimarySurface::s_surfaceDesc.ddpfPixelFormat.dwRGBBitCount > 8)
@ -95,14 +95,6 @@ namespace CompatPaletteConverter
return true; return true;
} }
static bool isFirstInit = true;
if (isFirstInit)
{
InitializeCriticalSection(&g_criticalSection);
initHalftonePalette();
isFirstInit = false;
}
void* bits = nullptr; void* bits = nullptr;
HBITMAP dib = createDibSection(bits); HBITMAP dib = createDibSection(bits);
if (!dib) if (!dib)
@ -136,6 +128,12 @@ namespace CompatPaletteConverter
return true; return true;
} }
void init()
{
InitializeCriticalSection(&g_criticalSection);
initHalftonePalette();
}
HDC lockDc() HDC lockDc()
{ {
EnterCriticalSection(&g_criticalSection); EnterCriticalSection(&g_criticalSection);

View File

@ -6,7 +6,8 @@
namespace CompatPaletteConverter namespace CompatPaletteConverter
{ {
bool init(); bool create();
void init();
HDC lockDc(); HDC lockDc();
IDirectDrawSurface7* lockSurface(); IDirectDrawSurface7* lockSurface();
void release(); void release();

View File

@ -187,7 +187,7 @@ HRESULT RealPrimarySurface::create(DirectDraw& dd)
s_surfaceDesc.dwSize = sizeof(s_surfaceDesc); s_surfaceDesc.dwSize = sizeof(s_surfaceDesc);
g_frontBuffer->lpVtbl->GetSurfaceDesc(g_frontBuffer, &s_surfaceDesc); g_frontBuffer->lpVtbl->GetSurfaceDesc(g_frontBuffer, &s_surfaceDesc);
if (!CompatPaletteConverter::init()) if (!CompatPaletteConverter::create())
{ {
g_frontBuffer->lpVtbl->Release(g_frontBuffer); g_frontBuffer->lpVtbl->Release(g_frontBuffer);
g_frontBuffer = nullptr; g_frontBuffer = nullptr;