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
signature.asc
Description: Digital signature
