shoving a [pygame] up your [gtk]!

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Lunpa

    #1

    shoving a [pygame] up your [gtk]!

    My project:
    I'm working on a game, where in the ui, it takes the pygame window, and
    shoves it into a gtk2 socket widget. (gtk2 widgets are generated with
    glade, with the exception of the socket widget, which is manualy added
    into a window)

    My problem:
    Since adding the gtk half, it is realy slow. I can make one or the
    other update realy fast, or I can make it so the pygame window/widget
    gets a fluctuation in framerate between realy good, then realy bad,
    repeat.
    I've narrowed down my problem a bit to my events loop.

    Here's a simplified version of the events loop:

    while True:
    gtk.main_iterat ion(block=False )
    game_board.cloc k.tick(75)
    game_board.fram e()

    game_board is a class defining pygame/opengl code that produces the
    pygame window, and a simple game engine (its actualy a place holder
    untill I can make it run full speed. think of something with the
    sophistication of the pygame chimp example, or a opengl hello world).
    The same unmodified engine (pure pygame/opengl, no gtk2) works fine.

    game_board.fram e() performs some game logic tasks, and updates the
    pygame display. It also handles some keyboard inputs, but only grabs
    the latest one on the pygame stack.


    So here's the problem sumary, as far as I can gather:
    What I think is happening is that gtk.main_iterat ion(block=False ) works
    through every event in the queue untill there aren't any, THEN the
    pygame event loop briefly fires, checks one or two events from the
    pygame queue, and the loop repeats.
    (An intresting varriation to the loop above only allowed
    gtk.main_iterat ion to run when the pygame framerate is above 60... this
    resulted in the two taking turns monopolising cpu, heh)

    Here's what I think I want to do:
    I'm looking for something to the equivalent of processing the one gtk
    event (and remove it from it's stack), and then call
    game_board.fram e(), and have the loop repeate, possibly with some load
    balancing to allow multiple gtk events to process if the framerate is
    high. However, this is where I've hit a wall.



    So here we go.

    If I'm correct in my assumptions, how can I break down gtk.main even
    further?

    If I'm wrong, advice steering me in the right direction, or a shot in
    the head--- both would be appreciated :)

Working...