| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- // Filename: loader.I
- // Created by: mike (09Jan97)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) Carnegie Mellon University. All rights reserved.
- //
- // All use of this software is subject to the terms of the revised BSD
- // license. You should have received a copy of this license along
- // with this source code in a file named "LICENSE."
- //
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::Constructor
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE Loader::Results::
- Results() {
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::Copy Constructor
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE Loader::Results::
- Results(const Loader::Results ©) :
- _files(copy._files)
- {
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::Copy Assignment Operator
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::Results::
- operator = (const Loader::Results ©) {
- _files = copy._files;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::Destructor
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE Loader::Results::
- ~Results() {
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::clear
- // Access: Published
- // Description: Removes all the files from the list.
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::Results::
- clear() {
- _files.clear();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::get_num_files
- // Access: Published
- // Description: Returns the number of files on the result list.
- ////////////////////////////////////////////////////////////////////
- INLINE int Loader::Results::
- get_num_files() const {
- return _files.size();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::get_file
- // Access: Published
- // Description: Returns the nth file on the result list.
- ////////////////////////////////////////////////////////////////////
- INLINE const Filename &Loader::Results::
- get_file(int n) const {
- nassertr(n >= 0 && n < (int)_files.size(), _files[0]._path);
- return _files[n]._path;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::get_file_type
- // Access: Published
- // Description: Returns the file type of the nth file on the result
- // list.
- ////////////////////////////////////////////////////////////////////
- INLINE LoaderFileType *Loader::Results::
- get_file_type(int n) const {
- nassertr(n >= 0 && n < (int)_files.size(), NULL);
- return _files[n]._type;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::Results::add_file
- // Access: Published
- // Description: Adds a new file to the result list.
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::Results::
- add_file(const Filename &file, LoaderFileType *type) {
- ConsiderFile cf;
- cf._path = file;
- cf._type = type;
- _files.push_back(cf);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::set_task_manager
- // Access: Published
- // Description: Specifies the task manager that is used for
- // asynchronous loads. The default is the global task
- // manager.
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::
- set_task_manager(AsyncTaskManager *task_manager) {
- _task_manager = task_manager;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::get_task_manager
- // Access: Published
- // Description: Returns the task manager that is used for
- // asynchronous loads.
- ////////////////////////////////////////////////////////////////////
- INLINE AsyncTaskManager *Loader::
- get_task_manager() const {
- return _task_manager;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::set_task_chain
- // Access: Published
- // Description: Specifies the task chain that is used for
- // asynchronous loads. The default is the initial name
- // of the Loader object.
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::
- set_task_chain(const string &task_chain) {
- _task_chain = task_chain;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::get_task_chain
- // Access: Published
- // Description: Returns the task chain that is used for
- // asynchronous loads.
- ////////////////////////////////////////////////////////////////////
- INLINE const string &Loader::
- get_task_chain() const {
- return _task_chain;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::stop_threads
- // Access: Published
- // Description: Stop any threads used for asynchronous loads.
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::
- stop_threads() {
- PT(AsyncTaskChain) chain = _task_manager->find_task_chain(_task_chain);
- if (chain != (AsyncTaskChain *)NULL) {
- chain->stop_threads();
- }
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::remove
- // Access: Published
- // Description: Removes a pending asynchronous load request. Returns
- // true if successful, false otherwise.
- ////////////////////////////////////////////////////////////////////
- INLINE bool Loader::
- remove(AsyncTask *task) {
- return _task_manager->remove(task);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::load_sync
- // Access: Published
- // Description: Loads the file immediately, waiting for it to
- // complete.
- //
- // If search is true, the file is searched for along the
- // model path; otherwise, only the exact filename is
- // loaded.
- ////////////////////////////////////////////////////////////////////
- INLINE PT(PandaNode) Loader::
- load_sync(const Filename &filename, const LoaderOptions &options) const {
- if (!_file_types_loaded) {
- load_file_types();
- }
- return load_file(filename, options);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::load_async
- // Access: Published
- // Description: Begins an asynchronous load request. To use this
- // call, first create a new ModelLoadRequest object with
- // the filename you wish to load, and then add that
- // object to the Loader with load_async. This function
- // will return immediately, and the model will be loaded
- // in the background.
- //
- // To determine when the model has completely loaded,
- // you may poll request->is_ready() from time to time,
- // or set the done_event on the request object and
- // listen for that event. When the model is ready, you
- // may retrieve it via request->get_model().
- ////////////////////////////////////////////////////////////////////
- INLINE void Loader::
- load_async(AsyncTask *request) {
- request->set_task_chain(_task_chain);
- _task_manager->add(request);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: Loader::get_global_ptr
- // Access: Published
- // Description: Returns a pointer to the global Loader. This is the
- // Loader that most code should use for loading models.
- ////////////////////////////////////////////////////////////////////
- INLINE Loader *Loader::
- get_global_ptr() {
- if (_global_ptr == (Loader *)NULL) {
- make_global_ptr();
- }
- return _global_ptr;
- }
|