godot/thirdparty/embree/kernels/geometry/triangle_intersector_moeller.h

// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "triangle.h"
#include "intersector_epilog.h"

/*! This intersector implements a modified version of the Moeller
 *  Trumbore intersector from the paper "Fast, Minimum Storage
 *  Ray-Triangle Intersection". In contrast to the paper we
 *  precalculate some factors and factor the calculations differently
 *  to allow precalculating the cross product e1 x e2. The resulting
 *  algorithm is similar to the fastest one of the paper "Optimizing
 *  Ray-Triangle Intersection via Automated Search". */

namespace embree
{
  namespace isa
  {
    template<int M, typename UVMapper>
    struct MoellerTrumboreHitM
    {};
    
    template<int M, bool early_out = true>
    struct MoellerTrumboreIntersector1
    {};
    
    template<int K, typename UVMapper>
    struct MoellerTrumboreHitK
    {};
    
    template<int M, int K>
    struct MoellerTrumboreIntersectorK
    {};
  }
}