light: drop IntersectSingleModel api
This commit is contained in:
parent
0eb6864744
commit
102bdc49f0
|
|
@ -53,9 +53,6 @@ qboolean TestSky(const vec3_t start, const vec3_t dirn, const dmodel_t *self);
|
||||||
qboolean TestLight(const vec3_t start, const vec3_t stop, const dmodel_t *self);
|
qboolean TestLight(const vec3_t start, const vec3_t stop, const dmodel_t *self);
|
||||||
hittype_t DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmodel_t *self, vec_t *hitdist_out, plane_t *hitplane_out, const bsp2_dface_t **face_out);
|
hittype_t DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmodel_t *self, vec_t *hitdist_out, plane_t *hitplane_out, const bsp2_dface_t **face_out);
|
||||||
|
|
||||||
// used for CalcPoints
|
|
||||||
bool IntersectSingleModel(const vec3_t start, const vec3_t dir, vec_t dist, const dmodel_t *self, vec_t *hitdist_out);
|
|
||||||
|
|
||||||
class raystream_t {
|
class raystream_t {
|
||||||
public:
|
public:
|
||||||
virtual void pushRay(int i, const vec_t *origin, const vec3_t dir, float dist, const dmodel_t *selfshadow, const vec_t *color = nullptr, const vec_t *normalcontrib = nullptr) = 0;
|
virtual void pushRay(int i, const vec_t *origin, const vec3_t dir, float dist, const dmodel_t *selfshadow, const vec_t *color = nullptr, const vec_t *normalcontrib = nullptr) = 0;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ void Embree_TraceInit(const bsp2_t *bsp);
|
||||||
qboolean Embree_TestSky(const vec3_t start, const vec3_t dirn, const dmodel_t *self);
|
qboolean Embree_TestSky(const vec3_t start, const vec3_t dirn, const dmodel_t *self);
|
||||||
qboolean Embree_TestLight(const vec3_t start, const vec3_t stop, const dmodel_t *self);
|
qboolean Embree_TestLight(const vec3_t start, const vec3_t stop, const dmodel_t *self);
|
||||||
hittype_t Embree_DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmodel_t *self, vec_t *hitdist_out, plane_t *hitplane_out, const bsp2_dface_t **face_out);
|
hittype_t Embree_DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmodel_t *self, vec_t *hitdist_out, plane_t *hitplane_out, const bsp2_dface_t **face_out);
|
||||||
bool Embree_IntersectSingleModel(const vec3_t start, const vec3_t dir, vec_t dist, const dmodel_t *self, vec_t *hitdist_out);
|
|
||||||
|
|
||||||
raystream_t *Embree_MakeRayStream(int maxrays);
|
raystream_t *Embree_MakeRayStream(int maxrays);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -775,19 +775,6 @@ hittype_t DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmo
|
||||||
Error("no backend available");
|
Error("no backend available");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IntersectSingleModel(const vec3_t start, const vec3_t dir, vec_t dist, const dmodel_t *self, vec_t *hitdist_out)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_EMBREE
|
|
||||||
if (rtbackend == backend_embree) {
|
|
||||||
return Embree_IntersectSingleModel(start, dir, dist, self, hitdist_out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (rtbackend == backend_bsp) {
|
|
||||||
return BSP_IntersectSingleModel(start, dir, dist, self, hitdist_out);
|
|
||||||
}
|
|
||||||
Error("no backend available");
|
|
||||||
}
|
|
||||||
|
|
||||||
class bsp_ray_t {
|
class bsp_ray_t {
|
||||||
public:
|
public:
|
||||||
int _pointindex;
|
int _pointindex;
|
||||||
|
|
|
||||||
|
|
@ -155,29 +155,6 @@ CreateGeometryFromWindings(RTCScene scene, const std::vector<winding_t *> &windi
|
||||||
rtcUnmapBuffer(scene, geomID, RTC_INDEX_BUFFER);
|
rtcUnmapBuffer(scene, geomID, RTC_INDEX_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a scene with just the faces in this model,
|
|
||||||
// used by CalcPoints.
|
|
||||||
// Liquids are left out but sky faces are included
|
|
||||||
RTCScene CreatePerModelScene(RTCDevice device, const bsp2_t *bsp, const dmodel_t *model) {
|
|
||||||
std::vector<const bsp2_dface_t *> faces;
|
|
||||||
|
|
||||||
for (int i=0; i<model->numfaces; i++) {
|
|
||||||
const bsp2_dface_t *face = &bsp->dfaces[model->firstface + i];
|
|
||||||
|
|
||||||
const char *texname = Face_TextureName(bsp, face);
|
|
||||||
if (texname[0] == '*') {
|
|
||||||
// ignore liquids
|
|
||||||
} else {
|
|
||||||
faces.push_back(face);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RTCScene scene = rtcDeviceNewScene(device, RTC_SCENE_STATIC | RTC_SCENE_COHERENT, RTC_INTERSECT1);
|
|
||||||
sceneinfo geom = CreateGeometry(bsp, scene, faces);
|
|
||||||
rtcCommit(scene);
|
|
||||||
return scene;
|
|
||||||
}
|
|
||||||
|
|
||||||
RTCDevice device;
|
RTCDevice device;
|
||||||
RTCScene scene;
|
RTCScene scene;
|
||||||
/* global shadow casters */
|
/* global shadow casters */
|
||||||
|
|
@ -355,8 +332,6 @@ Embree_FilterFuncN(int* valid,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<RTCScene> perModelScenes;
|
|
||||||
|
|
||||||
// building faces for skip-textured bmodels
|
// building faces for skip-textured bmodels
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
@ -597,12 +572,6 @@ Embree_TraceInit(const bsp2_t *bsp)
|
||||||
Error("embree must be built with ray masks disabled");
|
Error("embree must be built with ray masks disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up per-model scenes, used for CalcPoints
|
|
||||||
for (int i=0; i<bsp->nummodels; i++) {
|
|
||||||
perModelScenes.push_back(CreatePerModelScene(device, bsp, &bsp->dmodels[i]));
|
|
||||||
}
|
|
||||||
Q_assert(perModelScenes.size() == bsp->nummodels);
|
|
||||||
|
|
||||||
scene = rtcDeviceNewScene(device, RTC_SCENE_STATIC | RTC_SCENE_COHERENT, RTC_INTERSECT1 | RTC_INTERSECT_STREAM);
|
scene = rtcDeviceNewScene(device, RTC_SCENE_STATIC | RTC_SCENE_COHERENT, RTC_INTERSECT1 | RTC_INTERSECT_STREAM);
|
||||||
skygeom = CreateGeometry(bsp, scene, skyfaces);
|
skygeom = CreateGeometry(bsp, scene, skyfaces);
|
||||||
solidgeom = CreateGeometry(bsp, scene, solidfaces);
|
solidgeom = CreateGeometry(bsp, scene, solidfaces);
|
||||||
|
|
@ -723,24 +692,6 @@ hittype_t Embree_DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for CalcPoints
|
|
||||||
bool Embree_IntersectSingleModel(const vec3_t start, const vec3_t dir, vec_t dist, const dmodel_t *self, vec_t *hitdist_out)
|
|
||||||
{
|
|
||||||
const int modelnum = self - bsp_static->dmodels;
|
|
||||||
RTCScene singleModelScene = perModelScenes.at(modelnum);
|
|
||||||
|
|
||||||
RTCRay ray = SetupRay(0, start, dir, dist, nullptr);
|
|
||||||
rtcIntersect(singleModelScene, ray);
|
|
||||||
|
|
||||||
if (ray.geomID == RTC_INVALID_GEOMETRY_ID)
|
|
||||||
return false; // no obstruction
|
|
||||||
|
|
||||||
if (hitdist_out) {
|
|
||||||
*hitdist_out = ray.tfar;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//enum class streamstate_t {
|
//enum class streamstate_t {
|
||||||
// READY, DID_OCCLUDE, DID_INTERSECT
|
// READY, DID_OCCLUDE, DID_INTERSECT
|
||||||
//};
|
//};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue