The map copy says whether the canvas went dark

A Live Cam's secondary display carries its name and score at mission start
and is black later on. Placement is not the cause - a POD with
L4RADARPOS=LEFT fills the same corner properly, track lines, labels,
mini-map and all - so the pane and its position are fine and something
stops.

Three faults wear that one symptom: the per-frame copy stopping, the
source gauge canvas going blank underneath it, or the pane not repainting
what it was given. The copy now reports, every five seconds, that it ran
and how many non-zero pixels the source canvas holds (one row in sixteen
sampled, enough to tell blank from not). So:

  no line at all          the copy stopped
  line, lit falls to ~0   the gauge canvas went blank
  line, lit stays high    the pane is not showing what it was handed

Baseline from a pod, whose map demonstrably works: a steady 9900 or so lit
pixels every pass, 640x480 source, mask 0xff. Verified before shipping
this time, rather than after drawing a conclusion from it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-10 19:32:04 -05:00
co-authored by Claude Opus 5
parent 2adbeba6c4
commit 0371544b88
+37
View File
@@ -5202,6 +5202,43 @@ Logical SVGA16::Update(Logical forceAll)
int src_w = pixelBuffer.Data.Size.x;
int src_h = pixelBuffer.Data.Size.y;
//
// RP412CAMLOG. A camera's map showed content at mission
// start and then went black, which is three different
// faults wearing one symptom: the copy stopping, the
// SOURCE canvas going blank, or the pane not repainting.
// Counting non-zero source pixels as we pass tells them
// apart - a live canvas with a black pane is the third,
// a blank canvas is the second, and no line at all is the
// first. Every five seconds; the count is a sample of one
// row in sixteen, which is plenty to tell blank from not.
//
if (RPCameraLog())
{
static Scalar next_copy_say = 0.0f;
if ((Scalar) Now() >= next_copy_say)
{
next_copy_say = ((Scalar) Now()) + 5.0f;
long lit = 0;
for (int sy = 0; sy < src_h; sy += 16)
{
Word *row = source_base + sy * src_w;
for (int sx = 0; sx < src_w; ++sx)
{
if (row[sx] != 0)
{
++lit;
}
}
}
DEBUG_STREAM << "CamLog: map copy running, source "
<< src_w << "x" << src_h << ", " << lit
<< " lit pixels sampled, mask 0x" << std::hex
<< secMask << std::dec << "\n" << std::flush;
}
}
if (Application::IsCameraStation())
{
//