У меня проблема с D3DImage при изменении размера.
Сначала у меня было мерцание, когда у меня тоже было большое количество кадров в секунду, но я мог решить его, установив только задний буфер при создании новая текстура для рендеринга (что мне нужно при изменении размера)
Проблема возникает, когда я устанавливаю задний буфер сразу после InvalidateD3DImage, что, конечно, происходит при изменении размера из-за большого количества кадров, отправляемых за короткое время.
Может использовать метод SetRenderTarget, который устанавливает буфер:
public void SetRenderTargetDx11(Texture2D target)
{
if (this.mRenderTarget != null)
{
DisposeHelper.TryDispose(ref this.mRenderTarget);
base.Lock();
base.SetBackBuffer(D3DResourceType.IDirect3DSurface9, IntPtr.Zero);
base.Unlock();
}
if (target == null)
return;
if (!IsShareable(target))
throw new ArgumentException("Texture must be created with ResourceOptionFlags.Shared");
var format = TranslateFormat(target);
if (format == Format.Unknown)
throw new ArgumentException("Texture format is not compatible with OpenSharedResource");
var handle = GetSharedHandle(target);
if (handle == IntPtr.Zero)
throw new ArgumentNullException("Handle");
try
{
this.mRenderTarget = new Texture(mDevice, target.Description.Width, target.Description.Height, 1, Usage.RenderTarget, format, Pool.Default, ref handle);
using (Surface surface = this.mRenderTarget.GetSurfaceLevel(0))
{
base.Lock();
// "enableSoftwareFallback = true" makes Remote Desktop possible.
// See: http://msdn.microsoft.com/en-us/library/hh140978%28v=vs.110%29.aspx
base.SetBackBuffer(D3DResourceType.IDirect3DSurface9, surface.NativePointer, true);
base.Unlock();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Мой метод Invalidate image для рисования буфера в D3DImage.
public void InvalidateD3DImage()
{
if (this.mRenderTarget != null)
{
base.Lock();
base.AddDirtyRect(new Int32Rect(0, 0, base.PixelWidth, base.PixelHeight));
base.Unlock();
}
}
Есть ли способ избежать этого мерцания ? Это никак не влияет на функциональность, но все равно не очень приятно видеть.