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

Added AltTabFix=keepvidmemnp setting

This commit is contained in:
narzoul 2023-07-15 14:19:49 +02:00
parent 4c4051a844
commit f13e010834
3 changed files with 8 additions and 5 deletions

View File

@ -9,10 +9,10 @@ namespace Config
class AltTabFix : public EnumSetting class AltTabFix : public EnumSetting
{ {
public: public:
enum Values { OFF, KEEPVIDMEM }; enum Values { OFF, KEEPVIDMEM, KEEPVIDMEMNP };
AltTabFix() AltTabFix()
: EnumSetting("AltTabFix", "off", { "off", "keepvidmem" }) : EnumSetting("AltTabFix", "off", { "off", "keepvidmem", "keepvidmemnp" })
{ {
} }
}; };

View File

@ -215,17 +215,19 @@ namespace DDraw
LRESULT handleActivateApp(bool isActivated, std::function<LRESULT()> callOrigWndProc) LRESULT handleActivateApp(bool isActivated, std::function<LRESULT()> callOrigWndProc)
{ {
LOG_FUNC("handleActivateApp", isActivated, callOrigWndProc); LOG_FUNC("handleActivateApp", isActivated, callOrigWndProc);
if (Config::Settings::AltTabFix::KEEPVIDMEM != Config::altTabFix.get()) if (Config::Settings::AltTabFix::OFF == Config::altTabFix.get())
{ {
return LOG_RESULT(callOrigWndProc()); return LOG_RESULT(callOrigWndProc());
} }
DDraw::ScopedThreadLock lock; DDraw::ScopedThreadLock lock;
const bool keepPrimary = Config::Settings::AltTabFix::KEEPVIDMEM == Config::altTabFix.get();
std::set<DDRAWI_DDRAWSURFACE_LCL*> surfacesToRestore; std::set<DDRAWI_DDRAWSURFACE_LCL*> surfacesToRestore;
DDraw::Surface::enumSurfaces([&](const Surface& surface) DDraw::Surface::enumSurfaces([&](const Surface& surface)
{ {
auto lcl = DDraw::DirectDrawSurface::getInt(*surface.getDDS()).lpLcl; auto lcl = DDraw::DirectDrawSurface::getInt(*surface.getDDS()).lpLcl;
if (!(lcl->dwFlags & DDRAWISURF_INVALID)) if (!(lcl->dwFlags & DDRAWISURF_INVALID) &&
(keepPrimary || !(surface.getOrigCaps() & DDSCAPS_PRIMARYSURFACE)))
{ {
lcl->dwFlags |= DDRAWISURF_INVALID; lcl->dwFlags |= DDRAWISURF_INVALID;
surfacesToRestore.insert(lcl); surfacesToRestore.insert(lcl);
@ -245,7 +247,7 @@ namespace DDraw
} }
}); });
if (isActivated) if (isActivated && keepPrimary)
{ {
auto realPrimary(DDraw::RealPrimarySurface::getSurface()); auto realPrimary(DDraw::RealPrimarySurface::getSurface());
if (realPrimary) if (realPrimary)

View File

@ -38,6 +38,7 @@ namespace DDraw
static Surface* getSurface(TSurface& dds); static Surface* getSurface(TSurface& dds);
CompatWeakPtr<IDirectDrawSurface7> getDDS() const { return m_surface; }; CompatWeakPtr<IDirectDrawSurface7> getDDS() const { return m_surface; };
DWORD getOrigCaps() const { return m_origCaps; }
template <typename TSurface> template <typename TSurface>
SurfaceImpl<TSurface>* getImpl() const; SurfaceImpl<TSurface>* getImpl() const;