Re: gtk-app-devel-list Digest, Vol 44, Issue 35



Thanks Brian, g_idle_add in combination with gtk_widget_queue_draw_area()
worked perfectly. Just one question about the inner workings of
gtk_widget_queue_draw_area().
Here is my call:
  gtk_widget_queue_draw_area(drawing_area,
                 0, 0,
                 drawing_area->allocation.width,
                 drawing_area->allocation.height);

are the coords in this call relative to the drawing area widget? they seem
to be but I'd like to make sure I'm actually invalidating the area I think I
am and not redrawing the entire window or something.
Thanks again,
    -Chris.

On Dec 22, 2007 12:00 PM, <gtk-app-devel-list-request gnome org> wrote:

Send gtk-app-devel-list mailing list submissions to
       gtk-app-devel-list gnome org

To subscribe or unsubscribe via the World Wide Web, visit
       http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
or, via email, send a message with subject or body 'help' to
       gtk-app-devel-list-request gnome org

You can reach the person managing the list at
       gtk-app-devel-list-owner gnome org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of gtk-app-devel-list digest..."


Today's Topics:

  1. recommended way to create a render loop with gtkglext (Chris H)
  2. Re: recommended way to create a render loop with gtkglext
     (Brian J. Tarricone)


----------------------------------------------------------------------

Message: 1
Date: Fri, 21 Dec 2007 13:53:54 -0500
From: "Chris H" <arbuckle911 gmail com>
Subject: recommended way to create a render loop with gtkglext
To: gtk-app-devel-list gnome org
Message-ID:
       <c9d034c50712211053q1f0f840v24160fd4f46834cc mail gmail com>
Content-Type: text/plain; charset=ISO-8859-1

Hello,
I'm writing a GLSL shader editor and I need to be able to create a loop
that
will force the gtkglext widget to constantly refresh at 60Hz or less if
the
frames take too long to render. I've tried to copy the code from the
logo.cexample but it just isn't refreshing. Honestly I'd rather stay
away from
g_timeout for this task. I tried using threads but it became really
unstable
(segfaults) when calling
 /* Invalidate the whole window. */
 gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);

 /* Update synchronously. */
 gdk_window_process_updates (widget->window, FALSE);
in the separate thread. Is there a way I could simply have the separate
thread send a redraw signal to the widget, and would that event work? I'm
open to just about any ideas that don't involve g_timeout.
Thanks.


------------------------------

Message: 2
Date: Fri, 21 Dec 2007 11:12:52 -0800
From: "Brian J. Tarricone" <bjt23 cornell edu>
Subject: Re: recommended way to create a render loop with gtkglext
To: gtk-app-devel-list gnome org
Message-ID: <476C1034 6090402 cornell edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Chris H wrote:
Hello,
I'm writing a GLSL shader editor and I need to be able to create a loop
that
will force the gtkglext widget to constantly refresh at 60Hz or less if
the
frames take too long to render. I've tried to copy the code from the
logo.cexample but it just isn't refreshing. Honestly I'd rather stay
away from
g_timeout for this task. I tried using threads but it became really
unstable
(segfaults) when calling
  /* Invalidate the whole window. */
  gdk_window_invalidate_rect (widget->window, &widget->allocation,
FALSE);

  /* Update synchronously. */
  gdk_window_process_updates (widget->window, FALSE);
in the separate thread. Is there a way I could simply have the separate
thread send a redraw signal to the widget, and would that event work?
I'm
open to just about any ideas that don't involve g_timeout.

gdk_window_invalidate_rect() *is* the way to send a redraw signal to the
widget's underlying GdkWindow.  Give gtk_widget_queue_draw_area() a try
instead.

If you're calling this from a separate thread, be sure you've
initialized gthread (with g_thread_init()) and gdk's locking (with
gdk_threads_init()) before gtk_init() in main().  You'll need to
surround your call to gtk_main() with gdk_threads_enter() and
gdk_threads_leave(), and you'll have to do the same for any gtk/gdk
calls you make in other threads.

Alternatively, you can *not* initialise gdk's threading at all, and use
g_idle_add() from your worker thread to schedule a function to call
gtk_widget_queue_draw_area() (the idle function will run in the main
thread, regardless of where you call g_idle_add()).

       -brian


------------------------------

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

End of gtk-app-devel-list Digest, Vol 44, Issue 35
**************************************************




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]