diff --git a/CMakeLists.txt b/CMakeLists.txt index e8853f86..dd0b95f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,12 +56,16 @@ set(QBSP_INCLUDES ${CMAKE_SOURCE_DIR}/include/qbsp/writebsp.hh) set(QBSP_SOURCES + ${CMAKE_SOURCE_DIR}/common/bspfile.cc + ${CMAKE_SOURCE_DIR}/common/entdata.cc ${CMAKE_SOURCE_DIR}/common/threads.cc ${CMAKE_SOURCE_DIR}/common/cmdlib.cc ${CMAKE_SOURCE_DIR}/common/log.cc ${CMAKE_SOURCE_DIR}/common/qvec.cc + ${CMAKE_SOURCE_DIR}/common/mesh.cc ${CMAKE_SOURCE_DIR}/common/mathlib.cc ${CMAKE_SOURCE_DIR}/common/polylib.cc + ${CMAKE_SOURCE_DIR}/common/bsputils.cc ${CMAKE_SOURCE_DIR}/qbsp/brush.cc ${CMAKE_SOURCE_DIR}/qbsp/bspfile.cc ${CMAKE_SOURCE_DIR}/qbsp/csg4.cc diff --git a/common/bsputils.cc b/common/bsputils.cc index e9e50b45..b49cdeec 100644 --- a/common/bsputils.cc +++ b/common/bsputils.cc @@ -132,12 +132,15 @@ Face_Plane(const mbsp_t *bsp, const bsp2_dface_t *f) Q_assert(f->planenum >= 0 && f->planenum < bsp->numplanes); const dplane_t *dplane = &bsp->dplanes[f->planenum]; + vec3_t planeNormal; + VectorCopy(dplane->normal, planeNormal); // convert from float->double if needed + plane_t result; if (f->side) { - VectorSubtract(vec3_origin, dplane->normal, result.normal); + VectorSubtract(vec3_origin, planeNormal, result.normal); result.dist = -dplane->dist; } else { - VectorCopy(dplane->normal, result.normal); + VectorCopy(planeNormal, result.normal); result.dist = dplane->dist; } return result; @@ -266,7 +269,11 @@ vec_t Plane_Dist(const vec3_t point, const dplane_t *plane) case PLANE_X: return point[0] - plane->dist; case PLANE_Y: return point[1] - plane->dist; case PLANE_Z: return point[2] - plane->dist; - default: return DotProduct(point, plane->normal) - plane->dist; + default: { + vec3_t planeNormal; + VectorCopy(plane->normal, planeNormal); // convert from float->double if needed + return DotProduct(point, planeNormal) - plane->dist; + } } } @@ -377,15 +384,21 @@ Face_AllocInwardFacingEdgePlanes(const mbsp_t *bsp, const bsp2_dface_t *face) { plane_t *dest = &out[i]; - const vec_t *v0 = GetSurfaceVertexPoint(bsp, face, i); - const vec_t *v1 = GetSurfaceVertexPoint(bsp, face, (i+1)%face->numedges); + const float *v0 = GetSurfaceVertexPoint(bsp, face, i); + const float *v1 = GetSurfaceVertexPoint(bsp, face, (i+1)%face->numedges); + vec3_t v0_vec3t; + vec3_t v1_vec3t; + + VectorCopy(v0, v0_vec3t); + VectorCopy(v1, v1_vec3t); // convert float->double + vec3_t edgevec; - VectorSubtract(v1, v0, edgevec); + VectorSubtract(v1_vec3t, v0_vec3t, edgevec); VectorNormalize(edgevec); CrossProduct(edgevec, faceplane.normal, dest->normal); - dest->dist = DotProduct(dest->normal, v0); + dest->dist = DotProduct(dest->normal, v0_vec3t); } return out; @@ -461,7 +474,7 @@ void Face_DebugPrint(const mbsp_t *bsp, const bsp2_dface_t *face) for (int i = 0; i < face->numedges; i++) { int edge = bsp->dsurfedges[face->firstedge + i]; int vert = Face_VertexAtIndex(bsp, face, i); - const vec_t *point = GetSurfaceVertexPoint(bsp, face, i); + const float *point = GetSurfaceVertexPoint(bsp, face, i); logprint("%s %3d (%3.3f, %3.3f, %3.3f) :: edge %d\n", i ? " " : " verts ", vert, point[0], point[1], point[2], diff --git a/include/common/mathlib.hh b/include/common/mathlib.hh index 769ecdac..8d61317b 100644 --- a/include/common/mathlib.hh +++ b/include/common/mathlib.hh @@ -104,6 +104,16 @@ VectorCopy(const vec3_t in, vec3_t out) out[2] = in[2]; } +#ifdef DOUBLEVEC_T +static inline void +VectorCopy(const float in[3], vec3_t out) +{ + out[0] = in[0]; + out[1] = in[1]; + out[2] = in[2]; +} +#endif + static inline void VectorScale(const vec3_t v, vec_t scale, vec3_t out) {