partly implement DxEngSetHdevData

fixed DxEngGetHdevData protoype as well

svn path=/trunk/; revision=31556
This commit is contained in:
Magnus Olsen 2008-01-02 09:37:05 +00:00
parent df1782995e
commit dacc7315f3
3 changed files with 150 additions and 9 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}
/************************************************************************/