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);
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
//};
|
||||
|
|
|
|||
Loading…
Reference in New Issue