0

最小化してから最小化解除するとクラッシュする単純な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がクラッシュすることに関連している可能性がありますが、まだその問題を解決していないので、バンプします。
4

1 に答える 1

1

残りは、最小化メッセージ (SIZE_MINIMIZED) を WM_SIZE で個別に処理する方がよいでしょう。ウィンドウが最小化されている場合は、レンダリングを停止し、CPU 時間を他のプログラムに譲ります。

于 2012-11-08T02:07:08.977 に答える