#include <NvBlastTkGroup.h>

Public Member Functions | |
| virtual TkGroupWorker * | acquireWorker ()=0 |
| virtual bool | addActor (TkActor &actor)=0 |
| virtual bool | endProcess ()=0 |
| virtual uint32_t | getActorCount () const =0 |
| virtual uint32_t | getActors (TkActor **buffer, uint32_t bufferSize, uint32_t indexStart=0) const =0 |
| virtual void | getStats (TkGroupStats &stats) const =0 |
| virtual uint32_t | getWorkerCount () const =0 |
| void | process () |
| virtual void | returnWorker (TkGroupWorker *)=0 |
| virtual void | setWorkerCount (uint32_t workerCount)=0 |
| virtual uint32_t | startProcess ()=0 |
When the group's process function is called, all actors' damage buffers will be processed and turned into fracture events and the actor is split if applicable.
This work can be done in multiple threads with the help of TkGroupWorker: Instead of calling the process function, commence the procedure with startProcess which returns the number of jobs to process. Each concurrent thread uses an acquired TkGroupWorker to process the jobs. Over the whole procedure, each job must be processed once and only once. Jobs can be processed in any order. TkGroupWorkers can be returned and acquired later by another task. After processing every job and returning all the workers to the group, endProcess concludes the procedure.
| virtual TkGroupWorker* Nv::Blast::TkGroup::acquireWorker | ( | ) | [pure virtual] |
Acquire one worker to process the group concurrently on a thread. The worker must be returned with returnWorker() before endProcess() is called on its group.
| virtual bool Nv::Blast::TkGroup::addActor | ( | TkActor & | actor | ) | [pure virtual] |
Add the actor to this group, if the actor does not currently belong to a group.
| [in] | actor | The actor to add. |
| virtual bool Nv::Blast::TkGroup::endProcess | ( | ) | [pure virtual] |
Unlock this group after all jobs were processed with TkGroupWorker. All workers must have been returned with returnWorker(). This function gathers the results of the split operations on the actors in this group. Events will be dispatched to notify listeners of new and deleted actors.
Note that groups concurrently dispatching events for the same TkFamily require synchronization in the TkFamily's Listener. However, concurrent use of endProcess is not recommended in this version. It should be called from the main thread.
| virtual uint32_t Nv::Blast::TkGroup::getActorCount | ( | ) | const [pure virtual] |
The number of actors currently in this group.
| virtual uint32_t Nv::Blast::TkGroup::getActors | ( | TkActor ** | buffer, | |
| uint32_t | bufferSize, | |||
| uint32_t | indexStart = 0 | |||
| ) | const [pure virtual] |
Retrieve an array of pointers (into the user-supplied buffer) to actors.
| [out] | buffer | A user-supplied array of TkActor pointers. |
| [in] | bufferSize | The number of elements available to write into buffer. |
| [in] | indexStart | The starting index of the actor. |
| virtual void Nv::Blast::TkGroup::getStats | ( | TkGroupStats & | stats | ) | const [pure virtual] |
For profile builds only, request stats of the last successful processing. Inactive in other builds. The times and counters reported account for all the TkWorker (accumulated) taking part in the processing.
| [in] | stats | The struct to be filled in. |
| virtual uint32_t Nv::Blast::TkGroup::getWorkerCount | ( | ) | const [pure virtual] |
| NV_INLINE void Nv::Blast::TkGroup::process | ( | ) |
Helper function to process the group synchronously on a single thread.
| virtual void Nv::Blast::TkGroup::returnWorker | ( | TkGroupWorker * | ) | [pure virtual] |
Return a worker previously acquired with acquireWorker() to this TkGroup.
| [in] | The | TkGroupWorker previously acquired from this TkGroup. |
| virtual void Nv::Blast::TkGroup::setWorkerCount | ( | uint32_t | workerCount | ) | [pure virtual] |
Set the expected number of concurrent worker threads that will process this group concurrently.
| virtual uint32_t Nv::Blast::TkGroup::startProcess | ( | ) | [pure virtual] |
Lock this group for processing concurrently with TkGroupWorker. The group is unlocked again with the endProcess() function.