Keyboard constantly prints warnings to console in 2.6.0

OS: Linux (Kubuntu 24.04)

When using the built-in keyboard, the console is flooded with a warning/error message, inverted rect in LCD_addUpdateRect()!, though it doesn''t seem to affect actual keyboard behaviour.

Error is reproducible using a minimum example, as shown in the below GIF:
kbug

On the GIF, you can see that a minimum example which only imports the keyboard and then brings it up results in the messages being printed.

Thanks for the report, we'll get it fixed up!

This is still happening to me in 2.7.6.

I’m pretty sure it comes from pd→graphics→fillPolygon() in my case. Does the winding order need to be a specific one (e.g. CCW)? It’s a bit unclear to me from the documentation.

Actually scratch that, it most likely comes from pd→graphics→drawLine(). I’m even more puzzled…

Do you have an example app that shows the issue? Thanks in advance!

At the moment I only have my actual game where this is happening, but I could try extracting the code to a standalone app if needed.

In the meantime, here is the relevant (abridged) code:

V2 pos_iso_to_screen(V2 v)
{
  // converts an isometric position to a screen position
  V2 scr = v2(
    GRID_X0 + TILE_HALFWIDTH * (v.x + v.y),
    GRID_Y0 + TILE_HALFHEIGHT * (v.y - v.x));
  return scr;
}

void make_tile_poly(f32 x, f32 y, i32 *points)
{
  // constructs a polygon for an isometric tile at position (x, y)
  V2  topleft  = v2(x - 0.5f, y - 0.5f);
  V2  topright = v2_add(topleft, v2(1, 0));
  V2  botright = v2_add(topleft, v2(1, 1));
  V2  botleft  = v2_add(topleft, v2(0, 1));
  V2i scr_topleft  = pos_iso_to_screen(topleft);
  V2i scr_topright = pos_iso_to_screen(topright);
  V2i scr_botright = pos_iso_to_screen(botright);
  V2i scr_botleft  = pos_iso_to_screen(botleft);
  points[0] = scr_topleft.x;  points[1] = scr_topleft.y;
  points[2] = scr_topright.x; points[3] = scr_topright.y;
  points[4] = scr_botright.x; points[5] = scr_botright.y;
  points[6] = scr_botleft.x;  points[7] = scr_botleft.y;
}


void draw_poly(i32 *points, i32 n_points, Camera *camera)
{
  // NOTE: these are the arguments to the latest pd->graphics->setDrawOffset()
  i32 offx = camera->draw_off.x;
  i32 offy = camera->draw_off.y;

  for (i32 i = 0; i < 2 * n_points; i += 2) {
   i32 x = points[i] + offx;
   i32 y = points[i + 1] + offy;
   i32 nx = points[(i + 2) % (2 * n_points)] + offx;
   i32 ny = points[(i + 3) % (2 * n_points)] + offy;
   pd->graphics->drawLine(x, y, nx, ny, 3, kColorWhite);
  }
}

Basically I’m calling draw_poly() with polygons resulting from make_tile_poly(). Sometimes (not always) this causes the error message to appear (depending on which tiles are drawn and/or where my “camera” is in respect to them).

The resulting polygons look like this on screen (the red ones):

repro.zip (3.6 KB)

@willco sorry if it took a while but I put together a minimal repro for the issue. Let me know if you can reproduce it or need anything else.

I don't see it happening the current dev build. Can you give it a try when 3.0.1 comes out (next week, I think?) and let us know if it's still happening?

Sure, I’ll try that out.

Btw, I forgot to mention but I’m always testing on Linux - not sure if relevant.

3.0.1 is finally out, fyi :slight_smile:

Thanks.

I tried running the repro above with 3.0.1 but unfortunately the bug is still happening :frowning:

(still happening in 3.0.2)

(still happening in 3.0.5)