From a93dd3afa961baf95017bf6fc79d3fbe812b34e5 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 9 Apr 2006 11:53:23 +0000 Subject: [PATCH] Implement frist HEL Callback HelDdCanCreateSurface Fix minors bugs there and there svn path=/trunk/; revision=21525 --- reactos/dll/directx/ddraw/ddraw.rbuild | 1 + reactos/dll/directx/ddraw/hal/surface_hal.c | 29 +++++++++++---- reactos/dll/directx/ddraw/main/ddraw_main.c | 38 ++++++++++++++++++-- reactos/dll/directx/ddraw/rosdraw.h | 4 +++ reactos/dll/directx/ddraw/soft/ddraw_hel.c | 5 +++ reactos/dll/directx/ddraw/soft/surface_hel.c | 4 +++ 6 files changed, 71 insertions(+), 10 deletions(-) diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index 29ed5af929e..1b9bcb2cf70 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -37,6 +37,7 @@ ddraw_hel.c surface_hel.c + surface_callbacks_hel.c diff --git a/reactos/dll/directx/ddraw/hal/surface_hal.c b/reactos/dll/directx/ddraw/hal/surface_hal.c index ae92639f312..fdc2cc2b35b 100644 --- a/reactos/dll/directx/ddraw/hal/surface_hal.c +++ b/reactos/dll/directx/ddraw/hal/surface_hal.c @@ -22,8 +22,16 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; - mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; - + + if (This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CANCREATESURFACE) + { + mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; + } + else + { + mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HELDD.CanCreateSurface; + } + mDdCreateSurface.lpDD = &This->mDDrawGlobal; mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface; @@ -335,15 +343,22 @@ HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURF Lock.Lock = This->owner->mCallbacks.HALDDSurface.Lock; Lock.dwFlags = flags; Lock.lpDDSurface = This->Surf->mpPrimaryLocals[0]; - Lock.lpDD = &This->owner->mDDrawGlobal; - // FIXME lpSurfData - //Lock.lpSurfData = + Lock.lpDD = &This->owner->mDDrawGlobal; + Lock.lpSurfData = NULL; - if (This->owner->mCallbacks.HALDDSurface.Lock(&Lock)!= DDHAL_DRIVER_NOTHANDLED) + if (This->owner->mCallbacks.HALDDSurface.Lock(&Lock)!= DDHAL_DRIVER_HANDLED) { return Lock.ddRVal; } - // FIXME LPDDSURFACEDESC2 + + RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2)); + memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC2); + + pDDSD->lpSurface = Lock.lpSurfData; + + + // FIXME some things is wrong it does not show the data on screen ?? return DD_OK; } diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index 481f88d18db..778b31b00ed 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -10,10 +10,11 @@ #include "rosdraw.h" -static const DDPIXELFORMAT pixelformats[] = +const DDPIXELFORMAT pixelformats[] = { /* 8bpp paletted */ - { sizeof(DDPIXELFORMAT), DDPF_RGB|DDPF_PALETTEINDEXED8, 0, { 8 } }, + { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, { 24 }, { 0xFF0000 }, + { 0x00FF00 }, { 0x0000FF } }, /* 15bpp 5/5/5 */ { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, { 16 }, { 0x7C00 }, { 0x3E0 }, { 0x1F } }, @@ -28,6 +29,37 @@ static const DDPIXELFORMAT pixelformats[] = { 0x00FF00 }, { 0x0000FF } } }; +const DWORD pixelformatsCount = sizeof(pixelformats) / sizeof(DDPIXELFORMAT); + +/* more surface format not adding it */ + /* 4 bit paletted 0 */ + // sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_PALETTEINDEXED4, 0, 4, 0x00, 0x00, 0x00, 0x00 + + ///* 8bpp paletted 1 */ + //{sizeof(DDPIXELFORMAT), DDPF_RGB|DDPF_PALETTEINDEXED8, 0, 8, 0, 0, 0, 0}, + + ///* 15bpp 5:5:5 RGB 2 */ + //{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x7c00, 0x03e0, 0x001f, 0}, + + ///* 15bpp 1:5:5:5 ARGB 3 */ + //{sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS, 0, 16, 0x7c00, 0x03e0, 0x001f, 0x8000}, + + ///* 16bpp 5:6:5 RGB 4 */ + //{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0xf800, 0x07e0, 0x001f, 0} + + ///* 16bpp 4:4:4:4 ARGB 5 */ + //{sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS,´0, 16, 0x0f00, 0x00f0, 0x000f, 0xf000}, + + /* 24bpp 8/8/8 RGB 6 */ + // {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24 , 0x00FF0000, 0x0000FF00 , 0x000000FF, 0 }, + + /* 32bpp 8:8:8 RGB 7 */ + // {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0}, + + /* 32bpp 8:8:8:8 ARGB 8*/ + // {sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000} + + /* @@ -625,7 +657,7 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla break; case 32: - memcpy(&desc_callback.ddpfPixelFormat,&pixelformats[3],sizeof(DDPIXELFORMAT)); + memcpy(&desc_callback.ddpfPixelFormat,&pixelformats[4],sizeof(DDPIXELFORMAT)); break; default: diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 178865ed992..bfee438faed 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -187,6 +187,10 @@ HRESULT Hel_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) HRESULT Hel_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 override, DWORD dwFlags); HRESULT Hel_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags); +/* HEL CALLBACK */ +DWORD CALLBACK HelDdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA pccsd); + + /* Setting for HEL should be move to ros special reg key ? */ /* setup how much graphic memory should hel be limit, set it now to 64MB */ diff --git a/reactos/dll/directx/ddraw/soft/ddraw_hel.c b/reactos/dll/directx/ddraw/soft/ddraw_hel.c index fb1804ff565..0bc8e94b19a 100644 --- a/reactos/dll/directx/ddraw/soft/ddraw_hel.c +++ b/reactos/dll/directx/ddraw/soft/ddraw_hel.c @@ -18,6 +18,11 @@ HRESULT Hel_DirectDraw_Initialize (LPDIRECTDRAW7 iface) This->HELMemoryAvilable = HEL_GRAPHIC_MEMORY_MAX; + + This->mCallbacks.HELDD.dwFlags = DDHAL_CB32_CANCREATESURFACE; + This->mCallbacks.HELDD.CanCreateSurface = HelDdCanCreateSurface; + + return DD_OK; } diff --git a/reactos/dll/directx/ddraw/soft/surface_hel.c b/reactos/dll/directx/ddraw/soft/surface_hel.c index 1e6aea649a7..2fab1495d4c 100644 --- a/reactos/dll/directx/ddraw/soft/surface_hel.c +++ b/reactos/dll/directx/ddraw/soft/surface_hel.c @@ -56,3 +56,7 @@ HRESULT Hel_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD + + + +