问题描述
编辑:现在,我已经更改了代码,所有内容都已渲染到MSAA渲染目标中,并在Present调用之前调用ResolveSubresource。如果我直接绘制到MSAA渲染目标,这似乎可行,但是将其绘制到另一个渲染目标中首先会破坏抗锯齿效果。 Visual Studio的图形分析器显示,确实,抗锯齿效果应用于第一个渲染目标(可纹理绑定的渲染目标),而不应用于第二个渲染目标(MSAA渲染目标)。
我目前正在尝试从渲染中去除锯齿,但是对于如何实际设置它有些困惑。目前,现在,我将TEXTURE2DMS用作所有要素的尺寸,并且现在将“样品数”任意设置为2,将“质量”设置为0。
DirectX设置:
Swapchain.SampleDesc.Count = 2;
Swapchain.SampleDesc.Quality = 0;
DepthStencil.SampleDesc.Count = 2;
DepthStencil.SampleDesc.Quality = 0;
DepthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;
RenderTarget(Texture)设置:
TextureDesc.SampleDesc.Count = 2;
RenderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMS;
DepthDesc.SampleDesc.Count = 2;
DepthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;
ShaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DMS;
我还有2个像素着色器:
struct Pin
{
float4 Pos : SV_POSITION;
float4 Col : COLOR0;
float2 Tex : TEXCOORD0;
float2 Texel : TEXCOORD1;
};
//High pass filter
Texture2D txBlank : register( t0 );
SamplerState samLinear : register( s0 );
float RGB2RelativeLuminance(float4 c)
{
return (c.x * 0.2126) + (c.y * 0.7152) + (c.z * 0.0722);
}
float4 PS(Pin input) : SV_TARGET
{
float4 color = float4(0,1);
float treshhold = 0.3f;
float4 temp = txBlank.Sample(samLinear,input.Tex) * input.Col;
if(RGB2RelativeLuminance(temp) > treshhold)
color = temp;
return color;
}
//Basic
Texture2DMS<float4> txImage : register( t0 );
SamplerState samLinear : register( s0 );
float4 PS(Pin input) : SV_TARGET
{
return txImage.Load(input.Pos,1) * input.Col;
}
光栅化器:
rasterDesc.AntialiasedLineEnable = true;
rasterDesc.CullMode = D3D11_CULL_BACK;
rasterDesc.DepthBias = 0;
rasterDesc.DepthBiasClamp = 0.0f;
rasterDesc.DepthClipEnable = true;
rasterDesc.FillMode = D3D11_FILL_SOLID;
rasterDesc.FrontCounterClockwise = false;
rasterDesc.MultisampleEnable = true;
rasterDesc.ScissorEnable = false;
rasterDesc.SlopeScaledDepthBias = 0.0f;
现在,我的程序如下:
- (Init)初始化D3D设备,交换链,上下文,栅格化器,渲染目标,深度模具,视口
- (初始化)创建渲染目标(纹理),我将其称为“ ViewTex”
- (绘制)将ViewTex设置为渲染目标
- (绘制)将空白纹理设置为插槽0
- (绘制)将“高通滤镜”设置为着色器
- (绘制)绘制对象
- (绘制)将“渲染目标”设置为“窗口”
- (绘制)将ViewTex设置为插槽0纹理
- (绘制)将“基本”设置为着色器
- (绘制)绘制一个覆盖整个“渲染目标”的矩形
- (绘制)取消设置插槽0纹理
当前,此代码不起作用,我不确定为什么,这是渲染屏幕截图的特写: link
我误会了吗?设置多重采样不等于MSAA吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)