mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 00:45:43 +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;
|
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 DxEngLockShareSem();
|
||||||
BOOLEAN DxEngUnlockShareSem();
|
BOOLEAN DxEngUnlockShareSem();
|
||||||
BOOLEAN DxEngCleanDC(HDC hdc);
|
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
|
/* prototypes are not done yet, I need gather all my notes
|
||||||
* to make them correct
|
* to make them correct
|
||||||
|
@ -96,8 +98,7 @@ DWORD DxEngUnreferenceHdev(DWORD x1);
|
||||||
DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
||||||
DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
|
||||||
DWORD DxEngSpSpritesVisible(DWORD x1);
|
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 DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3);
|
||||||
DWORD DxEngDeleteDC(DWORD x1, DWORD x2);
|
DWORD DxEngDeleteDC(DWORD x1, DWORD x2);
|
||||||
DWORD DxEngSetDCOwner(DWORD x1, DWORD x2);
|
DWORD DxEngSetDCOwner(DWORD x1, DWORD x2);
|
||||||
|
|
|
@ -374,20 +374,49 @@ DWORD DxEngSpSpritesVisible(DWORD x1)
|
||||||
/* DxEngGetHdevData */
|
/* DxEngGetHdevData */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
DWORD
|
DWORD
|
||||||
DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl,
|
DxEngGetHdevData(HDEV hdev,
|
||||||
DWORD Index)
|
DWORD Index)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/*++
|
||||||
/* DxEngSetHdevData */
|
* @name DxEngSetHdevData
|
||||||
/************************************************************************/
|
* @implemented
|
||||||
DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3)
|
*
|
||||||
|
* 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;
|
BOOL retVal = FALSE;
|
||||||
return 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…
Add table
Add a link
Reference in a new issue