#define MAX_RAYS 5

struct Ray {
	vec3 position;
	ivec3 index;
	vec3 direction;

	// 0 <= tMin < tHit <= tMax <= inf
	float tMin = 0.0;
	float tMax = 1.0 / 0.0; // inf
}
struct Hit {
	Ray ray; // ray that produced this hit

	float tHit;
	vec3 position;
	ivec3 index;
};

void AnyHit() {
	// any hit with any geometry
	// can't spawn new rays
	// controls transparency & alpha testing
}
void ClosestHit() {
	// closest hit with any geometry
}
void Miss() {
	// no intersection with any geometry
}
void Intersection() {
	// primitive intersection shader, determines where a primitive was hit
}

void ProcessRays() {
	// potential rays
	bool rayIsProcessed[MAX_RAYS];
	Ray ray[MAX_RAYS];
}
