mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-14 22:03:27 +01:00
Implement stub surface Blt, Lock and Unlock
This commit is contained in:
parent
437b3e9197
commit
4ffda7b73f
13
main.c
13
main.c
@ -72,19 +72,6 @@ HRESULT ddraw_CreatePalette(void *This, LPPALETTEENTRY DDColorArray, LPDIRECTDRA
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT ddraw_CreateSurface(void *This, LPDDSURFACEDESC DDSurfaceDesc, LPDIRECTDRAWSURFACE FAR *DDSurface, IUnknown FAR * unkOuter)
|
||||
{
|
||||
printf("DirectDraw::CreateSurface(This=%p, DDSurfaceDesc=%p, DDSurface=%p, unkOuter=%p)\n", This, DDSurfaceDesc, DDSurface, unkOuter);
|
||||
|
||||
fakeDirectDrawSurfaceObject *Surface = (fakeDirectDrawSurfaceObject *)malloc(sizeof(fakeDirectDrawSurfaceObject));
|
||||
Surface->Ref = 1;
|
||||
Surface->Functions = &siface;
|
||||
printf(" Surface = %p\n", Surface);
|
||||
*DDSurface = (LPDIRECTDRAWSURFACE)Surface;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT ddraw_SetCooperativeLevel(void *This, HWND hWnd, DWORD dwFlags)
|
||||
{
|
||||
printf("DirectDraw::SetCooperativeLevel(This=%p, hWnd=0x%08X, dwFlags=0x%08X)\n", This, (unsigned int)hWnd, (unsigned int)dwFlags);
|
||||
|
190
surface.c
190
surface.c
@ -15,24 +15,130 @@
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include "surface.h"
|
||||
|
||||
/* from main */
|
||||
HRESULT QueryInterface(void *This, REFIID riid, void **obj);
|
||||
ULONG AddRef(void *This);
|
||||
ULONG Release(void *This);
|
||||
HRESULT null();
|
||||
|
||||
void dump_surface_desc_flags(LPDDSURFACEDESC lpDDSurfaceDesc);
|
||||
|
||||
ULONG ddraw_surface_AddRef(void *_This)
|
||||
{
|
||||
fakeDirectDrawSurfaceObject *This = (fakeDirectDrawSurfaceObject *)_This;
|
||||
|
||||
printf("DirectDrawSurface::AddRef(This=%p)\n", This);
|
||||
This->Ref++;
|
||||
return This->Ref;
|
||||
}
|
||||
|
||||
ULONG ddraw_surface_Release(void *_This)
|
||||
{
|
||||
fakeDirectDrawSurfaceObject *This = (fakeDirectDrawSurfaceObject *)_This;
|
||||
|
||||
printf("DirectDrawSurface::Release(((fakeDirectDrawSurfaceObject *)This)=%p)\n", ((fakeDirectDrawSurfaceObject *)This));
|
||||
|
||||
This->Ref--;
|
||||
|
||||
if(This->Ref == 0)
|
||||
{
|
||||
if(This->surface)
|
||||
{
|
||||
free(This->surface);
|
||||
}
|
||||
free(This);
|
||||
return 0;
|
||||
}
|
||||
return This->Ref;
|
||||
}
|
||||
|
||||
HRESULT ddraw_CreateSurface(void *This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FAR *lpDDSurface, IUnknown FAR * unkOuter)
|
||||
{
|
||||
printf("DirectDraw::CreateSurface(This=%p, lpDDSurfaceDesc=%p, lpDDSurface=%p, unkOuter=%p)\n", This, lpDDSurfaceDesc, lpDDSurface, unkOuter);
|
||||
|
||||
dump_surface_desc_flags(lpDDSurfaceDesc);
|
||||
|
||||
printf(" lpDDSurfaceDesc->dwHeight: %d\n", (int)lpDDSurfaceDesc->dwHeight);
|
||||
printf(" lpDDSurfaceDesc->dwWidth: %d\n", (int)lpDDSurfaceDesc->dwWidth);
|
||||
|
||||
fakeDirectDrawSurfaceObject *Surface = (fakeDirectDrawSurfaceObject *)malloc(sizeof(fakeDirectDrawSurfaceObject));
|
||||
Surface->Functions = &siface;
|
||||
|
||||
/* private stuff */
|
||||
Surface->width = lpDDSurfaceDesc->dwWidth;
|
||||
Surface->height = lpDDSurfaceDesc->dwHeight;
|
||||
Surface->surface = NULL;
|
||||
|
||||
printf(" Surface = %p\n", Surface);
|
||||
|
||||
Surface->Ref = 0;
|
||||
ddraw_surface_AddRef(Surface);
|
||||
|
||||
*lpDDSurface = (LPDIRECTDRAWSURFACE)Surface;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT ddraw_surface_Blt(void *This, LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx)
|
||||
{
|
||||
printf("DirectDrawSurface::Blt(This=%p, lpDestRect=%p, lpDDSrcSurface=%p, lpSrcRect=%p, dwFlags=%d, lpDDBltFx=%p)\n", This, lpDestRect, lpDDSrcSurface, lpSrcRect, (int)dwFlags, lpDDBltFx);
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT ddraw_surface_Lock(void *_This, LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent)
|
||||
{
|
||||
fakeDirectDrawSurfaceObject *This = (fakeDirectDrawSurfaceObject *)_This;
|
||||
|
||||
printf("DirectDrawSurface::Lock(This=%p, lpDestRect=%p, lpDDSurfaceDesc=%p, dwFlags=%d, hEvent=%p)\n", This, lpDestRect, lpDDSurfaceDesc, (int)dwFlags, hEvent);
|
||||
|
||||
if(dwFlags & DDLOCK_SURFACEMEMORYPTR)
|
||||
{
|
||||
printf(" dwFlags: DDLOCK_SURFACEMEMORYPTR\n");
|
||||
}
|
||||
if(dwFlags & DDLOCK_WAIT)
|
||||
{
|
||||
printf(" dwFlags: DDLOCK_WAIT\n");
|
||||
}
|
||||
if(dwFlags & DDLOCK_EVENT)
|
||||
{
|
||||
printf(" dwFlags: DDLOCK_EVENT\n");
|
||||
}
|
||||
if(dwFlags & DDLOCK_READONLY)
|
||||
{
|
||||
printf(" dwFlags: DDLOCK_READONLY\n");
|
||||
}
|
||||
if(dwFlags & DDLOCK_WRITEONLY)
|
||||
{
|
||||
printf(" dwFlags: DDLOCK_WRITEONLY\n");
|
||||
}
|
||||
|
||||
This->surface = malloc(This->width * This->height);
|
||||
|
||||
lpDDSurfaceDesc->dwSize = sizeof(DDSURFACEDESC);
|
||||
lpDDSurfaceDesc->dwFlags = DDSD_LPSURFACE;
|
||||
lpDDSurfaceDesc->lpSurface = This->surface;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT ddraw_surface_Unlock(void *This, LPVOID lpRect)
|
||||
{
|
||||
printf("DirectDrawSurface::Unlock(This=%p, lpRect=%p)\n", This, lpRect);
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
fakeDirectDrawSurface siface =
|
||||
{
|
||||
/* IUnknown */
|
||||
QueryInterface,
|
||||
AddRef,
|
||||
Release,
|
||||
ddraw_surface_AddRef,
|
||||
ddraw_surface_Release,
|
||||
/* IDirectDrawSurface */
|
||||
null, // ddraw_surface_AddAttachedSurface
|
||||
null, // ddraw_surface_AddOverlayDirtyRect
|
||||
null, // ddraw_surface_Blt
|
||||
ddraw_surface_Blt,
|
||||
null, // ddraw_surface_BltBatch
|
||||
null, // ddraw_surface_BltFast
|
||||
null, // ddraw_surface_DeleteAttachedSurface
|
||||
@ -52,15 +158,87 @@ fakeDirectDrawSurface siface =
|
||||
null, // ddraw_surface_GetSurfaceDesc
|
||||
null, // ddraw_surface_Initialize
|
||||
null, // ddraw_surface_IsLost
|
||||
null, // ddraw_surface_Lock
|
||||
ddraw_surface_Lock,
|
||||
null, // ddraw_surface_ReleaseDC
|
||||
null, // ddraw_surface_Restore
|
||||
null, // ddraw_surface_SetClipper
|
||||
null, // ddraw_surface_SetColorKey
|
||||
null, // ddraw_surface_SetOverlayPosition
|
||||
null, // ddraw_surface_SetPalette
|
||||
null, // ddraw_surface_Unlock
|
||||
ddraw_surface_Unlock,
|
||||
null, // ddraw_surface_UpdateOverlay
|
||||
null, // ddraw_surface_UpdateOverlayDisplay
|
||||
null // ddraw_surface_UpdateOverlayZOrder
|
||||
};
|
||||
|
||||
void dump_surface_desc_flags(LPDDSURFACEDESC lpDDSurfaceDesc)
|
||||
{
|
||||
if(lpDDSurfaceDesc->dwFlags & DDSD_CAPS)
|
||||
{
|
||||
printf(" lpDDSurfaceDesc->dwFlags: DDSD_CAPS\n");
|
||||
}
|
||||
if(lpDDSurfaceDesc->dwFlags & DDSD_HEIGHT)
|
||||
{
|
||||
printf(" lpDDSurfaceDesc->dwFlags: DDSD_HEIGHT\n");
|
||||
}
|
||||
if(lpDDSurfaceDesc->dwFlags & DDSD_WIDTH)
|
||||
{
|
||||
printf(" lpDDSurfaceDesc->dwFlags: DDSD_WIDTH\n");
|
||||
}
|
||||
if(lpDDSurfaceDesc->dwFlags & DDSD_PITCH)
|
||||
{
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include <windows.h>
|
||||
#include "ddraw.h"
|
||||
|
||||
HRESULT ddraw_CreateSurface(void *This, LPDDSURFACEDESC DDSurfaceDesc, LPDIRECTDRAWSURFACE FAR *DDSurface, IUnknown FAR * unkOuter);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* IUnknown */
|
||||
@ -70,6 +72,10 @@ typedef struct
|
||||
{
|
||||
fakeDirectDrawSurface *Functions;
|
||||
|
||||
DWORD width;
|
||||
DWORD height;
|
||||
void *surface;
|
||||
|
||||
ULONG Ref;
|
||||
|
||||
} fakeDirectDrawSurfaceObject;
|
||||
|
Loading…
x
Reference in New Issue
Block a user