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

don't delete resources on reset since they're all managed

This commit is contained in:
FunkyFr3sh 2018-10-02 02:27:58 +02:00
parent 4ed8eed654
commit 15686ce5d3

View File

@ -63,19 +63,27 @@ static void UpdateVertices(BOOL inCutscene)
} }
} }
static void InitDirect3D(BOOL reset) static void SetStates()
{ {
if (reset) D3ddev->lpVtbl->SetFVF(D3ddev, D3DFVF_XYZRHW | D3DFVF_TEX1);
{ D3ddev->lpVtbl->SetStreamSource(D3ddev, 0, D3dvb, 0, sizeof(CUSTOMVERTEX));
D3dvb->lpVtbl->Release(D3dvb); D3ddev->lpVtbl->SetTexture(D3ddev, 0, (IDirect3DBaseTexture9 *)SurfaceTex);
SurfaceTex->lpVtbl->Release(SurfaceTex); D3ddev->lpVtbl->SetTexture(D3ddev, 1, (IDirect3DBaseTexture9 *)PaletteTex);
PaletteTex->lpVtbl->Release(PaletteTex); D3ddev->lpVtbl->SetPixelShader(D3ddev, PixelShader);
PixelShader->lpVtbl->Release(PixelShader);
if (FAILED(D3ddev->lpVtbl->Reset(D3ddev, &D3dpp))) D3DVIEWPORT9 viewData = {
return; ddraw->render.viewport.x,
} ddraw->render.viewport.y,
ddraw->render.viewport.width,
ddraw->render.viewport.height,
0.0f,
1.0f };
D3ddev->lpVtbl->SetViewport(D3ddev, &viewData);
}
static void CreateResources()
{
int width = ddraw->width; int width = ddraw->width;
int height = ddraw->height; int height = ddraw->height;
@ -90,32 +98,23 @@ static void InitDirect3D(BOOL reset)
ScaleW = (float)width / texWidth;; ScaleW = (float)width / texWidth;;
ScaleH = (float)height / texHeight; ScaleH = (float)height / texHeight;
D3ddev->lpVtbl->SetFVF(D3ddev, D3DFVF_XYZRHW | D3DFVF_TEX1);
D3ddev->lpVtbl->CreateVertexBuffer( D3ddev->lpVtbl->CreateVertexBuffer(
D3ddev, sizeof(CUSTOMVERTEX) * 4, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &D3dvb, NULL); D3ddev, sizeof(CUSTOMVERTEX) * 4, 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &D3dvb, NULL);
UpdateVertices(InterlockedExchangeAdd(&ddraw->incutscene, 0)); UpdateVertices(InterlockedExchangeAdd(&ddraw->incutscene, 0));
D3ddev->lpVtbl->SetStreamSource(D3ddev, 0, D3dvb, 0, sizeof(CUSTOMVERTEX));
D3ddev->lpVtbl->CreateTexture(D3ddev, texWidth, texHeight, 1, 0, D3DFMT_L8, D3DPOOL_MANAGED, &SurfaceTex, 0); D3ddev->lpVtbl->CreateTexture(D3ddev, texWidth, texHeight, 1, 0, D3DFMT_L8, D3DPOOL_MANAGED, &SurfaceTex, 0);
D3ddev->lpVtbl->SetTexture(D3ddev, 0, (IDirect3DBaseTexture9 *)SurfaceTex);
D3ddev->lpVtbl->CreateTexture(D3ddev, 256, 256, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &PaletteTex, 0); D3ddev->lpVtbl->CreateTexture(D3ddev, 256, 256, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &PaletteTex, 0);
D3ddev->lpVtbl->SetTexture(D3ddev, 1, (IDirect3DBaseTexture9 *)PaletteTex);
D3ddev->lpVtbl->CreatePixelShader(D3ddev, (DWORD *)PalettePixelShaderSrc, &PixelShader); D3ddev->lpVtbl->CreatePixelShader(D3ddev, (DWORD *)PalettePixelShaderSrc, &PixelShader);
D3ddev->lpVtbl->SetPixelShader(D3ddev, PixelShader);
D3DVIEWPORT9 viewData = { SetStates();
ddraw->render.viewport.x, }
ddraw->render.viewport.y,
ddraw->render.viewport.width,
ddraw->render.viewport.height,
0.0f,
1.0f };
D3ddev->lpVtbl->SetViewport(D3ddev, &viewData); static void Reset()
{
if (SUCCEEDED(D3ddev->lpVtbl->Reset(D3ddev, &D3dpp)))
{
SetStates();
}
} }
DWORD WINAPI render_d3d9_main(void) DWORD WINAPI render_d3d9_main(void)
@ -165,6 +164,7 @@ DWORD WINAPI render_d3d9_main(void)
D3dpp.BackBufferCount = 1; D3dpp.BackBufferCount = 1;
DWORD behaviorFlags[] = { DWORD behaviorFlags[] = {
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE,
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE,
D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_HARDWARE_VERTEXPROCESSING,
D3DCREATE_MIXED_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING,
@ -186,7 +186,7 @@ DWORD WINAPI render_d3d9_main(void)
} }
if (D3ddev) if (D3ddev)
InitDirect3D(FALSE); CreateResources();
} }
} }
@ -283,7 +283,7 @@ DWORD WINAPI render_d3d9_main(void)
if (hr == D3DERR_DEVICENOTRESET) if (hr == D3DERR_DEVICENOTRESET)
{ {
InitDirect3D(TRUE); Reset();
} }
else if (SUCCEEDED(hr)) else if (SUCCEEDED(hr))
{ {