Widzę że nie wiele osób zajmuje się DirectX, to akurat zrozumiałe bo można dostać białej gorączki z tymi interfejsami COM, i innymi dziwakami, nie mniej jednak jeszcze raz próbowałem stanąć do walki, tym razem jednak nie pod osłoną Win32 API ale C++/CLI Windows Core, generalnie wszystko szkło gładko do momentu zmiany anti-aliasing.
Tutaj jest działający kod z wyłączonym multisamplingiem, wystarczy uruchomić z w trybie debug x64 lub x86
http://www105.zippyshare.com/v/nvVw2q3d/file.html
powinien się wyświetlić biały trójkąt
Włączenie multisamplingu polega na modyfikacji: W pliku Game.cpp
UINT m4xMsaaQuality;
dev->CheckMultisampleQualityLevels(DXGI_FORMAT_B8G8R8A8_UNORM,4, &m4xMsaaQuality);
// set up the swap chain description
DXGI_SWAP_CHAIN_DESC1 scd = { 0 };
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // how the swap chain should be used
scd.BufferCount =2;
scd.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // the most common swap chain format
scd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; // the recommended flip mode
scd.SampleDesc.Count = 4; // enabel 4x anti-aliasing
scd.SampleDesc.Quality = m4xMsaaQuality-1;
CoreWindow^ Window = CoreWindow::GetForCurrentThread(); // get the window pointer
// create the swap chain
dxgiFactory->CreateSwapChainForCoreWindow(
dev.Get(), // address of the device
reinterpret_cast<IUnknown*>(Window), // address of the window
&scd, // address of the swap chain description
nullptr, // advanced
&swapchain); // address of the new swap chain pointer
// get a pointer directly to the back buffer
ComPtr<ID3D11Texture2D> backbuffer;
swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (&backbuffer));
----------------------------------------------------------------
UINT m4xMsaaQuality;
dev->CheckMultisampleQualityLevels(DXGI_FORMAT_B8G8R8A8_UNORM,4, &m4xMsaaQuality);
Linijka mówi jaki stopień multisamplingu został wykryty, i powinień zwrócić odpowiednią liczbę do zmiennej odpowiadającej jakości: m4xMsaaQuality
dxgiFactory->CreateSwapChainForCoreWindow(
dev.Get(), // address of the device
reinterpret_cast<IUnknown*>(Window), // address of the window
&scd, // address of the swap chain description
nullptr, // advanced
&swapchain); // address of the new swap chain pointer
Objekt interfejsu Factory2 ma za zadanie stworzyć wskaźnik do swapChaina z ustawieniami jak powyżej zwraca nullptr.
Ma ktoś jakieś doświadczenie? Podpowiedzi. Może komuś obiło się o oczy jakiś przykład z włączonym?
Pozdrawiam