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:
parent
4ed8eed654
commit
15686ce5d3
@ -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))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user