mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-27 19:01:02 +00:00
Design canvas: gate direct-render hacks behind sw-GL detection
Mirror of snaporca-cad f3b665b. DesignCanvas had ~38 call-sites doing `set_as_dirty(); render()` directly, tagged "llvmpipe: force repaint" — software-GL workarounds from the headless :10 test box. On hardware GL this bypasses the dirty/refresh cycle and burns frames outside the paint event. Funnel all 38 through a new request_repaint() helper that branches on the cached GL renderer string: hardware GL gets set_as_dirty()+wxGLCanvas::Refresh() (render() runs inside the paint cycle), software GL keeps the direct render(), undetected backend takes the safe direct path. Behaviour on the llvmpipe :10 box is byte-identical; hardware GL invalidates the canonical editor way. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BVzKmX6Y1aEteit1HTXG4Q
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
2929f66881
commit
a121e30a13
@@ -203,9 +203,16 @@ public:
|
||||
|
||||
private:
|
||||
void reload(bool keep_view);
|
||||
// Repaint the embedded canvas the right way for the active GL backend:
|
||||
// hardware GL gets a scheduled wxEVT_PAINT (render() runs inside the paint
|
||||
// cycle); software GL (llvmpipe etc.) gets a direct render() because a
|
||||
// scheduled Refresh() is frequently dropped there. Backend cached on first use.
|
||||
void request_repaint();
|
||||
|
||||
wxGLCanvas* m_canvas_widget{nullptr};
|
||||
GLCanvas3D* m_canvas{nullptr};
|
||||
int m_sw_gl{-1}; // -1 unknown, 0 hardware GL, 1 software GL
|
||||
|
||||
Bed3D m_bed;
|
||||
Model m_model;
|
||||
bool m_first_frame{true};
|
||||
|
||||
Reference in New Issue
Block a user