#include <unsafekdtreeaccel.h>
Public Member Functions | |
UnsafeKdTreeAccel (const vector< Primitive * > &p, int icost, int scost, float ebonus, int maxp, int maxDepth) | |
BBox | WorldBound () const |
bool | CanIntersect () const |
~UnsafeKdTreeAccel () | |
void | buildTree (int nodeNum, const BBox &bounds, const vector< BBox > &primBounds, int *primNums, int nprims, int depth, UnsafeBoundEdge *edges[3], int *prims0, int *prims1, int badRefines=0) |
bool | Intersect (const Ray &ray, Intersection *isect) const |
bool | IntersectP (const Ray &ray) const |
Static Public Member Functions | |
static Primitive * | CreateAccelerator (const vector< Primitive * > &prims, const ParamSet &ps) |
Private Attributes | |
BBox | bounds |
int | isectCost |
int | traversalCost |
int | maxPrims |
float | emptyBonus |
u_int | nMailboxes |
MailboxPrim * | mailboxPrims |
int | curMailboxId |
UnsafeKdAccelNode * | nodes |
int | nAllocedNodes |
int | nextFreeNode |
MemoryArena | arena |
Definition at line 118 of file unsafekdtreeaccel.h.
UnsafeKdTreeAccel::UnsafeKdTreeAccel | ( | const vector< Primitive * > & | p, | |
int | icost, | |||
int | scost, | |||
float | ebonus, | |||
int | maxp, | |||
int | maxDepth | |||
) |
Definition at line 31 of file unsafekdtree.cpp.
References lux::AllocAligned(), bounds, buildTree(), curMailboxId, lux::Primitive::FullyRefine(), Log2Int(), mailboxPrims, nAllocedNodes, nextFreeNode, nMailboxes, Round2Int(), and lux::Union().
Referenced by CreateAccelerator().
UnsafeKdTreeAccel::~UnsafeKdTreeAccel | ( | ) |
Definition at line 81 of file unsafekdtree.cpp.
References lux::FreeAligned(), mailboxPrims, nMailboxes, and nodes.
void UnsafeKdTreeAccel::buildTree | ( | int | nodeNum, | |
const BBox & | bounds, | |||
const vector< BBox > & | primBounds, | |||
int * | primNums, | |||
int | nprims, | |||
int | depth, | |||
UnsafeBoundEdge * | edges[3], | |||
int * | prims0, | |||
int * | prims1, | |||
int | badRefines = 0 | |||
) |
Definition at line 88 of file unsafekdtree.cpp.
References lux::UnsafeKdAccelNode::aboveChild, lux::AllocAligned(), arena, emptyBonus, lux::UnsafeBoundEdge::END, lux::FreeAligned(), INFINITY, lux::UnsafeKdAccelNode::initInterior(), lux::UnsafeKdAccelNode::initLeaf(), isectCost, mailboxPrims, cimg_library::cimg::max(), maxPrims, memcpy(), nAllocedNodes, nextFreeNode, nodes, lux::BBox::pMax, lux::BBox::pMin, lux::UnsafeBoundEdge::primNum, cimg_library::sort(), lux::UnsafeBoundEdge::START, lux::UnsafeBoundEdge::t, traversalCost, lux::Vector::x, lux::Vector::y, and lux::Vector::z.
Referenced by UnsafeKdTreeAccel().
bool lux::UnsafeKdTreeAccel::CanIntersect | ( | ) | const [inline, virtual] |
Reimplemented from lux::Primitive.
Definition at line 125 of file unsafekdtreeaccel.h.
Primitive * UnsafeKdTreeAccel::CreateAccelerator | ( | const vector< Primitive * > & | prims, | |
const ParamSet & | ps | |||
) | [static] |
Definition at line 389 of file unsafekdtree.cpp.
References emptyBonus, lux::ParamSet::FindOneFloat(), lux::ParamSet::FindOneInt(), isectCost, maxPrims, and UnsafeKdTreeAccel().
bool UnsafeKdTreeAccel::Intersect | ( | const Ray & | ray, | |
Intersection * | isect | |||
) | const [virtual] |
Implements lux::Primitive.
Definition at line 205 of file unsafekdtree.cpp.
References lux::UnsafeKdAccelNode::aboveChild, bounds, curMailboxId, lux::Ray::d, lux::Primitive::Intersect(), lux::BBox::IntersectP(), lux::UnsafeKdAccelNode::IsLeaf(), lux::MailboxPrim::lastMailboxId, MAX_TODO, lux::Ray::maxt, lux::KdToDo::node, nodes, lux::UnsafeKdAccelNode::nPrimitives(), lux::Ray::o, lux::UnsafeKdAccelNode::onePrimitive, lux::MailboxPrim::primitive, lux::UnsafeKdAccelNode::primitives, lux::UnsafeKdAccelNode::SplitAxis(), lux::UnsafeKdAccelNode::SplitPos(), lux::KdToDo::tmax, lux::KdToDo::tmin, lux::Vector::x, lux::Vector::y, and lux::Vector::z.
bool UnsafeKdTreeAccel::IntersectP | ( | const Ray & | ray | ) | const [virtual] |
Implements lux::Primitive.
Definition at line 300 of file unsafekdtree.cpp.
References lux::UnsafeKdAccelNode::aboveChild, bounds, curMailboxId, lux::Ray::d, lux::Primitive::IntersectP(), lux::BBox::IntersectP(), lux::UnsafeKdAccelNode::IsLeaf(), lux::MailboxPrim::lastMailboxId, MAX_TODO, lux::KdToDo::node, nodes, lux::UnsafeKdAccelNode::nPrimitives(), lux::Ray::o, lux::UnsafeKdAccelNode::onePrimitive, lux::MailboxPrim::primitive, lux::UnsafeKdAccelNode::primitives, lux::UnsafeKdAccelNode::SplitAxis(), lux::UnsafeKdAccelNode::SplitPos(), lux::KdToDo::tmax, lux::KdToDo::tmin, lux::Vector::x, lux::Vector::y, and lux::Vector::z.
BBox lux::UnsafeKdTreeAccel::WorldBound | ( | ) | const [inline, virtual] |
MemoryArena lux::UnsafeKdTreeAccel::arena [private] |
Definition at line 150 of file unsafekdtreeaccel.h.
Referenced by buildTree().
BBox lux::UnsafeKdTreeAccel::bounds [private] |
Definition at line 141 of file unsafekdtreeaccel.h.
Referenced by Intersect(), IntersectP(), UnsafeKdTreeAccel(), and WorldBound().
int lux::UnsafeKdTreeAccel::curMailboxId [mutable, private] |
Definition at line 146 of file unsafekdtreeaccel.h.
Referenced by Intersect(), IntersectP(), and UnsafeKdTreeAccel().
float lux::UnsafeKdTreeAccel::emptyBonus [private] |
Definition at line 143 of file unsafekdtreeaccel.h.
Referenced by buildTree(), and CreateAccelerator().
int lux::UnsafeKdTreeAccel::isectCost [private] |
Definition at line 142 of file unsafekdtreeaccel.h.
Referenced by buildTree(), and CreateAccelerator().
MailboxPrim* lux::UnsafeKdTreeAccel::mailboxPrims [private] |
Definition at line 145 of file unsafekdtreeaccel.h.
Referenced by buildTree(), UnsafeKdTreeAccel(), and ~UnsafeKdTreeAccel().
int lux::UnsafeKdTreeAccel::maxPrims [private] |
Definition at line 142 of file unsafekdtreeaccel.h.
Referenced by buildTree(), and CreateAccelerator().
int lux::UnsafeKdTreeAccel::nAllocedNodes [private] |
Definition at line 148 of file unsafekdtreeaccel.h.
Referenced by buildTree(), and UnsafeKdTreeAccel().
int lux::UnsafeKdTreeAccel::nextFreeNode [private] |
Definition at line 148 of file unsafekdtreeaccel.h.
Referenced by buildTree(), and UnsafeKdTreeAccel().
u_int lux::UnsafeKdTreeAccel::nMailboxes [private] |
Definition at line 144 of file unsafekdtreeaccel.h.
Referenced by UnsafeKdTreeAccel(), and ~UnsafeKdTreeAccel().
UnsafeKdAccelNode* lux::UnsafeKdTreeAccel::nodes [private] |
Definition at line 147 of file unsafekdtreeaccel.h.
Referenced by buildTree(), Intersect(), IntersectP(), and ~UnsafeKdTreeAccel().
int lux::UnsafeKdTreeAccel::traversalCost [private] |
Definition at line 142 of file unsafekdtreeaccel.h.
Referenced by buildTree().