From b54c8f6b9bf46bf93ac402468bda804e212a9c95 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Fri, 23 Mar 2007 12:47:19 +0000 Subject: [PATCH] Thank CodeMercenary (CodeMercenary at hotmail dot com) that provide ms ddk example driver code is wrong for how to write a graphice driver with dx support. he gave me input and provide the ddk example code is wrong. Now I change the desgin after correct infomations so it lead to even less overhead of code. svn path=/trunk/; revision=26157 --- reactos/subsystems/win32/win32k/ntddraw/dd.c | 57 +++++--------------- 1 file changed, 14 insertions(+), 43 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntddraw/dd.c b/reactos/subsystems/win32/win32k/ntddraw/dd.c index 6fc06296466..62b22e594cb 100644 --- a/reactos/subsystems/win32/win32k/ntddraw/dd.c +++ b/reactos/subsystems/win32/win32k/ntddraw/dd.c @@ -206,66 +206,37 @@ DWORD STDCALL NtGdiDdCreateSurface( pLocal = &phsurface->Local; pMore = &phsurface->More; pGlobal = &phsurface->Global; + /* FIXME we only support one surface for now */ phsurface->CreateSurfaceData.dwSCnt = 1; - - phsurface->lcllist[0] = 0; - phsurface->lcllist[1] = 0; - phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *) &phsurface->lcllist; + for (i = 0; i < phsurface->CreateSurfaceData.dwSCnt; i++) + { + phsurface->lcllist[i] = (PDD_SURFACE_LOCAL)pLocal; + pLocal->lpGbl = pGlobal; + pLocal->lpSurfMore = pMore; - i = 0; - // for (i = 0; i < phsurface->CreateSurfaceData.dwSCnt; i++) - //{ - phsurface->lcl.hDDSurface = (ULONG_PTR)myhSurface[i]; - phsurface->lcl.ddsCaps.dwCaps = pLocal->ddsCaps.dwCaps; - phsurface->lcl.dwFlags =pLocal->dwFlags; + /* FIXME ? + pLocal->lpAttachList; + pLocal->lpAttachListFrom; + */ + + /* FIXME a countup to next pLocal, pMore, pGlobal */ - phsurface->gpl.wWidth = pGlobal->wWidth; - phsurface->gpl.wHeight = pGlobal->wHeight; - phsurface->gpl.lPitch = pGlobal->lPitch; - phsurface->gpl.fpVidMem = pGlobal->fpVidMem; - phsurface->gpl.dwBlockSizeX = pGlobal->dwBlockSizeX; - phsurface->gpl.dwBlockSizeY = pGlobal->dwBlockSizeY; - RtlCopyMemory( &phsurface->gpl.ddpfSurface , &pGlobal->ddpfSurface, sizeof(DDPIXELFORMAT)); - - /* FIXME more ?? */ - if (pMore) - { - phsurface->more.ddsCapsEx.dwCaps2 = pMore->ddsCapsEx.dwCaps2; - phsurface->more.ddsCapsEx.dwCaps3 = pMore->ddsCapsEx.dwCaps3; - phsurface->more.ddsCapsEx.dwCaps4 = pMore->ddsCapsEx.dwCaps4; - phsurface->lcl.dbnOverlayNode.object_int = (LPDDRAWI_DDRAWSURFACE_INT)pMore->dwSurfaceHandle; - } - - phsurface->lcllist[0] = (PDD_SURFACE_LOCAL)&phsurface->lcl; - /* FIXME count up everthing to next position */ - // } + } /* FIXME support for more that one surface */ - DPRINT1("setup CreateSurfaceData \n"); /* setup DD_CREATESURFACEDATA CreateSurfaceData for the driver */ - phsurface->lcl.lpGbl = &phsurface->gpl; - phsurface->lcl.lpSurfMore = &phsurface->more; - - /* FIXME all phsurface->lcl should be in a array then add to lplpSList */ - //phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *)&phsurface->lcl; + phsurface->CreateSurfaceData.lplpSList = (PDD_SURFACE_LOCAL *) &phsurface->lcllist; phsurface->CreateSurfaceData.lpDDSurfaceDesc = &phsurface->desc; phsurface->CreateSurfaceData.CreateSurface = NULL; phsurface->CreateSurfaceData.ddRVal = DDERR_GENERIC; phsurface->CreateSurfaceData.lpDD = &pDirectDraw->Global; - /* is this correct the 3d drv whant this data */ - // phsurface->lcl.lpGbl->lpDD = &pDirectDraw->Global; - - - - /* the CreateSurface crash with lcl convering */ - DPRINT1("DDHAL_CB32_CREATESURFACE\n"); if ((pDirectDraw->DD.dwFlags & DDHAL_CB32_CREATESURFACE)) { DPRINT1("0x%04x",pDirectDraw->DD.CreateSurface);