Hi,

I'm having some troubles with ClutterLabel on the BeagleBoard (TI ARM
OMAP, with PowerVR SGX 530 core).
Some glyphs are not rendered correctly (see attached screenshot). I
have attached a small test-program that triggers the problem.
One very interesting thing is that when I change the font of label1
such that it matches the font of label2, the problem disappears.
Also, if the initial text of label2 is empty, even more glyphs are garbled.
That makes me think that the problem is caused when glyphs are
rendered after the first screen redraw. But I have no clue how to come
closer to a solution.

I am using clutter 0.8 git rev
7129ee4f1b86bfcb65b5fc39021b05b74168785d and the problem exists on
both eglx and eglnative backends.
If I left out any details, please let me know and I'll provide them.
Hope this problem is solvable :-)

Cheers,
Paul

<<attachment: screenshot.jpg>>

#include <clutter/clutter.h>

void update(ClutterTimeline *timeline, gint frame, gpointer data)
{
  ClutterLabel *label = CLUTTER_LABEL(data);

  switch( frame )
  {
    case 1:
      clutter_label_set_text(label, "Starting...");
      break;
    case 2:
      clutter_label_set_text(label, "Starting... .977 The Hitz Channel");
      break;
    case 3:
      clutter_label_set_text(label, "ABCDEFGHIJKLABCDEFHIJKL");
      break;
    case 4:
      clutter_label_set_text(label, "Buffering... 10%");
      break;
    case 5:
      clutter_label_set_text(label, "Buffering... 21%");
      break;
    case 6:
      clutter_label_set_text(label, "Buffering... 30%");
      break;
    case 7:
      clutter_label_set_text(label, "Buffering... 80%");
      break;
    case 8:
      clutter_label_set_text(label, "Buffering... 98%");
      break;
    case 9:
      clutter_label_set_text(label, "Buffering... 100%");
      break;
    case 10:
      clutter_label_set_text(label, "Playing: .977 The Hitz Channel");
      break;
  }
}

int
main(int argc, char *argv[]) {
  ClutterActor *stage;
  ClutterActor *label1, *label2;
  ClutterTimeline *timeline;

  clutter_init(&argc, &argv);

  stage = clutter_stage_get_default();

  label1 = clutter_label_new();
  clutter_label_set_text(CLUTTER_LABEL(label1), "1234567890%.:,Buffering");

  label2 = clutter_label_new();
  clutter_label_set_font_name(CLUTTER_LABEL(label2), "courier NULL 40px");
  clutter_label_set_text(CLUTTER_LABEL(label2), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
  clutter_actor_set_position(label2, 0, 100);

  timeline = clutter_timeline_new(10, 1);
  clutter_timeline_set_loop(timeline, TRUE);
  g_signal_connect(timeline, "new-frame", G_CALLBACK(update), label2);

  clutter_group_add_many(CLUTTER_GROUP(stage), label1, label2, NULL);
  clutter_actor_show_all(stage);

  clutter_timeline_start(timeline);

  clutter_main();
  
  return 0;
}

Reply via email to