.\" Automatically generated by Pandoc 2.5
.\"
.TH "rtcSetGeometryOccludedFunction" "3" "" "" "Embree Ray Tracing Kernels 3"
.hy
.SS NAME
.IP
.nf
\f[C]
rtcSetGeometryOccludedFunction \- sets the callback function to
  test a user geometry for occlusion
\f[R]
.fi
.SS SYNOPSIS
.IP
.nf
\f[C]
#include <embree3/rtcore.h>

struct RTCOccludedFunctionNArguments
{
  int* valid;
  void* geometryUserPtr;
  unsigned int primID;
  struct RTCIntersectContext* context;
  struct RTCRayN* ray;
  unsigned int N;
  unsigned int geomID;
};

typedef void (*RTCOccludedFunctionN)(
  const struct RTCOccludedFunctionNArguments* args
);

void rtcSetGeometryOccludedFunction(
  RTCGeometry geometry,
  RTCOccludedFunctionN filter
);
\f[R]
.fi
.SS DESCRIPTION
.PP
The \f[C]rtcSetGeometryOccludedFunction\f[R] function registers a
ray/primitive occlusion callback function (\f[C]filter\f[R] argument)
for the specified user geometry (\f[C]geometry\f[R] argument).
.PP
Only a single callback function can be registered per geometry, and
further invocations overwrite the previously set callback function.
Passing \f[C]NULL\f[R] as function pointer disables the registered
callback function.
.PP
The registered callback function is invoked by
\f[C]rtcOccluded\f[R]\-type ray queries to test whether the rays of a
packet of variable size are occluded by a user\-defined primitive.
The callback function of type \f[C]RTCOccludedFunctionN\f[R] gets passed
a number of arguments through the
\f[C]RTCOccludedFunctionNArguments\f[R] structure.
The value \f[C]N\f[R] specifies the ray packet size, \f[C]valid\f[R]
points to an array of integers which specify whether the corresponding
ray is valid (\-1) or invalid (0), the \f[C]geometryUserPtr\f[R] member
points to the geometry user data previously set through
\f[C]rtcSetGeometryUserData\f[R], the \f[C]context\f[R] member points to
the intersection context passed to the ray query, the \f[C]ray\f[R]
member points to a ray packet of variable size \f[C]N\f[R], and the
\f[C]geomID\f[R] and \f[C]primID\f[R] member identifies the geometry ID
and primitive ID of the primitive to intersect.
.PP
The task of the callback function is to intersect each active ray from
the ray packet with the specified user primitive.
If the user\-defined primitive is missed by a ray of the ray packet, the
function should return without modifying the ray.
If an intersection of the user\-defined primitive with the ray was found
in the valid range (from \f[C]tnear\f[R] to \f[C]tfar\f[R]), it should
set the \f[C]tfar\f[R] member of the ray to \f[C]\-inf\f[R].
.PP
As a primitive might have multiple intersections with a ray, the
occlusion filter function needs to be invoked by the user geometry
occlusion callback for each encountered intersection, if filtering of
intersections is desired.
This can be achieved through the \f[C]rtcFilterOcclusion\f[R] call.
.PP
Within the user geometry occlusion function, it is safe to trace new
rays and create new scenes and geometries.
.IP
.nf
\f[C]
\f[R]
.fi
.SS EXIT STATUS
.PP
On failure an error code is set that can be queried using
\f[C]rtcGetDeviceError\f[R].
.SS SEE ALSO
.PP
[rtcSetGeometryIntersectFunction], [rtcSetGeometryUserData],
[rtcFilterOcclusion]
