SuperDex Physics C++ API
Loading...
Searching...
No Matches
mochi_context.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
20#include "mochi_handle.h"
21#include "mochi_structs.h"
22
23/********************************************************************************
24 IMPORTANT: PLEASE KEEP HEADER INCLUDES TO A MINIMUM.
25 If you must include a mochi_core header, then please make sure that it only
26 declares the data types (not containing other implementation details).
27*********************************************************************************/
36
37#include <string_view>
38
39namespace superdex {
40
41class Actor;
42class AsyncScene;
43class DebugServer;
44class IKSolver;
45class Scene;
46
47class Context {
48 public:
49 //----------------------------------------------------------------------------------------------
50 // Concurrency APIs
51 //----------------------------------------------------------------------------------------------
52
53 virtual void BindThisThread() = 0;
54
55 virtual void UnbindThisThread() = 0;
56
57 virtual void SetIsSingleThreaded(bool isSingleThreaded) = 0;
58
59 [[nodiscard]] virtual bool IsSingleThreaded() const = 0;
60
61 [[nodiscard]] virtual int GetNumThreads() const = 0;
62
63 //----------------------------------------------------------------------------------------------
64 // Debugging APIs
65 //----------------------------------------------------------------------------------------------
66
67 static void EnableLogChannel(LogChannel channel, bool enable);
68
69 [[nodiscard]] MOCHI_API static bool IsLogChannelEnabled(LogChannel channel);
70
71 static void SetLogCallback(LogFn callback);
72
73 [[nodiscard]] MOCHI_API static LogFn GetLogCallback();
74
75 static void SetAssertionFailureCallback(OnAssertFn callback);
76
78
79 //----------------------------------------------------------------------------------------------
80 // Shape APIs
81 //----------------------------------------------------------------------------------------------
82
83 [[nodiscard]] virtual ShapeHandle LoadShapeFromFile(std::string_view filePath, Error& error) = 0;
84
85 [[nodiscard]] ShapeHandle
86 LoadShapeFromFile(std::string_view filePath, Real3 const& bakeScale, Error& error);
87
88 [[nodiscard]] ShapeHandle
89 LoadShapeFromFile(std::string_view filePath, TransformRT const& bakeTransform, Error& error);
90
91 [[nodiscard]] virtual ShapeHandle LoadShapeFromFile(
92 std::string_view filePath,
93 Real3 const& bakeScale,
94 TransformRT const& bakeTransform,
95 Error& error) = 0;
96
97 [[nodiscard]] virtual ShapeHandle
99
100 [[nodiscard]] ShapeHandle LoadShapeFromBytes(
101 Span<char const> fileData,
102 MeshFileType format,
103 Real3 const& bakeScale,
104 Error& error);
105
106 [[nodiscard]] ShapeHandle LoadShapeFromBytes(
107 Span<char const> fileData,
108 MeshFileType format,
109 TransformRT const& bakeTransform,
110 Error& error);
111
112 [[nodiscard]] virtual ShapeHandle LoadShapeFromBytes(
113 Span<char const> fileData,
114 MeshFileType format,
115 Real3 const& bakeScale,
116 TransformRT const& bakeTransform,
117 Error& error) = 0;
118
119 [[nodiscard]] ShapeHandle LoadShapeFromBytes(Span<char const> fileData, Error& error);
120
121 [[nodiscard]] ShapeHandle
122 LoadShapeFromBytes(Span<char const> fileData, Real3 const& bakeScale, Error& error);
123
124 [[nodiscard]] ShapeHandle
125 LoadShapeFromBytes(Span<char const> fileData, TransformRT const& bakeTransform, Error& error);
126
127 [[nodiscard]] ShapeHandle LoadShapeFromBytes(
128 Span<char const> fileData,
129 Real3 const& bakeScale,
130 TransformRT const& bakeTransform,
131 Error& error);
132
133 [[nodiscard]] virtual ShapeHandle CreateMeshShape(MeshData const& mesh, Error& error) = 0;
134
135 [[nodiscard]] virtual ShapeHandle CreateMeshShape(MeshDataView const& mesh, Error& error) = 0;
136
137 [[nodiscard]] virtual ShapeHandle CreateModelShape(ModelData const& model, Error& error) = 0;
138
139 [[nodiscard]] virtual ShapeHandle CreateModelShape(ModelDataView const& model, Error& error) = 0;
140
141 [[nodiscard]] virtual ShapeHandle
142 CreateTetMeshShape(Span<real const> coordinates, Span<int const> connectivity, Error& error) = 0;
143
144 [[nodiscard]] virtual ShapeHandle
145 CreateTriMeshShape(Span<real const> coordinates, Span<int const> connectivity, Error& error) = 0;
146
147 [[nodiscard]] virtual ShapeHandle
148 CreateSphereShape(Real3 const& center, real radius, Error& error) = 0;
149
150 [[nodiscard]] virtual ShapeHandle
151 CreatePlaneShape(Real3 const& normal, real distance, Error& error) = 0;
152
153 [[nodiscard]] virtual MeshDataView GetShapeMesh(ShapeHandle shape, Error& error) const = 0;
154 [[nodiscard]] virtual MeshDataView GetShapeSurfaceMesh(ShapeHandle shape, Error& error) const = 0;
155 [[nodiscard]] virtual MeshDataView GetShapeVisualMesh(ShapeHandle shape, Error& error) const = 0;
156
157 [[nodiscard]] virtual Aabb GetShapeAabb(ShapeHandle shape, Error& error) const = 0;
158
160 ShapeHandle shape,
161 Error& error) const = 0;
162
163 virtual void ReleaseShape(ShapeHandle shape) = 0;
164
165 [[nodiscard]] virtual int GetNumShapes() const = 0;
166
167 virtual void EnableFileCache(bool enable) = 0;
168
169 [[nodiscard]] virtual bool IsFileCacheEnabled() const = 0;
170
171 virtual void ClearFileCache() = 0;
172
173 virtual void ClearFileFromCache(std::string_view filePath) = 0;
174
175 //----------------------------------------------------------------------------------------------
176 // Scene APIs
177 //----------------------------------------------------------------------------------------------
178
179 [[nodiscard]] virtual Scene* CreateScene(std::string_view name) = 0;
180
181 virtual void DestroyScene(Scene* scene) = 0;
182
183 virtual Scene* GetScene(SceneHandle handle) = 0;
184
185 virtual Scene const* GetScene(SceneHandle handle) const = 0;
186
187 [[nodiscard]] virtual bool IsValidScene(Scene const* scene) const = 0;
188
189 //----------------------------------------------------------------------------------------------
190 // AsyncScene APIs
191 //----------------------------------------------------------------------------------------------
192
193 [[nodiscard]] virtual AsyncScene* CreateAsyncScene(std::string_view name, Error& error) = 0;
194
195 [[nodiscard]] virtual AsyncScene* CreateAsyncScenePaused(std::string_view name, Error& error) = 0;
196
197 virtual void DestroyAsyncScene(AsyncScene* scene) = 0;
198
199 [[nodiscard]] virtual bool IsValidAsyncScene(AsyncScene const* scene) const = 0;
200
201 //----------------------------------------------------------------------------------------------
202 // DebugServer APIs
203 //----------------------------------------------------------------------------------------------
204
206 virtual DebugServer const& GetDebugServer() const = 0;
207
208 protected:
209 MOCHI_API static void EnableLogChannelInternal(LogChannel channel, bool enable);
211 MOCHI_API static void SetAssertionFailureCallbackInternal(OnAssertFn callback);
212
213 // Please use DestroyContext. Do not delete the pointer directly.
214 virtual ~Context() = default;
215};
216
217[[nodiscard]] MOCHI_API Context* CreateContext(int numWorkerThreads = -1);
218
220
221} // namespace superdex
222
223#include "mochi_context_inl.h"
Represents a simulated body (actor) in a scene.
Definition mochi_actor.h:51
Manages a simulation scene that steps asynchronously using the SuperDex Physics worker pool.
Main entry point for SuperDex Physics simulation.
virtual ~Context()=default
static bool IsLogChannelEnabled(LogChannel channel)
Return true if messages on the specified log channel are enabled.
virtual MeshDataView GetShapeSurfaceMesh(ShapeHandle shape, Error &error) const =0
Get a view of the shape's surface mesh data.
virtual void ClearFileCache()=0
Release all shapes that are being preserved by the file cache (if any).
virtual MeshDataView GetShapeMesh(ShapeHandle shape, Error &error) const =0
Get a view of the shape's main mesh data.
virtual ShapeHandle CreateMeshShape(MeshData const &mesh, Error &error)=0
Create a shape using in-memory mesh data, so that it can be used to create actors.
virtual AsyncScene * CreateAsyncScenePaused(std::string_view name, Error &error)=0
Create a new AsyncScene that will initially be in the paused state.
static void EnableLogChannel(LogChannel channel, bool enable)
Enable or disable log messages on the specified channel.
static void EnableLogChannelInternal(LogChannel channel, bool enable)
virtual ShapeHandle LoadShapeFromBytes(Span< char const > fileData, MeshFileType format, Error &error)=0
Load a shape from a file of supported format, where the file has already been loaded into memory,...
virtual bool IsValidScene(Scene const *scene) const =0
Check if a scene is valid (not destroyed), and belongs to this Context.
virtual AsyncScene * CreateAsyncScene(std::string_view name, Error &error)=0
Create a new AsyncScene.
virtual DebugServer & GetDebugServer()=0
Get the debug server for this context.
static OnAssertFn GetAssertionFailureCallback()
Get the function currently being used to report assertion failures.
virtual bool IsValidAsyncScene(AsyncScene const *scene) const =0
Check if an AsyncScene is valid (not destroyed), and belongs to this Context.
virtual void ClearFileFromCache(std::string_view filePath)=0
Release all cached entries for a given shape file.
virtual bool IsSingleThreaded() const =0
Return true if running in single-threaded mode.
virtual void ReleaseShape(ShapeHandle shape)=0
Release a shape handle.
virtual ShapeHandle CreateSphereShape(Real3 const &center, real radius, Error &error)=0
Create an implicit sphere shape.
virtual ShapeHandle CreatePlaneShape(Real3 const &normal, real distance, Error &error)=0
Create an implicit plane with infinite extents.
virtual void DestroyAsyncScene(AsyncScene *scene)=0
Immediately stop and destroy an AsyncScene and all its actors and constraints.
virtual ShapeHandle CreateMeshShape(MeshDataView const &mesh, Error &error)=0
Create a shape using in-memory mesh data, so that it can be used to create actors.
virtual Scene * GetScene(SceneHandle handle)=0
Get a pointer to a scene by its handle.
virtual void SetIsSingleThreaded(bool isSingleThreaded)=0
Enable or disable single-threaded mode.
virtual ShapeHandle LoadShapeFromFile(std::string_view filePath, Real3 const &bakeScale, TransformRT const &bakeTransform, Error &error)=0
Load a shape from a file of supported format, and bake in some scale, rotation, and translation.
virtual int GetNumShapes() const =0
Get the number of shape handles that have been created/loaded and have not yet been released.
virtual Aabb GetShapeAabb(ShapeHandle shape, Error &error) const =0
Get an axis-aligned bounding box (AABB) that contains the shape, in its local coordinate frame.
virtual bool IsFileCacheEnabled() const =0
Return true if the file cache feature is enabled.
virtual void UnbindThisThread()=0
Unbind the calling thread from this Context.
static void SetLogCallbackInternal(LogFn callback)
virtual Scene const * GetScene(SceneHandle handle) const =0
Get a const pointer to a scene by its handle.
virtual void BindThisThread()=0
Bind the calling thread to this Context.
virtual void DestroyScene(Scene *scene)=0
Immediately destroy a scene and all its actors and constraints.
virtual ArticulatedShapeInfo GetArticulatedShapeInfo(ShapeHandle shape, Error &error) const =0
Get information about an articulated shape.
static void SetLogCallback(LogFn callback)
Optionally provide a callback function to redirect SuperDex Physics logging.
virtual ShapeHandle LoadShapeFromBytes(Span< char const > fileData, MeshFileType format, Real3 const &bakeScale, TransformRT const &bakeTransform, Error &error)=0
Load a shape from a file of supported format, where the file has already been loaded into memory,...
virtual ShapeHandle CreateModelShape(ModelDataView const &model, Error &error)=0
Create a shape using in-memory model data, so that it can be used to create actors.
virtual ShapeHandle CreateTetMeshShape(Span< real const > coordinates, Span< int const > connectivity, Error &error)=0
Create a tetrahedral mesh shape using in-memory data.
static void SetAssertionFailureCallback(OnAssertFn callback)
Optionally provide a callback function to customize the way in which assertion failures are reported.
virtual int GetNumThreads() const =0
Return the number of worker threads available to execute asynchronous tasks.
virtual ShapeHandle CreateTriMeshShape(Span< real const > coordinates, Span< int const > connectivity, Error &error)=0
Create a triangle mesh shape using in-memory data.
virtual Scene * CreateScene(std::string_view name)=0
Create a new Scene.
virtual DebugServer const & GetDebugServer() const =0
Get a const reference to the debug server for this context.
virtual void EnableFileCache(bool enable)=0
Enable or disable the file cache.
virtual MeshDataView GetShapeVisualMesh(ShapeHandle shape, Error &error) const =0
Get a view of the shape's visual mesh data, including skinning data if available.
static LogFn GetLogCallback()
Get the function currently being used to output logging.
virtual ShapeHandle CreateModelShape(ModelData const &model, Error &error)=0
Create a shape using in-memory model data, so that it can be used to create actors.
virtual ShapeHandle LoadShapeFromFile(std::string_view filePath, Error &error)=0
Load a shape from a file of supported format.
Server API to enable remote debugging and visualization.
Represents a simulation scene.
Definition mochi_scene.h:45
#define MOCHI_API
Context * CreateContext(int numWorkerThreads=-1)
Initialize SuperDex Physics by creating a Context object.
void DestroyContext(Context *context)
Shut down SuperDex Physics by destroying the Context object.
std::function< void(LogChannel, char const *message, char const *file, int line)> LogFn
Definition log.h:65
LogChannel
Definition log.h:37
MeshFileType
Mesh file format hint for Context::LoadShapeFromBytes and model-loading APIs that read from byte buff...
Definition model_data.h:320
NdArray< real, 3 > Real3
Definition nd_array.h:106
std::function< bool(char const *condition, char const *message, char const *file, int line)> OnAssertFn
Callback invoked when an assertion fails.
Definition debug.h:140
Information describing an articulated shape's kinematic structure.
A non-owning view of the mesh data for a Mochi actor or model file.
Definition mesh_data.h:218
Mesh data for a Mochi actor or model file.
Definition mesh_data.h:157
A non-owning view of the contents of a Mochi model file.
Definition model_data.h:257
The contents of a Mochi model file.
Definition model_data.h:185
Unique identifier for a Scene within a Context.
Handle to a shape (mesh, sphere, plane, etc.) within a Context.