hi,

clutter is already capable of loading textures in a thread:
http://www.clutter-project.org/docs/clutter/stable/ClutterTexture.html#ClutterTexture--load-async

you should also dig the mailing-list archives for a list of do's and
dont's with threading in clutter:
http://search.gmane.org/search.php?group=gmane.comp.lib.clutter&query=thread

so long

:wq buz


On Tue, Dec 01, 2009 at 10:15:33PM +0200, Aapo Rantalainen wrote:
> 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]
> 

-- 
RTFM: No just an acronym, it's the LAW!

GnuPG Fingerprint: 2FFF FC48 C7DF 1EA0 00A0  FD53 8C35 FD2E 6908 7B82

Attachment: signature.asc
Description: Digital signature

Reply via email to