Path: blob/master/thirdparty/jolt_physics/Jolt/Core/JobSystemSingleThreaded.h
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2023 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#pragma once56#include <Jolt/Core/JobSystem.h>7#include <Jolt/Core/FixedSizeFreeList.h>89JPH_NAMESPACE_BEGIN1011/// Implementation of a JobSystem without threads, runs jobs as soon as they are added12class JPH_EXPORT JobSystemSingleThreaded final : public JobSystem13{14public:15JPH_OVERRIDE_NEW_DELETE1617/// Constructor18JobSystemSingleThreaded() = default;19explicit JobSystemSingleThreaded(uint inMaxJobs) { Init(inMaxJobs); }2021/// Initialize the job system22/// @param inMaxJobs Max number of jobs that can be allocated at any time23void Init(uint inMaxJobs);2425// See JobSystem26virtual int GetMaxConcurrency() const override { return 1; }27virtual JobHandle CreateJob(const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies = 0) override;28virtual Barrier * CreateBarrier() override;29virtual void DestroyBarrier(Barrier *inBarrier) override;30virtual void WaitForJobs(Barrier *inBarrier) override;3132protected:33// Dummy implementation of Barrier, all jobs are executed immediately34class BarrierImpl : public Barrier35{36public:37JPH_OVERRIDE_NEW_DELETE3839// See Barrier40virtual void AddJob(const JobHandle &inJob) override { /* We don't need to track jobs */ }41virtual void AddJobs(const JobHandle *inHandles, uint inNumHandles) override { /* We don't need to track jobs */ }4243protected:44/// Called by a Job to mark that it is finished45virtual void OnJobFinished(Job *inJob) override { /* We don't need to track jobs */ }46};4748// See JobSystem49virtual void QueueJob(Job *inJob) override;50virtual void QueueJobs(Job **inJobs, uint inNumJobs) override;51virtual void FreeJob(Job *inJob) override;5253/// Shared barrier since the barrier implementation does nothing54BarrierImpl mDummyBarrier;5556/// Array of jobs (fixed size)57using AvailableJobs = FixedSizeFreeList<Job>;58AvailableJobs mJobs;59};6061JPH_NAMESPACE_END626364