light: drop IntersectSingleModel api

This commit is contained in:
Eric Wasylishen 2017-03-12 14:33:42 -06:00
parent 0eb6864744
commit 102bdc49f0
4 changed files with 0 additions and 66 deletions

View File

@ -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);
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 {
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;

View File

@ -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_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);
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);

View File

@ -775,19 +775,6 @@ hittype_t DirtTrace(const vec3_t start, const vec3_t dirn, vec_t dist, const dmo
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 {
public:
int _pointindex;

View File

@ -155,29 +155,6 @@ CreateGeometryFromWindings(RTCScene scene, const std::vector<winding_t *> &windi
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;
RTCScene scene;
/* global shadow casters */
@ -355,8 +332,6 @@ Embree_FilterFuncN(int* valid,
}
}
vector<RTCScene> perModelScenes;
// building faces for skip-textured bmodels
#if 0
@ -597,12 +572,6 @@ Embree_TraceInit(const bsp2_t *bsp)
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);
skygeom = CreateGeometry(bsp, scene, skyfaces);
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 {
// READY, DID_OCCLUDE, DID_INTERSECT
//};