40 if (bbox_max_uuid > max_uuid) {
41 max_uuid = bbox_max_uuid;
45 size_t expected_size = max_uuid + 1;
48 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_positions.size()=" + std::to_string(
primitive_positions.size()) +
" != max_UUID+1=" + std::to_string(expected_size) +
" (max_UUID=" + std::to_string(max_uuid) +
57 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_UUIDs[" + std::to_string(pos) +
"]=" + std::to_string(UUID) +
" >= primitive_positions.size()=" + std::to_string(
primitive_positions.size()));
61 if (mapped_pos == UINT_MAX) {
62 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_positions[" + std::to_string(UUID) +
"] == UINT_MAX (should map to position " + std::to_string(pos) +
")");
65 if (mapped_pos != pos) {
66 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_positions[" + std::to_string(UUID) +
"]=" + std::to_string(mapped_pos) +
" but UUID is at position " + std::to_string(pos) +
67 " (bidirectional mapping inconsistent)");
79 helios_runtime_error(
"RayTracingGeometry validation failed: transform_matrices.size()=" + std::to_string(
transform_matrices.size()) +
" != (primitive_count+bbox_count)*16=" + std::to_string(expected_types_size * 16));
84 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_types.size()=" + std::to_string(
primitive_types.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_types_size));
89 helios_runtime_error(
"RayTracingGeometry validation failed: object_subdivisions.size()=" + std::to_string(
object_subdivisions.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_types_size));
94 helios_runtime_error(
"RayTracingGeometry validation failed: twosided_flags.size()=" + std::to_string(
twosided_flags.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_types_size));
99 helios_runtime_error(
"RayTracingGeometry validation failed: solid_fractions.size()=" + std::to_string(
solid_fractions.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_types_size));
105 if (
object_IDs.size() != expected_types_size) {
106 helios_runtime_error(
"RayTracingGeometry validation failed: object_IDs.size()=" + std::to_string(
object_IDs.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_types_size));
112 helios_runtime_error(
"RayTracingGeometry validation failed: primitive_IDs.size()=" + std::to_string(
primitive_IDs.size()) +
" != primitive_count+bbox_count=" + std::to_string(expected_primitive_IDs_size) +
113 " (COMMON BUG: Did you size by Nobjects instead of Nprimitives?)");
178 if (subdiv.
x < 1 || subdiv.
y < 1) {
179 helios_runtime_error(
"RayTracingGeometry validation failed: object_subdivisions[" + std::to_string(i) +
"] = (" + std::to_string(subdiv.
x) +
"," + std::to_string(subdiv.
y) +
") has zero or negative subdivision count");
185 size_t subdivision_anomalies = 0;
188 subdivision_anomalies++;
193 std::cerr <<
"WARNING [RayTracingGeometry]: " << subdivision_anomalies <<
" / " <<
primitive_count <<
" primitives have subdivisions > (1,1). "
194 <<
"Check for subdivision inheritance bug - subpatches should have (1,1), "
195 <<
"only parent geometry should have actual subdivision counts.\n";