diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index f26bbff0a5..457627ff70 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -23,6 +23,9 @@ class ShowBase: self.wantTk = self.config.GetBool('want-tk', 0) self.wantSound = self.config.GetBool('want-sound', 1) self.wantDIRECT = self.config.GetBool('want-directtools', 0) + + # Set a maximum frame rate on the render loop (0 means do not limit) + Task.maxFps = self.config.GetInt('max-fps', 120) import Loader diff --git a/direct/src/showbase/Task.py b/direct/src/showbase/Task.py index 9f9eeba11f..7f0a1a0c55 100644 --- a/direct/src/showbase/Task.py +++ b/direct/src/showbase/Task.py @@ -2,12 +2,16 @@ from libpandaexpressModules import * from DirectNotify import * from PythonUtil import * - +import time exit = -1 done = 0 cont = 1 +# Note: this is dconfig'ed in ShowBase.py, but Tasks want to be independent +# of ShowBase and panda, so we have to set an initial value here +maxFps = 120 + # Store the global clock globalClock = ClockObject.getGlobalClock() @@ -258,7 +262,13 @@ class TaskManager: self.running = 1 while self.running: try: + startTime = time.time() self.step() + finishTime = time.time() + # Max out the frame rate so we do not starve the cpu + if (maxFps > 0): + dt = finishTime - startTime + time.sleep(max(0, (1.0/maxFps)-dt)) except KeyboardInterrupt: self.stop() except: