MSDN sur IDirect3D9Ex::CreateDeviceEx
dit:récemment IDirect3DDevice9 :: CreateDeviceEx parfois ne change pas la BackBufferFormat de D3DFMT_UNKNOWN
Si
BackBufferFormat
est égal à D3DFMT_UNKNOWN avant que la méthode est appelée, elle sera modifiée lorsque la méthode retourne.
Donc, cela devrait imprimer autre chose que format: 0
(aujourd'hui généralement format: 22
pour D3DFMT_X8R8G8B8
):
#include <cstdio>
#include <d3d9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"User32.lib")
int main(int argc, char **argv)
{
IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (!d3d) {
printf("No d3d!\n");
return 0;
}
D3DPRESENT_PARAMETERS pp = {};
pp.BackBufferWidth = 1;
pp.BackBufferHeight = 1;
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.BackBufferCount = 1;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.Windowed = TRUE;
IDirect3DDevice9* device = NULL;
HRESULT hr = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &device);
if (FAILED(hr)) {
printf("Failed!\n");
return 0;
}
printf("format: %i\n", pp.BackBufferFormat);
device->Release();
d3d->Release();
}
Et cela toujours travaillé dans mon expérience. Maintenant, récemment, cela ne fonctionne plus comme prévu. Il imprime format: 0
. Pourquoi?
Cela a été observé sur certains PC Windows 10 pendant quelques jours récemment. Plus tard, il a magiquement recommencé à fonctionner. Est-ce que cela est peut-être lié à la mise à jour Windows 10 Anniversary?
J'ai modifié l'exemple de code dans la question en ajoutant vos suggestions. (Les contrôles étaient déjà l'application réelle.) Le 'HRESULT' n'indique aucun échec. Il imprime toujours 0 sur ces PC. (Et j'essaie déjà de passer en D3D11, mais WPF nécessite encore du D3D9 ...) – Peter
Jetez un coup d'œil à [WPFDXInterop] (https://github.com/Microsoft/WPFDXInterop) –
C'est sur ma liste TODO, Merci. Pour les logiciels existants, il serait toujours intéressant de savoir pourquoi 'BackBufferFormat' reste' 0' après l'installation de Win10. Des idées? Pourrait-il être une mise à jour du pilote ou une mise à jour Windows supplémentaire qui a résolu ce problème? – Peter