Well, glib is just depency of GTK+, GTK+ uses glib for things like
event loop, objects ... anyway, can you test my code? It works for me.

Add -std=c++0x to compilers command line for it to compile.

Note that you shouldn't use fscanf to get strings as it is quite
dangerous, anyway I used it so it matches your stuff

On Sun, Nov 7, 2010 at 8:16 PM, Mario M <maqueo.ma...@gmail.com> wrote:
> Sorry about the confusion, I do mean in callbacks. I have a Room class and a
> global room instance, the Room class has mesh members which when initialized
> read a specified file.
>
> The callbacks areconnected with:
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> g_signal_connect (grafWindow, "expose-event",
>    G_CALLBACK (glDraw), NULL);
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> in the main function, then the functions that read the files are called
> inside main from within the room instance with:
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> room.Init();
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>
>  and then the glDraw function callback for the expose event is:
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> gboolean glDraw(GtkWidget *win, GdkEventExpose *event, gpointer user_data)
> {
>         while(gtk_events_pending())
>         {
>                gtk_main_iteration_do(FALSE);
>          }
>
>          grafWinGL.beginGL();
>          room.Draw();
>
>          grafWinGL.swapBuffers();
>           grafWinGL.endGL();
>           return TRUE;
> }
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> Basically, the room.Init is:
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> void Init()
>        {
>            mesh1.Init("3D/file1.obj");
>            mesh2.Init("3D/file2.obj");
>            ... etc
>        }
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> mesh1 and mesh2 are instances of a mesh class, and room.Draw()
> calls mesh1.Draw() mesh2.Draw() etc. The mesh class, which when reading a
> file in it's Init function, does basically:
>
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
> char token[100];
> scene = fopen(obj_file.c_str(),"r");
> float vec[3]={0,0,0};
>
>
>  while(!feof(scene))
>  {
>  token[0] = NULL;
>  fscanf(scene,"%s", token);
>
>   if (!strcmp(token,"v"))
>  {
>       fscanf(scene,"%f %f %f",&vec[0],&vec[1],&vec[2]);
>       vList.push_back(Vec3(vec));
>  }
>  ..........etc
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> And here is exactly where the problem is. When I used all of this in my 32
> bit system, everything worked fine. Then in the 64 bit system, fscanf works
> in reading the token, but then fscanf(scene,"%f %f
> %f",&vec[0],&vec[1],&vec[2]); is doing nothing! Apparently it is called the
> correct amount of times, but after returning, the values in vec[0], vec[1]
> and vec[2] are the same as before calling the function, always. Thus, the
> mesh isn't rendered correctly ( meaning it doesn't get rendered at all
> because all the vertices are garbage).
>
> Now, after everything I tried, I changed the previous code to work with
> fstream functions like this:
>
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>  char token[100];
> ifstream fin(obj_file.c_str());
> float vec[3]={0,0,0};
>
>
>  while(!fin.eof())
>  {
>  token[0] = NULL;
>  fin>>token;
>
>   if (!strcmp(token,"v"))
>  {
>       fin>>vec[0]>>vec[1]>>vec[2];
>       vList.push_back(Vec3(vec));
>  }
>
> .....etc
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> And now it works fine! Although it takes a looot more time to read the
> files  (containing a few thousand vertices), but that bit isn't a gtk+ issue
> but a c++ issue I guess (fstream being way slower than cstdio took me by
> suprise :S ).
>
>  I am very confused as to why it doesn't work with cstdio functions.
>
> Of course, I might still be doing something wrong, I think I may have
> slipped some of the gtk+ 32 bit dependencies when compiling gtk+, do you
> think that might affect this problem? I think it shouldn't but who knows. I
> haven't read about any similar problems so far.
>
> I haven't tried only with glib, I don't know much about it and I will have
> to wait until I have finished this project to try that, but thanks for the
> suggestion, I will try when I have time.
>
>
> Thanks!
>
> Mario Maqueo
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>



-- 
Jaroslav Šmíd
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to