RTCFeatureFlags(3)

๐Ÿ“ฆ
version 4.4.1 ยท 3 versions
, in ubuntu stonking

โœจ NAME โœจ

RTCFeatureFlags โ€” it's the enum that says which ray-tracing features you're enabling, bestie ๐Ÿ’…

This one lives in the Embree Ray Tracing Kernels 4 manual, section 3, and it's giving "pick your features, queen" energy ๐Ÿ‘‘


๐ŸŽ€ SYNOPSIS ๐ŸŽ€

#include <embree4/rtcore_ray.h>

enum RTCFeatureFlags
{
  RTC_FEATURE_FLAG_NONE = 0,

  RTC_FEATURE_FLAG_MOTION_BLUR = 1 << 0,

  RTC_FEATURE_FLAG_TRIANGLE = 1 << 1,
  RTC_FEATURE_FLAG_QUAD = 1 << 2,
  RTC_FEATURE_FLAG_GRID = 1 << 3,
  RTC_FEATURE_FLAG_SUBDIVISION = 1 << 4,
  RTC_FEATURE_FLAG_POINT = ... ,
  RTC_FEATURE_FLAG_CURVES = ... ,

  RTC_FEATURE_FLAG_CONE_LINEAR_CURVE = 1 << 5,
  RTC_FEATURE_FLAG_ROUND_LINEAR_CURVE  = 1 << 6,
  RTC_FEATURE_FLAG_FLAT_LINEAR_CURVE = 1 << 7,

  RTC_FEATURE_FLAG_ROUND_BEZIER_CURVE = 1 << 8,
  RTC_FEATURE_FLAG_FLAT_BEZIER_CURVE = 1 << 9,
  RTC_FEATURE_FLAG_NORMAL_ORIENTED_BEZIER_CURVE = 1 << 10,

  RTC_FEATURE_FLAG_ROUND_BSPLINE_CURVE = 1 << 11,
  RTC_FEATURE_FLAG_FLAT_BSPLINE_CURVE = 1 << 12,
  RTC_FEATURE_FLAG_NORMAL_ORIENTED_BSPLINE_CURVE = 1 << 13,

  RTC_FEATURE_FLAG_ROUND_HERMITE_CURVE = 1 << 14,
  RTC_FEATURE_FLAG_FLAT_HERMITE_CURVE = 1 << 15,
  RTC_FEATURE_FLAG_NORMAL_ORIENTED_HERMITE_CURVE = 1 << 16,

  RTC_FEATURE_FLAG_ROUND_CATMULL_ROM_CURVE = 1 << 17,
  RTC_FEATURE_FLAG_FLAT_CATMULL_ROM_CURVE = 1 << 18,
  RTC_FEATURE_FLAG_NORMAL_ORIENTED_CATMULL_ROM_CURVE = 1 << 19,

  RTC_FEATURE_FLAG_SPHERE_POINT = 1 << 20,
  RTC_FEATURE_FLAG_DISC_POINT = 1 << 21,
  RTC_FEATURE_FLAG_ORIENTED_DISC_POINT = 1 << 22,

  RTC_FEATURE_FLAG_ROUND_CURVES = ... ,
  RTC_FEATURE_FLAG_FLAT_CURVES = ... ,
  RTC_FEATURE_FLAG_NORMAL_ORIENTED_CURVES = ... ,

  RTC_FEATURE_FLAG_LINEAR_CURVES = ... ,
  RTC_FEATURE_FLAG_BEZIER_CURVES = ... ,
  RTC_FEATURE_FLAG_BSPLINE_CURVES = ... ,
  RTC_FEATURE_FLAG_HERMITE_CURVES = ... ,

  RTC_FEATURE_FLAG_INSTANCE = 1 << 23,

  RTC_FEATURE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS = 1 << 24,
  RTC_FEATURE_FLAG_FILTER_FUNCTION_IN_GEOMETRY = 1 << 25,
  RTC_FEATURE_FLAG_FILTER_FUNCTION = ... ,

  RTC_FEATURE_FLAG_USER_GEOMETRY_CALLBACK_IN_ARGUMENTS = 1 << 26,
  RTC_FEATURE_FLAG_USER_GEOMETRY_CALLBACK_IN_GEOMETRY = 1 << 27,
  RTC_FEATURE_FLAG_USER_GEOMETRY = ... ,

  RTC_FEATURE_FLAG_32_BIT_RAY_MASK = 1 << 28,

  RTC_FEATURE_FLAG_ALL = 0xffffffff
};

๐ŸŒธ DESCRIPTION ๐ŸŒธ

okay so. RTCFeatureFlags is an enum that's literally just a bit mask, and its whole job is to turn specific ray tracing features on for ray query operations โœจ You hand these feature flags over to the rtcIntersect1/4/8/16 and rtcOccluded1/4/8/16 functions, passing them through the RTCIntersectArguments and RTCOccludedArguments structures ๐Ÿซถ

The rule is simple, bestie: only a ray tracing feature whose bit is enabled in the feature mask can get used ๐Ÿ’…

And if a feature bit is NOT set? The behaviour is undefined. Not "it fails politely," not "it errors out" โ€” undefined. So the feature may work or it may not. It's giving chaos ๐Ÿ™ˆ

If you want multiple features, you combine them with a bitwise OR operation. That's it, that's the whole trick ๐Ÿ”ฅ

Why does this exist, though? The purpose of feature flags is to reduce code size on the GPU by enabling just the features you actually need to render your scene ๐ŸŽ€ On the CPU there's genuinely no need to use feature flags at all, and you can just keep the default of all features enabled (RTC_FEATURE_FLAG_ALL). Slay, no notes ๐Ÿ’–

Here's every feature you can switch on, one by one ๐Ÿ‘‡

  • RTC_FEATURE_FLAG_MOTION_BLUR โ€” turns on motion blur for all geometry types ๐Ÿ’ซ
  • RTC_FEATURE_FLAG_TRIANGLE โ€” turns on triangle geometries (RTC_GEOMETRY_TYPE_TRIANGLE) ๐Ÿ”บ
  • RTC_FEATURE_FLAG_QUAD โ€” turns on quad geometries (RTC_GEOMETRY_TYPE_QUAD) ๐Ÿ”ท
  • RTC_FEATURE_FLAG_GRID โ€” turns on grid geometries (RTC_GEOMETRY_TYPE_GRID) ๐Ÿ•ธ๏ธ
  • RTC_FEATURE_FLAG_SUBDIVISION โ€” turns on subdivision geometries (RTC_GEOMETRY_TYPE_SUBDIVISION) ๐ŸงŠ
  • RTC_FEATURE_FLAG_POINT โ€” turns on all point geometry types (RTC_GEOMETRY_TYPE_XXX_POINT) ๐Ÿ“
  • RTC_FEATURE_FLAG_CURVES โ€” turns on all curve geometry types (RTC_GEOMETRY_TYPE_XXX_YYY_CURVE) ๐Ÿฆ‹
  • RTC_FEATURE_FLAG_ROUND_CURVES โ€” turns on all round curves (RTC_GEOMETRY_TYPE_ROUND_XXX_CURVE) ๐ŸŒธ
  • RTC_FEATURE_FLAG_FLAT_CURVES โ€” turns on all flat curves (RTC_GEOMETRY_TYPE_FLAT_XXX_CURVE) ๐ŸŽ€
  • RTC_FEATURE_FLAG_NORMAL_ORIENTED_CURVES โ€” turns on all normal oriented curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_XXX_CURVE) ๐Ÿงญ
  • RTC_FEATURE_FLAG_LINEAR_CURVES โ€” turns on all linear curves (RTC_GEOMETRY_TYPE_XXX_LINEAR_CURVE) ๐Ÿ“
  • RTC_FEATURE_FLAG_BEZIER_CURVES โ€” turns on all Bรฉzier curves (RTC_GEOMETRY_TYPE_XXX_BEZIER_CURVE) โœจ
  • RTC_FEATURE_FLAG_BSPLINE_CURVES โ€” turns on all B-spline curves (RTC_GEOMETRY_TYPE_XXX_BSPLINE_CURVE) ๐ŸŒ€
  • RTC_FEATURE_FLAG_HERMITE_CURVES โ€” turns on all Hermite curves (RTC_GEOMETRY_TYPE_XXX_HERMITE_CURVE) ๐ŸŒฟ
  • RTC_FEATURE_FLAG_CONE_LINEAR_CURVE โ€” turns on the cone geometry type (RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE) ๐Ÿฆ
  • RTC_FEATURE_FLAG_ROUND_LINEAR_CURVE โ€” turns on round linear curves (RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE) ๐Ÿ’œ
  • RTC_FEATURE_FLAG_FLAT_LINEAR_CURVE โ€” turns on flat linear curves (RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE) ๐Ÿ“
  • RTC_FEATURE_FLAG_ROUND_BEZIER_CURVE โ€” turns on round Bรฉzier curves (RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE) ๐ŸŽˆ
  • RTC_FEATURE_FLAG_FLAT_BEZIER_CURVE โ€” turns on flat Bรฉzier curves (RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE) ๐ŸŽจ
  • RTC_FEATURE_FLAG_NORMAL_ORIENTED_BEZIER_CURVE โ€” turns on normal oriented Bรฉzier curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE) ๐Ÿงญ
  • RTC_FEATURE_FLAG_ROUND_BSPLINE_CURVE โ€” turns on round B-spline curves (RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE) ๐ŸŒˆ
  • RTC_FEATURE_FLAG_FLAT_BSPLINE_CURVE โ€” turns on flat B-spline curves (RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE) ๐ŸŒŠ
  • RTC_FEATURE_FLAG_NORMAL_ORIENTED_BSPLINE_CURVE โ€” turns on normal oriented B-spline curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE) ๐Ÿงญ
  • RTC_FEATURE_FLAG_ROUND_HERMITE_CURVE โ€” turns on round Hermite curves (RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE) ๐Ÿ’ซ
  • RTC_FEATURE_FLAG_FLAT_HERMITE_CURVE โ€” turns on flat Hermite curves (RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE) ๐Ÿƒ
  • RTC_FEATURE_FLAG_NORMAL_ORIENTED_HERMITE_CURVE โ€” turns on normal oriented Hermite curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_HERMITE_CURVE) ๐Ÿงญ
  • RTC_FEATURE_FLAG_ROUND_CATMULL_ROM_CURVE โ€” turns on round Catmull Rom curves (RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE) ๐ŸŒ€
  • RTC_FEATURE_FLAG_FLAT_CATMULL_ROM_CURVE โ€” turns on flat Catmull Rom curves (RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE) ๐Ÿงต
  • RTC_FEATURE_FLAG_NORMAL_ORIENTED_CATMULL_ROM_CURVE โ€” turns on normal oriented Catmull Rom curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE) ๐Ÿงญ
  • RTC_FEATURE_FLAG_SPHERE_POINT โ€” turns on the sphere geometry type (RTC_GEOMETRY_TYPE_SPHERE_POINT) ๐Ÿ”ฎ
  • RTC_FEATURE_FLAG_DISC_POINT โ€” turns on the disc geometry type (RTC_GEOMETRY_TYPE_DISC_POINT) ๐Ÿ’ฟ
  • RTC_FEATURE_FLAG_ORIENTED_DISC_POINT โ€” turns on oriented disc geometry types (RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT) ๐Ÿชฉ
  • RTC_FEATURE_FLAG_INSTANCE โ€” turns on instance geometries (RTC_GEOMETRY_TYPE_INSTANCE) ๐Ÿช†
  • RTC_FEATURE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS โ€” turns on filter functions passed through intersect arguments ๐Ÿซง
  • RTC_FEATURE_FLAG_FILTER_FUNCTION_IN_GEOMETRY โ€” turns on filter functions passed through geometry ๐Ÿซง
  • RTC_FEATURE_FLAG_FILTER_FUNCTION โ€” turns on filter functions (both the argument version and the geometry version) ๐Ÿซง
  • RTC_FEATURE_FLAG_USER_GEOMETRY_CALLBACK_IN_ARGUMENTS โ€” turns on RTC_GEOMETRY_TYPE_USER with the function pointer passed through intersect arguments ๐Ÿงš
  • RTC_FEATURE_FLAG_USER_GEOMETRY_CALLBACK_IN_GEOMETRY โ€” turns on RTC_GEOMETRY_TYPE_USER with the function pointer passed through the geometry object ๐Ÿงš
  • RTC_FEATURE_FLAG_USER_GEOMETRY โ€” turns on RTC_GEOMETRY_TYPE_USER geometries (both the argument callback version and the geometry callback version) ๐Ÿงš
  • RTC_FEATURE_FLAG_32_BIT_RAY_MASK โ€” turns on full 32 bit ray masks. If you don't use this one, only the lower 7 bits in the ray mask are handled correctly โš ๏ธ
  • RTC_FEATURE_FLAG_ALL โ€” turns on all the features (this is the default) ๐Ÿ‘‘

๐Ÿ’€ EXIT STATUS ๐Ÿ’€

crickets. Bestie there is literally nothing in this section. Not a single exit status. It's giving empty group chat at 3am ๐Ÿ˜ญ Moving on ๐Ÿ’…


๐Ÿซถ SEE ALSO ๐Ÿซถ

  • rtcIntersect1
  • rtcIntersect4/8/16
  • rtcOccluded1
  • rtcOccluded4/8/16

and that's the whole page, babe ๐Ÿ’– It came from the Embree Ray Tracing Kernels 4 docs and it's filed under RTCFeatureFlags(3) โ€” go enable exactly the features you need, keep RTC_FEATURE_FLAG_ALL on the CPU, and remember: unset bits are undefined behaviour, so don't play with that. periodt ๐ŸŽ€โœจ

๐Ÿ“ฆ where this page comes from