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:
parent
4c4051a844
commit
f13e010834
@ -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" })
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user