mirror of
https://github.com/reactos/reactos.git
synced 2025-01-01 03:54:02 +00:00
partly implement DxEngSetHdevData
fixed DxEngGetHdevData protoype as well svn path=/trunk/; revision=31556
This commit is contained in:
parent
df1782995e
commit
dacc7315f3
3 changed files with 150 additions and 9 deletions
|
@ -45,6 +45,117 @@ DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface)
|
|||
return retVal;
|
||||
}
|
||||
|
||||
HANDLE
|
||||
STDCALL
|
||||
DxDdCreateDirectDrawObject(HDC hdc)
|
||||
{
|
||||
HANDLE hDirectDraw = NULL;
|
||||
DHPDEV hPdev; // PGDIDEVICE
|
||||
ULONG iDitherFormat;
|
||||
|
||||
DC *pDC; = gpEngFuncs[DXENG_INDEX_DxEngLockDC]();
|
||||
|
||||
if (pDC != NULL)
|
||||
{
|
||||
hPdev = gpEngFuncs[DXENG_INDEX_DxEngGetDCState](hdc, 3);
|
||||
|
||||
if (hPdev != 0)
|
||||
{
|
||||
/* Get DC display flag */
|
||||
if (gpEngFuncs[DXENG_INDEX_DxEngGetHdevData](hPdev, 12))
|
||||
{
|
||||
EDD_DEVLOCK(hdc, esi);
|
||||
|
||||
if (!gpEngFuncs[DXENG_INDEX_DxEngGetHdevData](hPdev,19))
|
||||
{
|
||||
CheckAgpHeaps( gpEngFuncs[DXENG_INDEX_DxEngGetHdevData](hPdev,7) );
|
||||
}
|
||||
|
||||
iDitherFormat = gpEngFuncs[DXENG_INDEX_DxEngGetHdevData](hPdev,2);
|
||||
|
||||
.text:00019FF1 cmp eax, 3
|
||||
.text:00019FF4 jb short loc_1A001
|
||||
|
||||
hDirectDraw = hDdCreateDirectDrawLocal(hPdev);
|
||||
|
||||
loc_1A001:
|
||||
if (hdc != NULL)
|
||||
{
|
||||
gpEngFuncs[DXENG_INDEX_DxEngUnlockHdev](hdc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gpEngFuncs[DXENG_INDEX_DxEngUnlockDC](pDC);
|
||||
}
|
||||
|
||||
return hDirectDraw;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int __stdcall hDdCreateDirectDrawLocal(HDEV hDEV)
|
||||
{
|
||||
int v1; // eax@1
|
||||
int v2; // edi@1
|
||||
int result; // eax@2
|
||||
int v4; // ebx@2
|
||||
struct HDD_OBJ__ *v5; // eax@5
|
||||
struct HDD_OBJ__ *v6; // esi@5
|
||||
int v7; // eax@1
|
||||
int v8; // eax@6
|
||||
int v9; // eax@6
|
||||
int v10; // eax@6
|
||||
int _EAX; // eax@6
|
||||
signed int _ECX; // ecx@6
|
||||
int v18; // [sp+8h] [bp-4h]@1
|
||||
|
||||
v18 = 0;
|
||||
v7 = gpEngFuncs[DXENG_INDEX_DxEngGetHdevData](hPdev,7);
|
||||
v2 = v7;
|
||||
v1 = *(_DWORD *)(v7 + 0x30);
|
||||
if ( v1 )
|
||||
{
|
||||
result = EngAllocMem(1, 4 * v1, 1885627463);
|
||||
v4 = result;
|
||||
if ( !result )
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
v4 = 0;
|
||||
}
|
||||
v5 = DdHmgAlloc(0x54u, 1u, 1u);
|
||||
v6 = v5;
|
||||
if ( v5 )
|
||||
{
|
||||
*((_DWORD *)v5 + 12) = *(_DWORD *)(v2 + 1448);
|
||||
*(_DWORD *)(v2 + 1448) = v5;
|
||||
*((_DWORD *)v5 + 8) = (char *)v5 + 28;
|
||||
*((_DWORD *)v5 + 7) = (char *)v5 + 28;
|
||||
*((_DWORD *)v5 + 9) = v2;
|
||||
*((_DWORD *)v5 + 4) = v2;
|
||||
v8 = PsGetCurrentThread();
|
||||
*((_DWORD *)v6 + 15) = PsGetThreadProcessId(v8);
|
||||
v9 = PsGetCurrentProcess();
|
||||
*((_DWORD *)v6 + 19) = 0;
|
||||
*((_DWORD *)v6 + 16) = v9;
|
||||
v10 = a1;
|
||||
*((_DWORD *)v6 + 17) = v4;
|
||||
(*(int (__cdecl **)(_DWORD))(gpEngFuncs + 108))(*(_DWORD *)v10);
|
||||
v18 = *(_DWORD *)v6;
|
||||
_EAX = (int)((char *)v6 + 8);
|
||||
_ECX = -1;
|
||||
__asm { lock xadd [eax], ecx }
|
||||
MapAllAgpHeaps(v6);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( v4 )
|
||||
EngFreeMem(v4);
|
||||
}
|
||||
return v18;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -81,6 +81,8 @@ BOOL DxEngSetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp, BOOL Unuse);
|
|||
BOOLEAN DxEngLockShareSem();
|
||||
BOOLEAN DxEngUnlockShareSem();
|
||||
BOOLEAN DxEngCleanDC(HDC hdc);
|
||||
DWORD DxEngGetHdevData(HDEV hdev, DWORD Index);
|
||||
BOOLEAN DxEngSetHdevData(HDEV hdev, DWORD Index, DWORD Save);
|
||||
|
||||
/* prototypes are not done yet, I need gather all my notes
|
||||
* to make them correct
|
||||
|
@ -96,8 +98,7 @@ DWORD DxEngUnreferenceHdev(DWORD x1);
|
|||
DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
||||
DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
||||
DWORD DxEngSpSpritesVisible(DWORD x1);
|
||||
DWORD DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl, DWORD Index);
|
||||
DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3);
|
||||
|
||||
DWORD DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3);
|
||||
DWORD DxEngDeleteDC(DWORD x1, DWORD x2);
|
||||
DWORD DxEngSetDCOwner(DWORD x1, DWORD x2);
|
||||
|
|
|
@ -374,20 +374,49 @@ DWORD DxEngSpSpritesVisible(DWORD x1)
|
|||
/* DxEngGetHdevData */
|
||||
/************************************************************************/
|
||||
DWORD
|
||||
DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl,
|
||||
DxEngGetHdevData(HDEV hdev,
|
||||
DWORD Index)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* DxEngSetHdevData */
|
||||
/************************************************************************/
|
||||
DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3)
|
||||
/*++
|
||||
* @name DxEngSetHdevData
|
||||
* @implemented
|
||||
*
|
||||
* The function DxEngSetHdevData sets a value in hdev
|
||||
|
||||
* @param HDEV hPDev
|
||||
* The hdev
|
||||
*
|
||||
* @param DWORD Index
|
||||
* Support only Index 8 it is a internal counter how many time hdev been lock and unlock
|
||||
*
|
||||
* @param DWORD Save
|
||||
* The value to be save to hdev internal counter
|
||||
*
|
||||
* @return
|
||||
* Returns TRUE for success, FALSE for failure
|
||||
*
|
||||
* @remarks.
|
||||
* ReactOS specfiy Not finish implement, I have not save the value into the hdev yet.
|
||||
*
|
||||
*--*/
|
||||
BOOLEAN
|
||||
DxEngSetHdevData(HDEV hdev,
|
||||
DWORD Index,
|
||||
DWORD Save)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
BOOL retVal = FALSE;
|
||||
if (Index == 8)
|
||||
{
|
||||
/* Counter how many time hdev been lock/unlock, we do not support it yet in ReactOS */
|
||||
DPRINT1("Warning not supproted yet\n");
|
||||
retVal = TRUE;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
|
Loading…
Reference in a new issue