You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When LP_GEOMETRY is set to Cube (Options::CUBE), the canvas goes completely black — no nodes are visible. The app doesn't crash; it just renders only the background clear-screen and nothing else.
Root cause
CDasherViewSquare in Cube mode calls Screen()->DrawCube(...) for each node and Screen()->FinishRender3D(...) to composite the 3D layers. These are virtual methods on CDasherScreen (DasherScreen.h:98-103).
The C API's CommandScreen (in CAPI.cpp) — the screen adapter that translates DasherCore rendering into the flat int[] command buffer consumed by all frontends — never overrides these methods. They fall through to the empty base implementation, so zero draw commands are emitted for cube nodes.
Only the clear-screen command (opcode 0) fires — hence the black canvas.
The flat rectangle rendering (default node shape) works fine because it uses DasherRectangle() / DasherPolyline(), which CommandScreen does translate into the int[] buffer.
Suggested fix
Option A (preferred): Implement DrawCube + FinishRender3D in CommandScreen — translate cube quads into the flat int[] command format. The cubes are shaded rectangles with depth-based colour; they don't need actual 3D. This could emit opcode 4 (filled rectangle) for each cube face with the depth-shaded colour.
Option B: Have CDasherViewSquare detect that the screen doesn't support 3D (e.g., a Supports3D() capability check) and fall back to flat rectangle rendering. Simpler but loses the cube visual.
Context
Reported via TestFlight (Dasher-Apple build 75+, iOS 27).
Problem
When
LP_GEOMETRYis set toCube(Options::CUBE), the canvas goes completely black — no nodes are visible. The app doesn't crash; it just renders only the background clear-screen and nothing else.Root cause
CDasherViewSquarein Cube mode callsScreen()->DrawCube(...)for each node andScreen()->FinishRender3D(...)to composite the 3D layers. These are virtual methods onCDasherScreen(DasherScreen.h:98-103).The C API's
CommandScreen(inCAPI.cpp) — the screen adapter that translates DasherCore rendering into the flatint[]command buffer consumed by all frontends — never overrides these methods. They fall through to the empty base implementation, so zero draw commands are emitted for cube nodes.Only the clear-screen command (opcode 0) fires — hence the black canvas.
The flat rectangle rendering (default node shape) works fine because it uses
DasherRectangle()/DasherPolyline(), which CommandScreen does translate into theint[]buffer.Suggested fix
Option A (preferred): Implement
DrawCube+FinishRender3DinCommandScreen— translate cube quads into the flatint[]command format. The cubes are shaded rectangles with depth-based colour; they don't need actual 3D. This could emit opcode 4 (filled rectangle) for each cube face with the depth-shaded colour.Option B: Have
CDasherViewSquaredetect that the screen doesn't support 3D (e.g., aSupports3D()capability check) and fall back to flat rectangle rendering. Simpler but loses the cube visual.Context
dasher.hare affected (Apple, Windows, GTK, Android, Web).