first commit

This commit is contained in:
2026-06-22 11:49:35 +02:00
commit d805f2ba86
619 changed files with 126873 additions and 0 deletions

View File

@ -0,0 +1,100 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#ifndef __NGEOTREE__
#define __NGEOTREE__
#include "core/graphic_resource_factory.h"
#include "core/geometry.h"
#include "math/vector.h"
namespace GS {
namespace Core {
struct GeometryTraceBase
{
Geometry *g;
float i_t; ///< Distance to intersection from ray's origin.
bool backface; ///< Hit is on the back face of the polygon.
int ip; ///< Polygon index.
uint it; ///< Triangle index in polygon.
uint bi; ///< Polygon binding start index.
float u, v, w; ///< Barycentric coordinates.
Material *m;
ShaderTree *st;
};
// Raytrace result.
struct GeometryTrace : public GeometryTraceBase
{
Vector4 s; ///< Ray origin.
Vector4 d; ///< Ray direction.
bool want_closest;
bool has_i; ///< Do we have an intersection.
uint node_visited; ///< Number of nodes visited.
uint tri_test; ///< Number of triangle tested.
GeometryTrace(bool closest = true)
{
want_closest = closest;
has_i = false;
node_visited = 0;
tri_test = 0;
}
};
/*!
@short Geometry abstract tree.
@author Emmanuel Julien (ejulien@gsworks.fr)
*/
class IGeometryTree
{
protected:
sGeometry geometry;
public:
Geometry *GetGeometry() const { return geometry; }
/*!
@short Specify a fixed ray origin.
This function provides the tree implementation with an optimization
opportunity by specifying a fixed ray origin.
@note Pass NULL to remove hint.
*/
virtual void SetRayOriginHint(const Vector4 *) {}
/*!
@name Interface core functions.
@{
*/
/// Raytrace the geometry tree.
virtual void RaytraceGeometry(GeometryTrace &, const Vector4 &s, const Vector4 &d, float length = -1.f) = 0;
/// Build tree from a geometry.
virtual bool BuildFromGeometry(ResourceFactory &, Geometry *) = 0;
/// Free all internal structures.
virtual void Free() = 0;
/// @}
virtual ~IGeometryTree() {}
};
} // Core
} // GS
#endif // __NGEOTREE__