|
@@ -23,6 +23,10 @@ public class PreviewPainter : IDisposable
|
|
|
public VecI DocumentSize { get; set; }
|
|
public VecI DocumentSize { get; set; }
|
|
|
public DocumentRenderer Renderer { get; set; }
|
|
public DocumentRenderer Renderer { get; set; }
|
|
|
|
|
|
|
|
|
|
+ public bool CanRender => canRender;
|
|
|
|
|
+
|
|
|
|
|
+ public event Action<bool>? CanRenderChanged;
|
|
|
|
|
+
|
|
|
private Dictionary<int, Texture> renderTextures = new();
|
|
private Dictionary<int, Texture> renderTextures = new();
|
|
|
private Dictionary<int, PainterInstance> painterInstances = new();
|
|
private Dictionary<int, PainterInstance> painterInstances = new();
|
|
|
|
|
|
|
@@ -32,6 +36,8 @@ public class PreviewPainter : IDisposable
|
|
|
private Dictionary<int, VecI> pendingResizes = new();
|
|
private Dictionary<int, VecI> pendingResizes = new();
|
|
|
private HashSet<int> pendingRemovals = new();
|
|
private HashSet<int> pendingRemovals = new();
|
|
|
|
|
|
|
|
|
|
+ private bool canRender;
|
|
|
|
|
+
|
|
|
private int lastRequestId = 0;
|
|
private int lastRequestId = 0;
|
|
|
|
|
|
|
|
public PreviewPainter(DocumentRenderer renderer, IPreviewRenderable previewRenderable, KeyFrameTime frameTime,
|
|
public PreviewPainter(DocumentRenderer renderer, IPreviewRenderable previewRenderable, KeyFrameTime frameTime,
|
|
@@ -126,11 +132,21 @@ public class PreviewPainter : IDisposable
|
|
|
RepaintDirty();
|
|
RepaintDirty();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
private void RepaintDirty()
|
|
private void RepaintDirty()
|
|
|
{
|
|
{
|
|
|
var dirtyArray = dirtyTextures.ToArray();
|
|
var dirtyArray = dirtyTextures.ToArray();
|
|
|
|
|
+ bool couldRender = canRender;
|
|
|
|
|
+ canRender = PreviewRenderable?.GetPreviewBounds(FrameTime.Frame, ElementToRenderName) != null;
|
|
|
|
|
+ if (couldRender != canRender)
|
|
|
|
|
+ {
|
|
|
|
|
+ CanRenderChanged?.Invoke(canRender);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!CanRender)
|
|
|
|
|
+ {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
foreach (var texture in dirtyArray)
|
|
foreach (var texture in dirtyArray)
|
|
|
{
|
|
{
|
|
|
if (!renderTextures.TryGetValue(texture, out var renderTexture))
|
|
if (!renderTextures.TryGetValue(texture, out var renderTexture))
|