فهرست منبع

asynchronous load priorities

David Rose 17 سال پیش
والد
کامیت
d4538bcfeb
2فایلهای تغییر یافته به همراه14 افزوده شده و 2 حذف شده
  1. 7 2
      direct/src/showbase/Loader.py
  2. 7 0
      direct/src/showbase/ShowBase.py

+ 7 - 2
direct/src/showbase/Loader.py

@@ -58,7 +58,7 @@ class Loader(DirectObject):
     # model loading funcs
     def loadModel(self, modelPath, loaderOptions = None, noCache = None,
                   allowInstance = False, okMissing = None,
-                  callback = None, extraArgs = []):
+                  callback = None, extraArgs = [], priority = None):
         """
         Attempts to load a model or models from one or more relative
         pathnames.  If the input modelPath is a string (a single model
@@ -101,7 +101,10 @@ class Loader(DirectObject):
         loading, the callback function will be invoked with the n
         loaded models passed as its parameter list.  It is possible
         that the callback will be invoked immediately, even before
-        loadModel() returns.
+        loadModel() returns.  If you use callback, you may also
+        specify a priority, which specifies the relative importance
+        over this model over all of the other asynchronous load
+        requests (higher numbers are loaded first).
 
         True asynchronous model loading requires Panda to have been
         compiled with threading support enabled (you can test
@@ -179,6 +182,8 @@ class Loader(DirectObject):
             i=0
             for modelPath in modelList:
                 request = self.loader.makeAsyncRequest(Filename(modelPath), loaderOptions)
+                if priority is not None:
+                    request.setPriority(priority)
                 request.setDoneEvent(self.hook)
                 request.setPythonObject((cb, i))
                 i+=1

+ 7 - 0
direct/src/showbase/ShowBase.py

@@ -1088,6 +1088,11 @@ class ShowBase(DirectObject.DirectObject):
         # region (see the comment in setupRender2d, above).
         dr.setClearDepthActive(1)
 
+        # Make any texture reloads on the gui come up first, before
+        # textures on the rest of the scene, and before the default
+        # asynchronous animation load priority (100).
+        dr.setTextureReloadPriority(200)
+
         left, right, bottom, top = coords
 
         # Now make a new Camera node.
@@ -1129,6 +1134,8 @@ class ShowBase(DirectObject.DirectObject):
         # Unlike render2d, we don't clear the depth buffer for
         # render2dp.  Caveat emptor.
 
+        dr.setTextureReloadPriority(250)
+
         left, right, bottom, top = coords
 
         # Now make a new Camera node.