Hi, I'm working with actor preloader i.e. main-loop is running and
another thread loads actors. I'm not even plan to add these on stage,
just load them.

In this example application I add them to stage, because now it forms
complete application.
If in thread I make clutterRectangle, it works.
If in thread I try to make clutterTexture from image file, I got
"Failed to create COGL texture".

Is this bug, or how I should make this working?

#include <clutter/clutter.h>

ClutterActor *stage;

void *start_preloader(int parameter) {
    g_usleep( 1 * G_USEC_PER_SEC );
    ClutterActor *actor;

    if (parameter==2)
    {
        GError* error = NULL;
        if (!(actor = clutter_texture_new_from_file("image.png", &error))) {
            fprintf(stderr, "%s\n",  error->message);
            g_error_free(error);
        }
    }

    else
    {
        actor =clutter_rectangle_new();
        clutter_actor_set_size (actor, 400, 80);
        clutter_actor_set_position (actor, 10, 10);
        clutter_rectangle_set_border_width(CLUTTER_RECTANGLE(actor),10);
    }

    clutter_container_add_actor(CLUTTER_CONTAINER(stage), actor);
    pthread_exit(NULL);
}


int main (int argc, char *argv[]) {
    ClutterActor  *actor;
    clutter_init (&argc, &argv);

    stage = clutter_stage_get_default ();

    actor =clutter_rectangle_new();
    clutter_actor_set_size (actor, 400, 400);
    clutter_actor_set_position (actor, 40, 40);
    clutter_rectangle_set_border_width(CLUTTER_RECTANGLE(actor),16);

    clutter_container_add_actor(CLUTTER_CONTAINER(stage), actor);
    clutter_actor_show_all(stage);

    pthread_t preloader_thread;
    pthread_create(&preloader_thread, NULL, start_preloader, argc);

    clutter_main();
    return 0;
}


Usage:
copy any png image to working directory and rename it to image.png
compile: gcc `pkg-config --libs --cflags clutter-1.0` main.c
./a.out
   Main loop starts, then preloader waits one second. Move mouse over
stage, so it is refreshed and then second rectangle will be visible.

./a.out BUG
   Main loop starts, one second later preloader tries to open png file
and gives error: "Failed to create COGL texture" and actor is NULL.


This error message is coming from clutter-texture:1976
(clutter_texture_set_from_file), but I do not understand why.

-Aapo Rantalainen
-- 
To unsubscribe send a mail to [email protected]

Reply via email to