1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

improve error checks

This commit is contained in:
FunkyFr3sh 2018-10-09 08:56:58 +02:00
parent 56631c8ed3
commit bbf2b0db12

View File

@ -25,7 +25,7 @@ static DWORD FrameLength;
static BOOL CreateDirect3D(); static BOOL CreateDirect3D();
static BOOL CreateResources(); static BOOL CreateResources();
static BOOL SetStates(); static BOOL SetStates();
static void UpdateVertices(BOOL inCutscene); static BOOL UpdateVertices(BOOL inCutscene);
static BOOL Reset(); static BOOL Reset();
static void SetMaxFPS(); static void SetMaxFPS();
static void Render(); static void Render();
@ -93,24 +93,27 @@ static BOOL CreateDirect3D()
int i; int i;
for (i = 0; i < sizeof(behaviorFlags) / sizeof(behaviorFlags[0]); i++) for (i = 0; i < sizeof(behaviorFlags) / sizeof(behaviorFlags[0]); i++)
{ {
if (SUCCEEDED(D3d->lpVtbl->CreateDevice( if (SUCCEEDED(
D3d, D3d->lpVtbl->CreateDevice(
D3DADAPTER_DEFAULT, D3d,
D3DDEVTYPE_HAL, D3DADAPTER_DEFAULT,
ddraw->hWnd, D3DDEVTYPE_HAL,
D3DCREATE_MULTITHREADED | D3DCREATE_NOWINDOWCHANGES | behaviorFlags[i], ddraw->hWnd,
&D3dpp, D3DCREATE_MULTITHREADED | D3DCREATE_NOWINDOWCHANGES | behaviorFlags[i],
&D3dDev))) &D3dpp,
break; &D3dDev)))
return D3dDev && CreateResources() && SetStates();
} }
} }
} }
return D3d && D3dDev && CreateResources() && SetStates(); return FALSE;
} }
static BOOL CreateResources() static BOOL CreateResources()
{ {
BOOL err = FALSE;
int width = ddraw->width; int width = ddraw->width;
int height = ddraw->height; int height = ddraw->height;
@ -125,15 +128,22 @@ static BOOL CreateResources()
ScaleW = (float)width / texWidth;; ScaleW = (float)width / texWidth;;
ScaleH = (float)height / texHeight; ScaleH = (float)height / texHeight;
D3dDev->lpVtbl->CreateVertexBuffer( err = err || FAILED(
D3dDev, sizeof(CUSTOMVERTEX) * 4, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &VertexBuf, NULL); D3dDev->lpVtbl->CreateVertexBuffer(
D3dDev, sizeof(CUSTOMVERTEX) * 4, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &VertexBuf, NULL));
UpdateVertices(InterlockedExchangeAdd(&ddraw->incutscene, 0)); err = err || !UpdateVertices(InterlockedExchangeAdd(&ddraw->incutscene, 0));
D3dDev->lpVtbl->CreateTexture(D3dDev, texWidth, texHeight, 1, 0, D3DFMT_L8, D3DPOOL_MANAGED, &SurfaceTex, 0);
D3dDev->lpVtbl->CreateTexture(D3dDev, 256, 256, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &PaletteTex, 0);
D3dDev->lpVtbl->CreatePixelShader(D3dDev, (DWORD *)PalettePixelShaderSrc, &PixelShader);
return SurfaceTex && PaletteTex && VertexBuf && PixelShader; err = err || FAILED(
D3dDev->lpVtbl->CreateTexture(D3dDev, texWidth, texHeight, 1, 0, D3DFMT_L8, D3DPOOL_MANAGED, &SurfaceTex, 0));
err = err || FAILED(
D3dDev->lpVtbl->CreateTexture(D3dDev, 256, 256, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &PaletteTex, 0));
err = err || FAILED(
D3dDev->lpVtbl->CreatePixelShader(D3dDev, (DWORD *)PalettePixelShaderSrc, &PixelShader));
return SurfaceTex && PaletteTex && VertexBuf && PixelShader && !err;
} }
static BOOL SetStates() static BOOL SetStates()
@ -159,7 +169,7 @@ static BOOL SetStates()
return !err; return !err;
} }
static void UpdateVertices(BOOL inCutscene) static BOOL UpdateVertices(BOOL inCutscene)
{ {
float vpX = (float)ddraw->render.viewport.x; float vpX = (float)ddraw->render.viewport.x;
float vpY = (float)ddraw->render.viewport.y; float vpY = (float)ddraw->render.viewport.y;
@ -182,8 +192,12 @@ static void UpdateVertices(BOOL inCutscene)
if (VertexBuf && SUCCEEDED(VertexBuf->lpVtbl->Lock(VertexBuf, 0, 0, (void**)&data, 0))) if (VertexBuf && SUCCEEDED(VertexBuf->lpVtbl->Lock(VertexBuf, 0, 0, (void**)&data, 0)))
{ {
memcpy(data, vertices, sizeof(vertices)); memcpy(data, vertices, sizeof(vertices));
VertexBuf->lpVtbl->Unlock(VertexBuf); VertexBuf->lpVtbl->Unlock(VertexBuf);
return TRUE;
} }
return FALSE;
} }
static BOOL Reset() static BOOL Reset()