如何正确填充Swapchain结构以使用mulits采样
How to properly fill up SwapChain Struct to use Mulitsampling?
嗨,我只是从corewindow^ c /cli下的directx开始,直到我想开始使用mulitsampling之前,一切似乎都可以。此示例正在渲染简单的三角形
没有AA
的工作示例当我这样填充Swapchain结构时:
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; // >1 enable 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));`
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);
返回" nullptr",
我检查了m4xmsaaquality等于" 17",所以scd.sampledesc.quality = 16
我应该如何填充Swapchain结构?
翻转交换效应与多样采样表面不兼容。您需要创建一个非MSAA互换链,并明确解决SAA渲染。
是!最终,我曾经使用这种多样采样,我意识到
esolvesubresource
将多样采样资源复制到非媒体采样资源中。
为什么我不必再重新创建renderviewtarget,只是我可以使用我的。
我仍然有疑问,是否有一些方法可以增加抗声明?我可以放入屏幕外的最大样本
insaa enable
init_directx这是工作解决方案。
谢谢您的回答,我在MSDN中阅读了有关UWP应用中的多样采样。但是我仍然不能渲染光滑的三角形。我更改了交换方式 - 现在对于UWP应用程序应该是正确的。我还使用了asolvesubresource
你可以看看吗?窗户是完整的黑色,没有三角形。到目前为止,我完成了此代码,大多数情况下,我怀疑渲染目标时是:
:dev->CreateRenderTargetView(backbuffer.Get(), &renderTargetViewDesc, &rendertarget);
和渲染方法[线:210,214]使用" rendertarget"
[210] devcon->OMSetRenderTargets(1, rendertarget.GetAddressOf(), nullptr);
[214]devcon->ClearRenderTargetView(rendertarget.Get(), color);
一切都恢复正常(当然没有MSAA)
init_directx-渲染失败
相关文章:
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何使用采样器立方体作为数组
- 多重采样背景不显示
- 如何从wav文件中获取采样率?
- 如何对0,1,..中的k个随机数进行采样..,n-1,而不缓存到数组
- 如何在直接 x12 上使用多重采样
- 为什么当我选择>250000个采样点时,程序不起作用?
- 点云下采样和使用 PCL 进行正态估计
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"
- 在glTexImage2D中,当我选择与在着色器中采样不同的内部格式时,情况如何?
- 使用哪个 pcl 滤波器对点云进行下采样
- 使用膨胀卷积的语义分割中的上采样
- 为什么找不到这个统一采样器2D?
- 如何在保持最小距离的同时沿有限线随机采样
- 使用GlblitFrameBuffer进行多样采样,无法使用OpenGL ES 3.0
- 如何将多个立方体纹理传递到均匀的采样器中
- 多采样框架渲染对象和深度缓冲区
- GLSL 无法获取采样器3D 值
- 对随机序列进行降采样会降低随机性吗?有没有原理/定理来证明这一点?
- 如何正确填充Swapchain结构以使用mulits采样