Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/embree/include/embree4/rtcore_scene.h
9905 views
1
// Copyright 2009-2021 Intel Corporation
2
// SPDX-License-Identifier: Apache-2.0
3
4
#pragma once
5
6
#include "rtcore_device.h"
7
8
RTC_NAMESPACE_BEGIN
9
10
/* Opaque traversable type */
11
typedef struct RTCTraversableTy* RTCTraversable;
12
13
/* Forward declarations for ray structures */
14
struct RTCRayHit;
15
struct RTCRayHit4;
16
struct RTCRayHit8;
17
struct RTCRayHit16;
18
19
/* Scene flags */
20
enum RTCSceneFlags
21
{
22
RTC_SCENE_FLAG_NONE = 0,
23
RTC_SCENE_FLAG_DYNAMIC = (1 << 0),
24
RTC_SCENE_FLAG_COMPACT = (1 << 1),
25
RTC_SCENE_FLAG_ROBUST = (1 << 2),
26
RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS = (1 << 3),
27
RTC_SCENE_FLAG_PREFETCH_USM_SHARED_ON_GPU = (1 << 4),
28
};
29
30
/* Additional arguments for rtcIntersect1/4/8/16 calls */
31
struct RTCIntersectArguments
32
{
33
enum RTCRayQueryFlags flags; // intersection flags
34
enum RTCFeatureFlags feature_mask; // selectively enable features for traversal
35
struct RTCRayQueryContext* context; // optional pointer to ray query context
36
RTCFilterFunctionN filter; // filter function to execute
37
RTCIntersectFunctionN intersect; // user geometry intersection callback to execute
38
#if RTC_MIN_WIDTH
39
float minWidthDistanceFactor; // curve radius is set to this factor times distance to ray origin
40
#endif
41
};
42
43
/* Initializes intersection arguments. */
44
RTC_FORCEINLINE void rtcInitIntersectArguments(struct RTCIntersectArguments* args)
45
{
46
args->flags = RTC_RAY_QUERY_FLAG_INCOHERENT;
47
args->feature_mask = RTC_FEATURE_FLAG_ALL;
48
args->context = NULL;
49
args->filter = NULL;
50
args->intersect = NULL;
51
52
#if RTC_MIN_WIDTH
53
args->minWidthDistanceFactor = 0.0f;
54
#endif
55
}
56
57
/* Additional arguments for rtcOccluded1/4/8/16 calls */
58
struct RTCOccludedArguments
59
{
60
enum RTCRayQueryFlags flags; // intersection flags
61
enum RTCFeatureFlags feature_mask; // selectively enable features for traversal
62
struct RTCRayQueryContext* context; // optional pointer to ray query context
63
RTCFilterFunctionN filter; // filter function to execute
64
RTCOccludedFunctionN occluded; // user geometry occlusion callback to execute
65
66
#if RTC_MIN_WIDTH
67
float minWidthDistanceFactor; // curve radius is set to this factor times distance to ray origin
68
#endif
69
};
70
71
/* Initializes an intersection arguments. */
72
RTC_FORCEINLINE void rtcInitOccludedArguments(struct RTCOccludedArguments* args)
73
{
74
args->flags = RTC_RAY_QUERY_FLAG_INCOHERENT;
75
args->feature_mask = RTC_FEATURE_FLAG_ALL;
76
args->context = NULL;
77
args->filter = NULL;
78
args->occluded = NULL;
79
80
#if RTC_MIN_WIDTH
81
args->minWidthDistanceFactor = 0.0f;
82
#endif
83
}
84
85
/* Creates a new scene. */
86
RTC_API RTCScene rtcNewScene(RTCDevice device);
87
88
/* Returns the device the scene got created in. The reference count of
89
* the device is incremented by this function. */
90
RTC_API RTCDevice rtcGetSceneDevice(RTCScene hscene);
91
92
/* Retains the scene (increments the reference count). */
93
RTC_API void rtcRetainScene(RTCScene scene);
94
95
/* Releases the scene (decrements the reference count). */
96
RTC_API void rtcReleaseScene(RTCScene scene);
97
98
/* Returns the traversable object of the scene which can be passed to ray queries. */
99
RTC_API RTCTraversable rtcGetSceneTraversable(RTCScene scene);
100
101
/* Attaches the geometry to a scene. */
102
RTC_API unsigned int rtcAttachGeometry(RTCScene scene, RTCGeometry geometry);
103
104
/* Attaches the geometry to a scene using the specified geometry ID. */
105
RTC_API void rtcAttachGeometryByID(RTCScene scene, RTCGeometry geometry, unsigned int geomID);
106
107
/* Detaches the geometry from the scene. */
108
RTC_API void rtcDetachGeometry(RTCScene scene, unsigned int geomID);
109
110
/* Gets a geometry handle from the scene. This function is not thread safe and should get used during rendering. */
111
RTC_API RTCGeometry rtcGetGeometry(RTCScene scene, unsigned int geomID);
112
113
/* Gets a geometry handle from the scene. This function is thread safe and should NOT get used during rendering. */
114
RTC_API RTCGeometry rtcGetGeometryThreadSafe(RTCScene scene, unsigned int geomID);
115
116
117
/* Commits the scene. */
118
RTC_API void rtcCommitScene(RTCScene scene);
119
120
/* Commits the scene from multiple threads. */
121
RTC_API void rtcJoinCommitScene(RTCScene scene);
122
123
124
/* Progress monitor callback function */
125
typedef bool (*RTCProgressMonitorFunction)(void* ptr, double n);
126
127
/* Sets the progress monitor callback function of the scene. */
128
RTC_API void rtcSetSceneProgressMonitorFunction(RTCScene scene, RTCProgressMonitorFunction progress, void* ptr);
129
130
/* Sets the build quality of the scene. */
131
RTC_API void rtcSetSceneBuildQuality(RTCScene scene, enum RTCBuildQuality quality);
132
133
/* Sets the scene flags. */
134
RTC_API void rtcSetSceneFlags(RTCScene scene, enum RTCSceneFlags flags);
135
136
/* Returns the scene flags. */
137
RTC_API enum RTCSceneFlags rtcGetSceneFlags(RTCScene scene);
138
139
/* Returns the axis-aligned bounds of the scene. */
140
RTC_API void rtcGetSceneBounds(RTCScene scene, struct RTCBounds* bounds_o);
141
142
/* Returns the linear axis-aligned bounds of the scene. */
143
RTC_API void rtcGetSceneLinearBounds(RTCScene scene, struct RTCLinearBounds* bounds_o);
144
145
#if !defined(__SYCL_DEVICE_ONLY__)
146
147
/* Gets the user-defined data pointer of the geometry. This function is not thread safe and should get used during rendering. */
148
RTC_SYCL_API void* rtcGetGeometryUserDataFromScene(RTCScene scene, unsigned int geomID);
149
150
/* Returns the interpolated transformation of an instance for the specified time. */
151
RTC_SYCL_API void rtcGetGeometryTransformFromScene(RTCScene scene, unsigned int geomID, float time, enum RTCFormat format, void* xfm);
152
153
/* Perform a closest point query of the scene. */
154
RTC_API bool rtcPointQuery(RTCScene scene, struct RTCPointQuery* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void* userPtr);
155
156
/* Perform a closest point query with a packet of 4 points with the scene. */
157
RTC_API bool rtcPointQuery4(const int* valid, RTCScene scene, struct RTCPointQuery4* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
158
159
/* Perform a closest point query with a packet of 4 points with the scene. */
160
RTC_API bool rtcPointQuery8(const int* valid, RTCScene scene, struct RTCPointQuery8* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
161
162
/* Perform a closest point query with a packet of 4 points with the scene. */
163
RTC_API bool rtcPointQuery16(const int* valid, RTCScene scene, struct RTCPointQuery16* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
164
165
166
/* Intersects a single ray with the scene. */
167
RTC_SYCL_API void rtcIntersect1(RTCScene scene, struct RTCRayHit* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
168
169
/* Intersects a packet of 4 rays with the scene. */
170
RTC_API void rtcIntersect4(const int* valid, RTCScene scene, struct RTCRayHit4* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
171
172
/* Intersects a packet of 8 rays with the scene. */
173
RTC_API void rtcIntersect8(const int* valid, RTCScene scene, struct RTCRayHit8* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
174
175
/* Intersects a packet of 16 rays with the scene. */
176
RTC_API void rtcIntersect16(const int* valid, RTCScene scene, struct RTCRayHit16* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
177
178
179
/* Forwards ray inside user geometry callback. */
180
RTC_SYCL_API void rtcForwardIntersect1(const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID);
181
182
/* Forwards ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
183
RTC_SYCL_API void rtcForwardIntersect1Ex(const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
184
185
/* Forwards ray packet of size 4 inside user geometry callback. */
186
RTC_API void rtcForwardIntersect4(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID);
187
188
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
189
RTC_API void rtcForwardIntersect4Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID, unsigned int primInstID);
190
191
/* Forwards ray packet of size 8 inside user geometry callback. */
192
RTC_API void rtcForwardIntersect8(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID);
193
194
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
195
RTC_API void rtcForwardIntersect8Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID, unsigned int primInstID);
196
197
/* Forwards ray packet of size 16 inside user geometry callback. */
198
RTC_API void rtcForwardIntersect16(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID);
199
200
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
201
RTC_API void rtcForwardIntersect16Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID, unsigned int primInstID);
202
203
204
/* Tests a single ray for occlusion with the scene. */
205
RTC_SYCL_API void rtcOccluded1(RTCScene scene, struct RTCRay* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
206
207
/* Tests a packet of 4 rays for occlusion occluded with the scene. */
208
RTC_API void rtcOccluded4(const int* valid, RTCScene scene, struct RTCRay4* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
209
210
/* Tests a packet of 8 rays for occlusion with the scene. */
211
RTC_API void rtcOccluded8(const int* valid, RTCScene scene, struct RTCRay8* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
212
213
/* Tests a packet of 16 rays for occlusion with the scene. */
214
RTC_API void rtcOccluded16(const int* valid, RTCScene scene, struct RTCRay16* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
215
216
217
/* Forwards single occlusion ray inside user geometry callback. */
218
RTC_SYCL_API void rtcForwardOccluded1(const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID);
219
220
/* Forwards single occlusion ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
221
RTC_SYCL_API void rtcForwardOccluded1Ex(const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
222
223
/* Forwards occlusion ray packet of size 4 inside user geometry callback. */
224
RTC_API void rtcForwardOccluded4(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID);
225
226
/* Forwards occlusion ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
227
RTC_API void rtcForwardOccluded4Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID, unsigned int instPrimID);
228
229
/* Forwards occlusion ray packet of size 8 inside user geometry callback. */
230
RTC_API void rtcForwardOccluded8(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID);
231
232
/* Forwards occlusion ray packet of size 8 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
233
RTC_API void rtcForwardOccluded8Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID, unsigned int instPrimID);
234
235
/* Forwards occlusion ray packet of size 16 inside user geometry callback. */
236
RTC_API void rtcForwardOccluded16(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID);
237
238
/* Forwards occlusion ray packet of size 16 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
239
RTC_API void rtcForwardOccluded16Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID, unsigned int instPrimID);
240
241
#endif
242
243
/* Gets the user-defined data pointer of the geometry. This function is not thread safe and should get used during rendering. */
244
RTC_SYCL_API void* rtcGetGeometryUserDataFromTraversable(RTCTraversable traversable, unsigned int geomID);
245
246
/* Returns the interpolated transformation of an instance for the specified time. */
247
RTC_SYCL_API void rtcGetGeometryTransformFromTraversable(RTCTraversable traversable, unsigned int geomID, float time, enum RTCFormat format, void* xfm);
248
249
/* Perform a closest point query of the scene. */
250
RTC_API bool rtcTraversablePointQuery(RTCTraversable traversable, struct RTCPointQuery* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void* userPtr);
251
252
/* Perform a closest point query with a packet of 4 points with the scene. */
253
RTC_API bool rtcTraversablePointQuery4(const int* valid, RTCTraversable traversable, struct RTCPointQuery4* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
254
255
/* Perform a closest point query with a packet of 4 points with the scene. */
256
RTC_API bool rtcTraversablePointQuery8(const int* valid, RTCTraversable traversable, struct RTCPointQuery8* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
257
258
/* Perform a closest point query with a packet of 4 points with the scene. */
259
RTC_API bool rtcTraversablePointQuery16(const int* valid, RTCTraversable traversable, struct RTCPointQuery16* query, struct RTCPointQueryContext* context, RTCPointQueryFunction queryFunc, void** userPtr);
260
261
262
/* Intersects a single ray with the scene. */
263
RTC_SYCL_API void rtcTraversableIntersect1(RTCTraversable traversable, struct RTCRayHit* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
264
265
/* Intersects a packet of 4 rays with the scene. */
266
RTC_API void rtcTraversableIntersect4(const int* valid, RTCTraversable traversable, struct RTCRayHit4* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
267
268
/* Intersects a packet of 8 rays with the scene. */
269
RTC_API void rtcTraversableIntersect8(const int* valid, RTCTraversable traversable, struct RTCRayHit8* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
270
271
/* Intersects a packet of 16 rays with the scene. */
272
RTC_API void rtcTraversableIntersect16(const int* valid, RTCTraversable traversable, struct RTCRayHit16* rayhit, struct RTCIntersectArguments* args RTC_OPTIONAL_ARGUMENT);
273
274
275
/* Forwards ray inside user geometry callback. */
276
RTC_SYCL_API void rtcTraversableForwardIntersect1(const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay* ray, unsigned int instID);
277
278
/* Forwards ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
279
RTC_SYCL_API void rtcTraversableForwardIntersect1Ex(const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
280
281
/* Forwards ray packet of size 4 inside user geometry callback. */
282
RTC_API void rtcTraversableForwardIntersect4(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay4* ray, unsigned int instID);
283
284
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
285
RTC_API void rtcTraversableForwardIntersect4Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay4* ray, unsigned int instID, unsigned int primInstID);
286
287
/* Forwards ray packet of size 8 inside user geometry callback. */
288
RTC_API void rtcTraversableForwardIntersect8(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay8* ray, unsigned int instID);
289
290
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
291
RTC_API void rtcTraversableForwardIntersect8Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay8* ray, unsigned int instID, unsigned int primInstID);
292
293
/* Forwards ray packet of size 16 inside user geometry callback. */
294
RTC_API void rtcTraversableForwardIntersect16(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay16* ray, unsigned int instID);
295
296
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
297
RTC_API void rtcTraversableForwardIntersect16Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCTraversable traversable, struct RTCRay16* ray, unsigned int instID, unsigned int primInstID);
298
299
300
/* Tests a single ray for occlusion with the scene. */
301
RTC_SYCL_API void rtcTraversableOccluded1(RTCTraversable traversable, struct RTCRay* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
302
303
/* Tests a packet of 4 rays for occlusion occluded with the scene. */
304
RTC_API void rtcTraversableOccluded4(const int* valid, RTCTraversable traversable, struct RTCRay4* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
305
306
/* Tests a packet of 8 rays for occlusion with the scene. */
307
RTC_API void rtcTraversableOccluded8(const int* valid, RTCTraversable traversable, struct RTCRay8* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
308
309
/* Tests a packet of 16 rays for occlusion with the scene. */
310
RTC_API void rtcTraversableOccluded16(const int* valid, RTCTraversable traversable, struct RTCRay16* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
311
312
313
/* Forwards single occlusion ray inside user geometry callback. */
314
RTC_SYCL_API void rtcTraversableForwardOccluded1(const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay* ray, unsigned int instID);
315
316
/* Forwards single occlusion ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
317
RTC_SYCL_API void rtcTraversableForwardOccluded1Ex(const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
318
319
/* Forwards occlusion ray packet of size 4 inside user geometry callback. */
320
RTC_API void rtcTraversableForwardOccluded4(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay4* ray, unsigned int instID);
321
322
/* Forwards occlusion ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
323
RTC_API void rtcTraversableForwardOccluded4Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay4* ray, unsigned int instID, unsigned int instPrimID);
324
325
/* Forwards occlusion ray packet of size 8 inside user geometry callback. */
326
RTC_API void rtcTraversableForwardOccluded8(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay8* ray, unsigned int instID);
327
328
/* Forwards occlusion ray packet of size 8 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
329
RTC_API void rtcTraversableForwardOccluded8Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay8* ray, unsigned int instID, unsigned int instPrimID);
330
331
/* Forwards occlusion ray packet of size 16 inside user geometry callback. */
332
RTC_API void rtcTraversableForwardOccluded16(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay16* ray, unsigned int instID);
333
334
/* Forwards occlusion ray packet of size 16 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
335
RTC_API void rtcTraversableForwardOccluded16Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCTraversable traversable, struct RTCRay16* ray, unsigned int instID, unsigned int instPrimID);
336
337
338
/*! collision callback */
339
struct RTCCollision { unsigned int geomID0; unsigned int primID0; unsigned int geomID1; unsigned int primID1; };
340
typedef void (*RTCCollideFunc) (void* userPtr, struct RTCCollision* collisions, unsigned int num_collisions);
341
342
/*! Performs collision detection of two scenes */
343
RTC_API void rtcCollide (RTCScene scene0, RTCScene scene1, RTCCollideFunc callback, void* userPtr);
344
345
#if defined(__cplusplus)
346
347
/* Helper for easily combining scene flags */
348
inline RTCSceneFlags operator|(RTCSceneFlags a, RTCSceneFlags b) {
349
return (RTCSceneFlags)((size_t)a | (size_t)b);
350
}
351
352
#endif
353
354
RTC_NAMESPACE_END
355
356
357