我正在使用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