From d4538bcfebc03a0014a1c9c498edf5b546c57191 Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 24 Dec 2008 23:45:58 +0000 Subject: [PATCH] asynchronous load priorities --- direct/src/showbase/Loader.py | 9 +++++++-- direct/src/showbase/ShowBase.py | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index c3a02e5100..846d2b6c1d 100644 --- a/direct/src/showbase/Loader.py +++ b/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 diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 2f91314dcd..6320e3f5ac 100644 --- a/direct/src/showbase/ShowBase.py +++ b/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.