最小化してから最小化解除するとクラッシュする単純なDirectXプログラムがあります。
これらは私がカバーするイベントケースです:
case WM_SIZING:
case WM_SIZE:
if(engine.isReady()) engine.resizeDevice();
if(engine.isReady()) engine.draw();
break;
サイズ変更はおおよそ次のとおりです。
deviceContext->OMSetRenderTargets(0, NULL, NULL);
...
deviceInterface->CreateRenderTargetView( ... );
...
deviceContext->RSSetViewports(1, &vp);
...
deviceContext->OMSetRenderTargets(1, &renderTargetInterface, NULL);
最小化を解除すると、バックバッファを設定しようとしているときにコードが停止します。これは、渡された値の行です
。hr = swapChain-> ResizeBuffers(3、640、480、DXGI_FORMAT_UNKNOWN、0);
ResizeBuffers()はエラー0x887a0005を返します
バックバッファコード:
HRESULT _setBackBuffer(const SettingsVD &settings){
HRESULT hr;
hr=swapChain->ResizeBuffers(settings.bufferCount, settings.width, settings.height, DXGI_FORMAT_UNKNOWN, 0);
if(FAILED(hr)) return hr; // Dies here when UNminimizing
ID3D11Texture2D* backBuffer=NULL;
hr=swapChain->GetBuffer(0, __uuidof(backBuffer), (LPVOID*)&backBuffer);
if(FAILED(hr)) return hr;
hr=deviceInterface->CreateRenderTargetView(backBuffer, NULL, &renderTargetInterface);
if(FAILED(hr)) return hr;
release(backBuffer);
return hr;
}
バックバッファがバーフィングしている理由を知っている人はいますか?
- 私の他のスレッド、Tinyのサイズ変更時にDirectXがクラッシュすることに関連している可能性がありますが、まだその問題を解決していないので、バンプします。