You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
6.3 KiB
273 lines
6.3 KiB
|
|
/*********************************Class************************************\
|
|
* class EDD_DEVLOCK
|
|
*
|
|
* Simple wrapper for the DEVLOCK that automatically unlocks when it
|
|
* goes out of scope, so that we don't forget.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_DEVLOCK
|
|
{
|
|
private:
|
|
HDEV _hdev;
|
|
|
|
public:
|
|
EDD_DEVLOCK(EDD_DIRECTDRAW_GLOBAL* peDirectDrawGlobal)
|
|
{
|
|
_hdev = peDirectDrawGlobal->hdev;
|
|
DxEngLockHdev(_hdev);
|
|
}
|
|
EDD_DEVLOCK(HDEV hdev)
|
|
{
|
|
_hdev = hdev;
|
|
DxEngLockHdev(_hdev);
|
|
}
|
|
EDD_DEVLOCK(VOID)
|
|
{
|
|
_hdev = NULL;
|
|
}
|
|
~EDD_DEVLOCK()
|
|
{
|
|
if (_hdev) DxEngUnlockHdev(_hdev);
|
|
}
|
|
VOID vLockDevice()
|
|
{
|
|
DxEngLockHdev(_hdev);
|
|
}
|
|
VOID vUnlockDevice()
|
|
{
|
|
DxEngUnlockHdev(_hdev);
|
|
}
|
|
VOID vUpdateDevice(EDD_DIRECTDRAW_GLOBAL* peDirectDrawGlobal)
|
|
{
|
|
ASSERTGDI(!DxEngIsHdevLockedByCurrentThread(_hdev),
|
|
"vUpdateDdGlobal - Old Devlock is not released");
|
|
|
|
_hdev = peDirectDrawGlobal->hdev;
|
|
}
|
|
};
|
|
|
|
/*********************************Class************************************\
|
|
* class EDD_SHAREDEVLOCK
|
|
*
|
|
* Simple wrapper for the DEVLOCK and SHAREDEVLOCK that automatically
|
|
* unlocks them when it goes out of scope, so that we don't forget.
|
|
*
|
|
* This also ensures that we lock and unlock them in proper order.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_SHAREDEVLOCK
|
|
{
|
|
private:
|
|
HDEV _hdev;
|
|
|
|
public:
|
|
EDD_SHAREDEVLOCK(EDD_DIRECTDRAW_GLOBAL* peDirectDrawGlobal)
|
|
{
|
|
_hdev = peDirectDrawGlobal->hdev;
|
|
DxEngLockShareSem();
|
|
DxEngLockHdev(_hdev);
|
|
}
|
|
~EDD_SHAREDEVLOCK()
|
|
{
|
|
DxEngUnlockHdev(_hdev);
|
|
DxEngUnlockShareSem();
|
|
}
|
|
VOID vLockDevice()
|
|
{
|
|
DxEngLockHdev(_hdev);
|
|
}
|
|
VOID vUnlockDevice()
|
|
{
|
|
DxEngUnlockHdev(_hdev);
|
|
}
|
|
VOID vUpdateDevice(EDD_DIRECTDRAW_GLOBAL* peDirectDrawGlobal)
|
|
{
|
|
ASSERTGDI(!DxEngIsHdevLockedByCurrentThread(_hdev),
|
|
"vUpdateDdGlobal - Old Devlock is not released");
|
|
|
|
_hdev = peDirectDrawGlobal->hdev;
|
|
}
|
|
};
|
|
|
|
class EDD_SHARELOCK
|
|
{
|
|
private:
|
|
BOOL bLocked;
|
|
|
|
public:
|
|
VOID vLock()
|
|
{
|
|
DxEngLockShareSem();
|
|
bLocked = TRUE;
|
|
}
|
|
EDD_SHARELOCK(BOOL b)
|
|
{
|
|
bLocked = FALSE;
|
|
if (b)
|
|
{
|
|
vLock();
|
|
}
|
|
}
|
|
~EDD_SHARELOCK()
|
|
{
|
|
if (bLocked)
|
|
{
|
|
DxEngUnlockShareSem();
|
|
}
|
|
}
|
|
};
|
|
|
|
/*********************************Class************************************\
|
|
* class EDD_LOCK_DIRECTDRAW
|
|
*
|
|
* Simple wrapper for DirectDraw surface objects that automatically unlocks
|
|
* the object when it goes out of scope, so that we don't forget.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_LOCK_DIRECTDRAW
|
|
{
|
|
private:
|
|
EDD_DIRECTDRAW_LOCAL *m_peSurface;
|
|
|
|
public:
|
|
EDD_LOCK_DIRECTDRAW()
|
|
{
|
|
m_peSurface = NULL;
|
|
}
|
|
EDD_DIRECTDRAW_LOCAL* peLock(HANDLE h)
|
|
{
|
|
return(m_peSurface = (EDD_DIRECTDRAW_LOCAL*) DdHmgLock((HDD_OBJ) h, DD_DIRECTDRAW_TYPE, FALSE));
|
|
}
|
|
~EDD_LOCK_DIRECTDRAW()
|
|
{
|
|
if (m_peSurface != NULL)
|
|
{
|
|
DEC_EXCLUSIVE_REF_CNT(m_peSurface); // Do an HmgUnlock
|
|
}
|
|
}
|
|
};
|
|
|
|
/*********************************Class************************************\
|
|
* class EDD_LOCK_SURFACE
|
|
*
|
|
* Simple wrapper for DirectDraw surface objects that automatically unlocks
|
|
* the object when it goes out of scope, so that we don't forget.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_LOCK_SURFACE
|
|
{
|
|
private:
|
|
EDD_SURFACE *m_peSurface;
|
|
|
|
public:
|
|
EDD_LOCK_SURFACE()
|
|
{
|
|
m_peSurface = NULL;
|
|
}
|
|
EDD_SURFACE* peLock(HANDLE h)
|
|
{
|
|
return(m_peSurface = (EDD_SURFACE*) DdHmgLock((HDD_OBJ) h, DD_SURFACE_TYPE, FALSE));
|
|
}
|
|
void vUnlockNoNullSet(void)
|
|
{
|
|
if (m_peSurface != NULL)
|
|
{
|
|
DEC_EXCLUSIVE_REF_CNT(m_peSurface); // Do an HmgUnlock
|
|
}
|
|
}
|
|
void vUnlock(void)
|
|
{
|
|
vUnlockNoNullSet();
|
|
m_peSurface = NULL;
|
|
}
|
|
~EDD_LOCK_SURFACE()
|
|
{
|
|
vUnlockNoNullSet();
|
|
}
|
|
};
|
|
|
|
/*********************************Class************************************\
|
|
* class EDD_LOCK_VIDEOPORT
|
|
*
|
|
* Simple wrapper for DirectDraw videoport objects that automatically unlocks
|
|
* the object when it goes out of scope, so that we don't forget.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_LOCK_VIDEOPORT
|
|
{
|
|
private:
|
|
EDD_VIDEOPORT *m_peSurface;
|
|
|
|
public:
|
|
EDD_LOCK_VIDEOPORT()
|
|
{
|
|
m_peSurface = NULL;
|
|
}
|
|
EDD_VIDEOPORT* peLock(HANDLE h)
|
|
{
|
|
return(m_peSurface = (EDD_VIDEOPORT*) DdHmgLock((HDD_OBJ) h, DD_VIDEOPORT_TYPE, FALSE));
|
|
}
|
|
void vUnlockNoNullSet(void)
|
|
{
|
|
if (m_peSurface != NULL)
|
|
{
|
|
DEC_EXCLUSIVE_REF_CNT(m_peSurface); // Do an HmgUnlock
|
|
}
|
|
}
|
|
void vUnlock(void)
|
|
{
|
|
vUnlockNoNullSet();
|
|
m_peSurface = NULL;
|
|
}
|
|
~EDD_LOCK_VIDEOPORT()
|
|
{
|
|
vUnlockNoNullSet();
|
|
}
|
|
};
|
|
|
|
/*********************************Class************************************\
|
|
* class EDD_LOCK_MOTIONCOMP
|
|
*
|
|
* Simple wrapper for DirectDraw motion comp objects that automatically unlocks
|
|
* the object when it goes out of scope, so that we don't forget.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
class EDD_LOCK_MOTIONCOMP
|
|
{
|
|
private:
|
|
EDD_MOTIONCOMP *m_peSurface;
|
|
|
|
public:
|
|
EDD_LOCK_MOTIONCOMP()
|
|
{
|
|
m_peSurface = NULL;
|
|
}
|
|
EDD_MOTIONCOMP* peLock(HANDLE h)
|
|
{
|
|
return(m_peSurface = (EDD_MOTIONCOMP*) DdHmgLock((HDD_OBJ) h, DD_MOTIONCOMP_TYPE, FALSE));
|
|
}
|
|
void vUnlockNoNullSet(void)
|
|
{
|
|
if (m_peSurface != NULL)
|
|
{
|
|
DEC_EXCLUSIVE_REF_CNT(m_peSurface); // Do an HmgUnlock
|
|
}
|
|
}
|
|
void vUnlock(void)
|
|
{
|
|
vUnlockNoNullSet();
|
|
m_peSurface = NULL;
|
|
}
|
|
~EDD_LOCK_MOTIONCOMP()
|
|
{
|
|
vUnlockNoNullSet();
|
|
}
|
|
};
|
|
|