diff --git a/surface.c b/surface.c index 14cff6f..1e98eda 100644 --- a/surface.c +++ b/surface.c @@ -25,7 +25,8 @@ HRESULT QueryInterface(void *This, REFIID riid, void **obj); ULONG AddRef(void *This); HRESULT null(); -void dump_surface_desc_flags(LPDDSURFACEDESC lpDDSurfaceDesc); +void dump_ddsd(DWORD); +void dump_ddscaps(DWORD); ULONG ddraw_surface_AddRef(void *_This) { @@ -62,30 +63,27 @@ HRESULT ddraw_CreateSurface(void *_This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRE printf("DirectDraw::CreateSurface(This=%p, lpDDSurfaceDesc=%p, lpDDSurface=%p, unkOuter=%p)\n", This, lpDDSurfaceDesc, lpDDSurface, unkOuter); - dump_surface_desc_flags(lpDDSurfaceDesc); + dump_ddsd(lpDDSurfaceDesc->dwFlags); fakeDirectDrawSurfaceObject *Surface = (fakeDirectDrawSurfaceObject *)malloc(sizeof(fakeDirectDrawSurfaceObject)); + Surface->Functions = &siface; + + /* private stuff */ + Surface->bpp = This->bpp; + Surface->surface = NULL; + Surface->caps = 0; + if(lpDDSurfaceDesc->dwFlags & DDSD_CAPS) { if(lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) { - printf(" DDSCAPS_PRIMARYSURFACE\n"); Surface->width = This->width; Surface->height = This->height; } - if(lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) - { - printf(" DDSCAPS_OFFSCREENPLAIN\n"); - } - if(lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) - { - printf(" DDSCAPS_VIDEOMEMORY\n"); - } - if(lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_LOCALVIDMEM) - { - printf(" DDSCAPS_LOCALVIDMEM\n"); - } + + dump_ddscaps(lpDDSurfaceDesc->ddsCaps.dwCaps); + Surface->caps = lpDDSurfaceDesc->ddsCaps.dwCaps; } if( !(lpDDSurfaceDesc->dwFlags & DDSD_CAPS) || !(lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) ) @@ -94,12 +92,6 @@ HRESULT ddraw_CreateSurface(void *_This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRE Surface->height = lpDDSurfaceDesc->dwHeight; } - Surface->Functions = &siface; - - /* private stuff */ - Surface->bpp = This->bpp; - Surface->surface = NULL; - if(Surface->width && Surface->height) { Surface->surface = malloc(Surface->width * Surface->height * Surface->bpp / 8); @@ -107,11 +99,11 @@ HRESULT ddraw_CreateSurface(void *_This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRE printf(" Surface = %p (%dx%d@%d)\n", Surface, (int)Surface->width, (int)Surface->height, (int)Surface->bpp); + *lpDDSurface = (LPDIRECTDRAWSURFACE)Surface; + Surface->Ref = 0; ddraw_surface_AddRef(Surface); - *lpDDSurface = (LPDIRECTDRAWSURFACE)Surface; - return DD_OK; } @@ -129,8 +121,9 @@ HRESULT ddraw_surface_Blt(void *This, LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpD HRESULT ddraw_surface_GetCaps(void *_This, LPDDSCAPS lpDDSCaps) { + fakeDirectDrawSurfaceObject *This = (fakeDirectDrawSurfaceObject *)_This; printf("DirectDrawSurface::GetCaps(This=%p, lpDDSCaps=%p)\n", _This, lpDDSCaps); - lpDDSCaps->dwCaps = 0x00000000l; + lpDDSCaps->dwCaps = This->caps; return DD_OK; } @@ -228,74 +221,94 @@ fakeDirectDrawSurface siface = null // ddraw_surface_UpdateOverlayZOrder }; -void dump_surface_desc_flags(LPDDSURFACEDESC lpDDSurfaceDesc) +void dump_ddscaps(DWORD dwCaps) { - if(lpDDSurfaceDesc->dwFlags & DDSD_CAPS) + if(dwCaps & DDSCAPS_PRIMARYSURFACE) { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_CAPS\n"); + printf(" DDSCAPS_PRIMARYSURFACE\n"); } - if(lpDDSurfaceDesc->dwFlags & DDSD_HEIGHT) + if(dwCaps & DDSCAPS_OFFSCREENPLAIN) { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_HEIGHT\n"); + printf(" DDSCAPS_OFFSCREENPLAIN\n"); } - if(lpDDSurfaceDesc->dwFlags & DDSD_WIDTH) + if(dwCaps & DDSCAPS_VIDEOMEMORY) { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_WIDTH\n"); + printf(" DDSCAPS_VIDEOMEMORY\n"); } - if(lpDDSurfaceDesc->dwFlags & DDSD_PITCH) + if(dwCaps & DDSCAPS_LOCALVIDMEM) { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_PITCH\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_BACKBUFFERCOUNT) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_BACKBUFFERCOUNT\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_ZBUFFERBITDEPTH) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_ZBUFFERBITDEPTH\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_ALPHABITDEPTH) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_ALPHABITDEPTH\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_LPSURFACE) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_LPSURFACE\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_PIXELFORMAT) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_PIXELFORMAT\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_CKDESTOVERLAY) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_CKDESTOVERLAY\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_CKDESTBLT) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_CKDESTBLT\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_CKSRCOVERLAY) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_CKSRCOVERLAY\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_CKSRCBLT) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_CKSRCBLT\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_MIPMAPCOUNT) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_MIPMAPCOUNT\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_REFRESHRATE) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_REFRESHRATE\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_LINEARSIZE) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_LINEARSIZE\n"); - } - if(lpDDSurfaceDesc->dwFlags & DDSD_ALL) - { - printf(" lpDDSurfaceDesc->dwFlags: DDSD_ALL\n"); + printf(" DDSCAPS_LOCALVIDMEM\n"); + } +} + +void dump_ddsd(DWORD dwFlags) +{ + if(dwFlags & DDSD_CAPS) + { + printf(" DDSD_CAPS\n"); + } + if(dwFlags & DDSD_HEIGHT) + { + printf(" DDSD_HEIGHT\n"); + } + if(dwFlags & DDSD_WIDTH) + { + printf(" DDSD_WIDTH\n"); + } + if(dwFlags & DDSD_PITCH) + { + printf(" DDSD_PITCH\n"); + } + if(dwFlags & DDSD_BACKBUFFERCOUNT) + { + printf(" DDSD_BACKBUFFERCOUNT\n"); + } + if(dwFlags & DDSD_ZBUFFERBITDEPTH) + { + printf(" DDSD_ZBUFFERBITDEPTH\n"); + } + if(dwFlags & DDSD_ALPHABITDEPTH) + { + printf(" DDSD_ALPHABITDEPTH\n"); + } + if(dwFlags & DDSD_LPSURFACE) + { + printf(" DDSD_LPSURFACE\n"); + } + if(dwFlags & DDSD_PIXELFORMAT) + { + printf(" DDSD_PIXELFORMAT\n"); + } + if(dwFlags & DDSD_CKDESTOVERLAY) + { + printf(" DDSD_CKDESTOVERLAY\n"); + } + if(dwFlags & DDSD_CKDESTBLT) + { + printf(" DDSD_CKDESTBLT\n"); + } + if(dwFlags & DDSD_CKSRCOVERLAY) + { + printf(" DDSD_CKSRCOVERLAY\n"); + } + if(dwFlags & DDSD_CKSRCBLT) + { + printf(" DDSD_CKSRCBLT\n"); + } + if(dwFlags & DDSD_MIPMAPCOUNT) + { + printf(" DDSD_MIPMAPCOUNT\n"); + } + if(dwFlags & DDSD_REFRESHRATE) + { + printf(" DDSD_REFRESHRATE\n"); + } + if(dwFlags & DDSD_LINEARSIZE) + { + printf(" DDSD_LINEARSIZE\n"); + } + if(dwFlags & DDSD_ALL) + { + printf(" DDSD_ALL\n"); } } diff --git a/surface.h b/surface.h index 8433533..5fca809 100644 --- a/surface.h +++ b/surface.h @@ -72,6 +72,7 @@ typedef struct DWORD width; DWORD height; DWORD bpp; + DWORD caps; void *surface; ULONG Ref;