Perhaps nobody else out there has HW acceleration disabled but may prevent crashing due to other reasons... Prevention is always better.
With DirectDraw output enabled PCem will exit and leave an entry in the log (CreateSurface back failed)
With Direct3D output enabled PCem will CRASH abruptly with no log at all. This is due to some D3D initialising functions not being handled in 'win-d3d.cc' so it's really easy to fix, done with copy and paste, no keyboard required:
Code: Select all
@@ -72,7 +72,8 @@
d3dpp.BackBufferWidth = 0;
d3dpp.BackBufferHeight = 0;
- d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, h, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
+ if (FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, h, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev)))
+ fatal("CreateDevice failed\n");
@@ -99,14 +100,16 @@
+ if (FAILED(d3ddev->CreateVertexBuffer(12*sizeof(CUSTOMVERTEX),
D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1,
+ fatal("CreateVertexBuffer failed\n");;
- d3ddev->CreateTexture(2048, 2048, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &d3dTexture, NULL);
+ if (FAILED(d3ddev->CreateTexture(2048, 2048, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &d3dTexture, NULL)))
+ fatal("CreateTexture failed\n");;
r.top = r.left = 0;
r.bottom = r.right = 2047;
Will be better to display also a message on fatal errors to tell the user what happened? many end users won't know that a log file exists or even what a log file is... I'm not sure to be able to do that, I don't know too much about C/C++
* Last Sunday I was playing Runaway 2: The Dream of the Turtle and it's one of those games with problems with new video cards, drivers, x64, Windows 8/10 and so on,
in that case there is a problem on some scenes with snowing effect which makes the game insanely slow, only happens on recent NVIDIA cards according to some forums,
seems that most people is using D3DWindower or dxwnd to play it windowed but I don't like to play a fullscreen game in a window...
I was using the dxcpl.exe applet from DirectX SDK to disable HW acceleration for D3D and/or DD as needed, but those are system wide settings and quite easy to forget to reactivate, as happened to me.
And the settings can be changed while PCem is running, this won't affect previously opened DX devices, but then if you change video output or want to change to other settings or machine type PCem will dead.