Can anyone point me towards documentation about how the Panda3D game loop works internally? I know about extending DirectObject and calling .run() which runs the taskMgr. However, I’d like to find out everything that happens in a given Panda3D loop.
Basically, run() invokes base.taskMgr.run(), which polls the task manager in a continuous loop.
If you want to see what exactly happens inside it, you should look at which tasks are registered. I think you can do so by simply typing “print base.taskMgr”.
I really don’t know what tasks 1,2,4,6 and do. I would guess resetPrevTransform is simply acting on the graphics state to bring the rendering system back to the origin…but who knows. Maybe dataLoop repopulates the vertex/shader information? Just out of curiosity, anyone actually know those 4 tasks are responsible for?
For any future passerby of this thread who is also curious about these tasks, here are the descriptions of the tasks:
def __resetPrevTransform(self, state):
# Clear out the previous velocity deltas now, after we have
# rendered (the previous frame). We do this after the render,
# so that we have a chance to draw a representation of spheres
# along with their velocities. At the beginning of the frame
# really means after the command prompt, which allows the user
# to interactively query these deltas meaningfully.
def __dataLoop(self, state):
# traverse the data graph. This reads all the control
# inputs (from the mouse and keyboard, for instance) and also
# directly acts upon them (for instance, to move the avatar).
def __ivalLoop(self, state):
# Execute all intervals in the global ivalMgr.
def __shadowCollisionLoop(self, state):
# run the collision traversal if we have a
# CollisionTraverser set.
def __collisionLoop(self, state):
# run the collision traversal if we have a
# CollisionTraverser set.
def __audioLoop(self, state):
if (self.musicManager != None):
self.musicManager.update()
for x in self.sfxManagerList:
x.update()
return Task.cont
def __igLoop(self, state):
# We render the watch variables for the onScreenDebug as soon
# as we reasonably can before the renderFrame().