Skip to content

Commit

Permalink
Bugfix: D3DImage lost content when PC returned from sleep mode.
Browse files Browse the repository at this point in the history
  • Loading branch information
Helikin committed Mar 13, 2013
1 parent d8b3c70 commit 8b1c041
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions WpfInteropSample/D3D11Host.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class D3D11Host : Image
// Image source:
private RenderTarget2D _renderTarget;
private D3D11Image _d3D11Image;
private bool _sizeChanged;
private bool _resetBackBuffer;

// Render timing:
private readonly Stopwatch _timer;
Expand Down Expand Up @@ -205,17 +205,14 @@ private void OnRendering(object sender, EventArgs eventArgs)
if (!_timer.IsRunning)
return;

// Resize back buffer if necessary.
if (_sizeChanged)
{
// Recreate back buffer if necessary.
if (_resetBackBuffer)
CreateBackBuffer();
_sizeChanged = false;
}

// CompositionTarget.Rendering event may be raised multiple times per frame
// (e.g. during window resizing).
var renderingEventArgs = (RenderingEventArgs)eventArgs;
if (_lastRenderingTime != renderingEventArgs.RenderingTime || _sizeChanged)
if (_lastRenderingTime != renderingEventArgs.RenderingTime || _resetBackBuffer)
{
_lastRenderingTime = renderingEventArgs.RenderingTime;

Expand All @@ -226,6 +223,8 @@ private void OnRendering(object sender, EventArgs eventArgs)

_d3D11Image.Invalidate(); // Always invalidate D3DImage to reduce flickering
// during window resizing.

_resetBackBuffer = false;
}


Expand All @@ -236,17 +235,22 @@ private void OnRendering(object sender, EventArgs eventArgs)
/// <param name="sizeInfo">Details of the old and new size involved in the change.</param>
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
_sizeChanged = true;
_resetBackBuffer = true;
base.OnRenderSizeChanged(sizeInfo);
}


private void OnIsFrontBufferAvailableChanged(object sender, DependencyPropertyChangedEventArgs eventArgs)
{
if (_d3D11Image.IsFrontBufferAvailable)
{
StartRendering();
_resetBackBuffer = true;
}
else
{
StopRendering();
}
}


Expand Down

0 comments on commit 8b1c041

Please sign in to comment.