Hello,
I have a bit of a problem with MSAA and DX11. It seems to be working but causing visual artifacts at the same time. On the image below, from left to right, MSAA settings as count-quality pairs: {1,0}, {4,16}, {8,32}:
To enable MSAA, I used following code pieces:
On SwapChain creation:
swapChainDesc.SampleDesc.Count = 4;
swapChainDesc.SampleDesc.Quality = 16;
rasterizerDesc.MultisampleEnable = true;
rasterizerDesc.AntialiasedLineEnable = true;
// get the backbuffer texture
ID3D11Texture2D* bufferTex;
HRESULT texGet = swapChain_->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&bufferTex));
if(FAILED(texGet)) {
MessageBox(nullptr, L"Failed getting the backbuffer texture.", L"Error", 0);
return;
}
// get the backbuffer texture's description
D3D11_TEXTURE2D_DESC texDesc;
bufferTex->GetDesc(&texDesc);
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = texDesc.Format;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMS;
HRESULT rtvCreation = device_->CreateRenderTargetView(bufferTex, &rtvDesc, &defaultRenderTargetView_);
if(FAILED(rtvCreation)) {
MessageBox(nullptr, L"Failed creating the default render-target view.", L"Error", 0);
return;
}
// define the depth stencil view texture
D3D11_TEXTURE2D_DESC depthStencilTexDesc;
depthStencilTexDesc.Width = texDesc.Width;
depthStencilTexDesc.Height = texDesc.Height;
depthStencilTexDesc.MipLevels = 1;
depthStencilTexDesc.ArraySize = 1;
depthStencilTexDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthStencilTexDesc.SampleDesc.Count = texDesc.SampleDesc.Count;
depthStencilTexDesc.SampleDesc.Quality = texDesc.SampleDesc.Quality;
depthStencilTexDesc.Usage = D3D11_USAGE_DEFAULT;
depthStencilTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthStencilTexDesc.CPUAccessFlags = 0;
depthStencilTexDesc.MiscFlags = 0;
ID3D11Texture2D* depthStencilTex;
HRESULT depthStencilTexCreation = device_->CreateTexture2D(&depthStencilTexDesc, nullptr, &depthStencilTex);
if(FAILED(depthStencilTexCreation)) {
MessageBox(nullptr, L"Failed creating the depth-stencil texture.", L"Error", 0);
return;
}
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = depthStencilTexDesc.Format;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;
dsvDesc.Flags = 0;
HRESULT depthStencilViewCreation = device_->CreateDepthStencilView(depthStencilTex, &dsvDesc, &defaultDepthStencilView_);
if(FAILED(depthStencilViewCreation)) {
MessageBox(nullptr, L"Failed creating the default depth-stencil view.", L"Error", 0);
return;
}
// clean up
SAFE_RELEASE(depthStencilTex);
SAFE_RELEASE(bufferTex);