Переглянути джерело

*** empty log message ***

Joe Shochet 25 роки тому
батько
коміт
f97a47558b
2 змінених файлів з 14 додано та 1 видалено
  1. 3 0
      direct/src/showbase/ShowBase.py
  2. 11 1
      direct/src/showbase/Task.py

+ 3 - 0
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
 

+ 11 - 1
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: