mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
make sure only 8bit video modes are used + add some more debugging code
This commit is contained in:
parent
8f394009b1
commit
d79b2086cc
24
src/main.c
24
src/main.c
@ -169,8 +169,8 @@ HRESULT __stdcall ddraw_EnumDisplayModes(IDirectDrawImpl *This, DWORD dwFlags, L
|
||||
s.dwWidth = m.dmPelsWidth;
|
||||
s.dwRefreshRate = m.dmDisplayFrequency;
|
||||
s.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||
s.ddpfPixelFormat.dwFlags = m.dmBitsPerPel == 8 ? DDPF_PALETTEINDEXED8 : DDPF_RGB;
|
||||
s.ddpfPixelFormat.dwRGBBitCount = m.dmBitsPerPel;
|
||||
s.ddpfPixelFormat.dwFlags = DDPF_PALETTEINDEXED8 | DDPF_RGB;
|
||||
s.ddpfPixelFormat.dwRGBBitCount = 8;
|
||||
|
||||
if (lpEnumModesCallback(&s, lpContext) == DDENUMRET_CANCEL)
|
||||
{
|
||||
@ -255,9 +255,10 @@ HRESULT __stdcall ddraw_GetScanLine(IDirectDrawImpl *This, LPDWORD a)
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT __stdcall ddraw_GetVerticalBlankStatus(IDirectDrawImpl *This, LPBOOL a)
|
||||
HRESULT __stdcall ddraw_GetVerticalBlankStatus(IDirectDrawImpl *This, LPBOOL lpbIsInVB)
|
||||
{
|
||||
printf("DirectDraw::GetVerticalBlankStatus(This=%p, ...) ???\n", This);
|
||||
*lpbIsInVB = TRUE;
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
@ -318,6 +319,9 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
||||
{
|
||||
printf("DirectDraw::SetDisplayMode(This=%p, width=%d, height=%d, bpp=%d)\n", This, (unsigned int)width, (unsigned int)height, (unsigned int)bpp);
|
||||
|
||||
if (bpp != 8)
|
||||
return DDERR_INVALIDMODE;
|
||||
|
||||
if (This->render.thread)
|
||||
{
|
||||
EnterCriticalSection(&This->cs);
|
||||
@ -1205,6 +1209,20 @@ struct IDirectDrawImplVtbl iface =
|
||||
HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACK lpCallback, LPVOID lpContext)
|
||||
{
|
||||
printf("DirectDrawEnumerateA(lpCallback=%p, lpContext=%p) ???\n", lpCallback, lpContext);
|
||||
/*
|
||||
HMODULE hddraw = LoadLibrary("system32\\ddraw.dll");
|
||||
|
||||
if (hddraw)
|
||||
{
|
||||
HRESULT(WINAPI *DDrawEnumerateA)(LPDDENUMCALLBACK, LPVOID) =
|
||||
(HRESULT(WINAPI *)(LPDDENUMCALLBACK, LPVOID))GetProcAddress(hddraw, "DirectDrawEnumerateA");
|
||||
|
||||
if (DDrawEnumerateA)
|
||||
return DDrawEnumerateA(lpCallback, lpContext);
|
||||
|
||||
FreeLibrary(hddraw);
|
||||
}
|
||||
*/
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
|
151
src/surface.c
151
src/surface.c
@ -20,6 +20,7 @@
|
||||
#include "main.h"
|
||||
#include "surface.h"
|
||||
|
||||
void dump_ddbltflags(DWORD dwFlags);
|
||||
void dump_ddscaps(DWORD dwCaps);
|
||||
void dump_ddsd(DWORD dwFlags);
|
||||
DWORD WINAPI render_soft_main(void);
|
||||
@ -93,32 +94,7 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR
|
||||
#if _DEBUG_X
|
||||
printf("DirectDrawSurface::Blt(This=%p, lpDestRect=%p, lpDDSrcSurface=%p, lpSrcRect=%p, dwFlags=%08X, lpDDBltFx=%p)\n", This, lpDestRect, lpDDSrcSurface, lpSrcRect, (int)dwFlags, lpDDBltFx);
|
||||
|
||||
if (dwFlags & DDBLT_ALPHADEST) printf(" DDBLT_ALPHADEST\n");
|
||||
if (dwFlags & DDBLT_ALPHADESTCONSTOVERRIDE) printf(" DDBLT_ALPHADESTCONSTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ALPHADESTNEG) printf(" DDBLT_ALPHADESTNEG\n");
|
||||
if (dwFlags & DDBLT_ALPHADESTSURFACEOVERRIDE) printf(" DDBLT_ALPHADESTSURFACEOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ALPHAEDGEBLEND) printf(" DDBLT_ALPHAEDGEBLEND\n");
|
||||
if (dwFlags & DDBLT_ALPHASRC) printf(" DDBLT_ALPHASRC\n");
|
||||
if (dwFlags & DDBLT_ALPHASRCCONSTOVERRIDE) printf(" DDBLT_ALPHASRCCONSTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ALPHASRCNEG) printf(" DDBLT_ALPHASRCNEG\n");
|
||||
if (dwFlags & DDBLT_ALPHASRCSURFACEOVERRIDE) printf(" DDBLT_ALPHASRCSURFACEOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ASYNC) printf(" DDBLT_ASYNC\n");
|
||||
if (dwFlags & DDBLT_COLORFILL) printf(" DDBLT_COLORFILL\n");
|
||||
if (dwFlags & DDBLT_DDFX) printf(" DDBLT_DDFX\n");
|
||||
if (dwFlags & DDBLT_DDROPS) printf(" DDBLT_DDROPS\n");
|
||||
if (dwFlags & DDBLT_KEYDEST) printf(" DDBLT_KEYDEST\n");
|
||||
if (dwFlags & DDBLT_KEYDESTOVERRIDE) printf(" DDBLT_KEYDESTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_KEYSRC) printf(" DDBLT_KEYSRC\n");
|
||||
if (dwFlags & DDBLT_KEYSRCOVERRIDE) printf(" DDBLT_KEYSRCOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ROP) printf(" DDBLT_ROP\n");
|
||||
if (dwFlags & DDBLT_ROTATIONANGLE) printf(" DDBLT_ROTATIONANGLE\n");
|
||||
if (dwFlags & DDBLT_ZBUFFER) printf(" DDBLT_ZBUFFER\n");
|
||||
if (dwFlags & DDBLT_ZBUFFERDESTCONSTOVERRIDE) printf(" DDBLT_ZBUFFERDESTCONSTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ZBUFFERDESTOVERRIDE) printf(" DDBLT_ZBUFFERDESTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ZBUFFERSRCCONSTOVERRIDE) printf(" DDBLT_ZBUFFERSRCCONSTOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_ZBUFFERSRCOVERRIDE) printf(" DDBLT_ZBUFFERSRCOVERRIDE\n");
|
||||
if (dwFlags & DDBLT_WAIT) printf(" DDBLT_WAIT\n");
|
||||
if (dwFlags & DDBLT_DEPTHFILL) printf(" DDBLT_DEPTHFILL\n");
|
||||
dump_ddbltflags(dwFlags);
|
||||
|
||||
if(lpDestRect)
|
||||
{
|
||||
@ -238,7 +214,7 @@ HRESULT __stdcall ddraw_surface_BltFast(IDirectDrawSurfaceImpl *This, DWORD dst_
|
||||
IDirectDrawSurfaceImpl *Source = (IDirectDrawSurfaceImpl *)lpDDSrcSurface;
|
||||
|
||||
#if _DEBUG_X
|
||||
printf("IDirectDrawSurface::BltFast(This=%p, ...)\n", This);
|
||||
printf("IDirectDrawSurface::BltFast(This=%p, x=%d, y=%d, lpDDSrcSurface=%p, lpSrcRect=%p, flags=%08X)\n", This, dst_x, dst_y, lpDDSrcSurface, lpSrcRect, flags);
|
||||
|
||||
if (flags & DDBLTFAST_NOCOLORKEY)
|
||||
{
|
||||
@ -367,10 +343,10 @@ HRESULT __stdcall ddraw_surface_EnumOverlayZOrders(IDirectDrawSurfaceImpl *This,
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWSURFACE a, DWORD b)
|
||||
HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWSURFACE surface, DWORD flags)
|
||||
{
|
||||
#if _DEBUG_X
|
||||
printf("IDirectDrawSurface::Flip(This=%p, ...)\n", This);
|
||||
printf("IDirectDrawSurface::Flip(This=%p, surface=%p, flags=%08X)\n", This, surface, flags);
|
||||
#endif
|
||||
|
||||
if(This->caps & DDSCAPS_PRIMARYSURFACE && ddraw->render.run)
|
||||
@ -394,9 +370,16 @@ HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWS
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT __stdcall ddraw_surface_GetAttachedSurface(IDirectDrawSurfaceImpl *This, LPDDSCAPS a, LPDIRECTDRAWSURFACE FAR *b)
|
||||
HRESULT __stdcall ddraw_surface_GetAttachedSurface(IDirectDrawSurfaceImpl *This, LPDDSCAPS lpDdsCaps, LPDIRECTDRAWSURFACE FAR *surface)
|
||||
{
|
||||
printf("IDirectDrawSurface::GetAttachedSurface(This=%p, ...) ???\n", This);
|
||||
printf("IDirectDrawSurface::GetAttachedSurface(This=%p, dwCaps=%08X, surface=%p) ???\n", This, lpDdsCaps->dwCaps, surface);
|
||||
|
||||
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && (This->caps & DDSCAPS_FLIP) && (lpDdsCaps->dwCaps & DDSCAPS_BACKBUFFER))
|
||||
{
|
||||
This->Ref++;
|
||||
*surface = (LPDIRECTDRAWSURFACE)This;
|
||||
}
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
@ -741,8 +724,114 @@ HRESULT __stdcall ddraw_CreateSurface(IDirectDrawImpl *This, LPDDSURFACEDESC lpD
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
void dump_ddbltflags(DWORD dwFlags)
|
||||
{
|
||||
if (dwFlags & DDBLT_ALPHADEST) {
|
||||
printf(" DDBLT_ALPHADEST\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHADESTCONSTOVERRIDE) {
|
||||
printf(" DDBLT_ALPHADESTCONSTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHADESTNEG) {
|
||||
printf(" DDBLT_ALPHADESTNEG\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHADESTSURFACEOVERRIDE) {
|
||||
printf(" DDBLT_ALPHADESTSURFACEOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHAEDGEBLEND) {
|
||||
printf(" DDBLT_ALPHAEDGEBLEND\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHASRC) {
|
||||
printf(" DDBLT_ALPHASRC\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHASRCCONSTOVERRIDE) {
|
||||
printf(" DDBLT_ALPHASRCCONSTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHASRCNEG) {
|
||||
printf(" DDBLT_ALPHASRCNEG\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ALPHASRCSURFACEOVERRIDE) {
|
||||
printf(" DDBLT_ALPHASRCSURFACEOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ASYNC) {
|
||||
printf(" DDBLT_ASYNC\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_COLORFILL) {
|
||||
printf(" DDBLT_COLORFILL\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_DDFX) {
|
||||
printf(" DDBLT_DDFX\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_DDROPS) {
|
||||
printf(" DDBLT_DDROPS\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_KEYDEST) {
|
||||
printf(" DDBLT_KEYDEST\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_KEYDESTOVERRIDE) {
|
||||
printf(" DDBLT_KEYDESTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_KEYSRC) {
|
||||
printf(" DDBLT_KEYSRC\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_KEYSRCOVERRIDE) {
|
||||
printf(" DDBLT_KEYSRCOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ROP) {
|
||||
printf(" DDBLT_ROP\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ROTATIONANGLE) {
|
||||
printf(" DDBLT_ROTATIONANGLE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ZBUFFER) {
|
||||
printf(" DDBLT_ZBUFFER\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ZBUFFERDESTCONSTOVERRIDE) {
|
||||
printf(" DDBLT_ZBUFFERDESTCONSTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ZBUFFERDESTOVERRIDE) {
|
||||
printf(" DDBLT_ZBUFFERDESTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ZBUFFERSRCCONSTOVERRIDE) {
|
||||
printf(" DDBLT_ZBUFFERSRCCONSTOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_ZBUFFERSRCOVERRIDE) {
|
||||
printf(" DDBLT_ZBUFFERSRCOVERRIDE\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_WAIT) {
|
||||
printf(" DDBLT_WAIT\n");
|
||||
}
|
||||
if (dwFlags & DDBLT_DEPTHFILL) {
|
||||
printf(" DDBLT_DEPTHFILL\n");
|
||||
}
|
||||
}
|
||||
|
||||
void dump_ddscaps(DWORD dwCaps)
|
||||
{
|
||||
if (dwCaps & DDSCAPS_ALPHA)
|
||||
{
|
||||
printf(" DDSCAPS_ALPHA\n");
|
||||
}
|
||||
if (dwCaps & DDSCAPS_BACKBUFFER)
|
||||
{
|
||||
printf(" DDSCAPS_BACKBUFFER\n");
|
||||
}
|
||||
if (dwCaps & DDSCAPS_FLIP)
|
||||
{
|
||||
printf(" DDSCAPS_FLIP\n");
|
||||
}
|
||||
if (dwCaps & DDSCAPS_FRONTBUFFER)
|
||||
{
|
||||
printf(" DDSCAPS_FRONTBUFFER\n");
|
||||
}
|
||||
if (dwCaps & DDSCAPS_PALETTE)
|
||||
{
|
||||
printf(" DDSCAPS_PALETTE\n");
|
||||
}
|
||||
if (dwCaps & DDSCAPS_TEXTURE)
|
||||
{
|
||||
printf(" DDSCAPS_TEXTURE\n");
|
||||
}
|
||||
if(dwCaps & DDSCAPS_PRIMARYSURFACE)
|
||||
{
|
||||
printf(" DDSCAPS_PRIMARYSURFACE\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user