Nach der typischen Device-Erstellung assoziiere ich das Fenster mit DXGI, damit es automatisch auf ALT+ENTER reagieren kann:
Code: Alles auswählen
pFactory->MakeWindowAssociation(swapChainDesc.OutputWindow, 0);
Ein "Present" sieht bei mir wie folgt aus:
Code: Alles auswählen
void Device::present()
{
static bool standby = false;
if (!standby)
{
if (pSwapChain->Present(0, 0) == DXGI_STATUS_OCCLUDED)
standby = true;
}
else
{
if (pSwapChain->Present(0, DXGI_PRESENT_TEST) == S_OK)
standby = false;
}
}
Code: Alles auswählen
void Device::resize(int width, int height)
{
pDevice->OMSetRenderTargets(0, 0, 0);
pRenderTargetView = 0; // Release
DXGI_SWAP_CHAIN_DESC swapChainDesc;
pSwapChain->GetDesc(&swapChainDesc);
pSwapChain->ResizeBuffers(
swapChainDesc.BufferCount,
width,
height,
swapChainDesc.BufferDesc.Format,
swapChainDesc.Flags);
ID3D10Texture2DPtr pBackBuffer;
pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2DPtr), reinterpret_cast<void**>(&pBackBuffer));
pDevice->CreateRenderTargetView(pBackBuffer, 0, &pRenderTargetView);
pDevice->OMSetRenderTargets(1, &pRenderTargetView.GetInterfacePtr(), 0);
D3D10_VIEWPORT viewport;
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = width;
viewport.Height = height;
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
pDevice->RSSetViewports(1, &viewport);
}
Code: Alles auswählen
Device::~Device()
{
pDevice->OMSetRenderTargets(0, 0, 0);
pSwapChain->SetFullscreenState(FALSE, 0);
}