Implement software scope rendering for backend-neutral display paths

The Waveform, Vectorscope and Histogram panels were black when running on
the Vulkan / backend-neutral render path because ScopeBase::OnPaint()
returned early with a TODO. The viewer emits GPU textures that live in the
viewer's own renderer; on Vulkan each ManagedDisplayWidget has a separate
device, so those textures cannot be sampled directly.

Fix by:

- Adding a backend-neutral branch in ScopeBase::OnPaint() that downloads the
  reference texture (cross-renderer if needed), color-manages it into a U8
  offscreen texture, downloads it to a QImage, and draws via QPainter.
- Adding a pure virtual DrawScopeSoftware() to ScopeBase and implementing it
  for WaveformScope, VectorscopeScope and HistogramScope.
- Fixing the managed_tex_up_to_date_ flag that was never set to true in the
  OpenGL path, which caused the color-managed scope texture to be recreated
  on every paint.

All gtest suites pass.
This commit is contained in:
2026-07-13 10:19:30 +08:00
parent f0119a910c
commit 8d3bde5a50
8 changed files with 416 additions and 3 deletions
+2
View File
@@ -38,6 +38,8 @@ protected:
virtual ShaderCode GenerateShaderCode() override;
virtual void DrawScope(TexturePtr managed_tex, QVariant pipeline) override;
virtual void DrawScopeSoftware(QPainter &p, const QImage &image) override;
};
}