在基于图像的纹理上绘制多个形状时闪烁

时间:2016-06-26 18:51:17

标签: c# directx directx-11 sharpdx direct3d11

我正在使用SharpDx和D3D11渲染具有多种颜色填充形状的视频帧。

渲染视频帧时渲染似乎没问题,并且符合预期。

现在,如果我绘制一个颜色填充的形状,它将按预期绘制和渲染。

但是,当我尝试在视频帧纹理上渲染多个填充颜色的形状时,会出现问题。

除了第一个彩色形状外,绘制时绘制的所有其他形状都会闪烁,因此显示了neath下的像素,这些像素是渲染视频帧的像素。

关于为什么会发生这种情况的任何想法?

如果需要更多信息,请告诉我。

P.S。使用ShaprDx和Directx11

感谢。

编辑:

1。设置视频帧着色器资源:

        var srv = new ShaderResourceView(DxDevice, textureToUpdate);
        DxDevice.ImmediateContext.PixelShader.SetShaderResource(0, srv);
        srv.Dispose();

2。绘制图元的代码:(在包含图像纹理的每个对象的循环中调用)

            DxDevice.ImmediateContext.InputAssembler.InputLayout = m_shaderData.InputLayoutConfig;
            DxDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;

            DxDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(m_displayQuadvertices, VertexPositionColor.SizeInBytes, 0)); 
            DxDevice.ImmediateContext.VertexShader.Set(m_shaderData.VertexShaderConfig);
            DxDevice.ImmediateContext.PixelShader.Set(m_shaderData.PixelShaderConfig);

            DxDevice.ImmediateContext.Draw(4, 0);
            DxDevice.ImmediateContext.Flush();

为图像纹理四元组调用上面的代码,然后绘制任何对象(比如填充颜色的四边形)。

此外,我正在使用WPF,因此我使用D3dImage控件。

第3。无效:(D3DImage控制)

m_imgSource.InvalidateD3DImage(invalidateRectArea); // to invalidate the area of back buffer for rendering

对于被解码的视频帧,然后通过在像素着色器上设置着色器资源来映射到纹理。

调用代码顺序:

call code block 1

loop
{
  call code block 2
}

call code block 3

0 个答案:

没有答案