MCPcopy Create free account
hub / github.com/RenderKit/embree / build_cpu_accels

Method build_cpu_accels

kernels/common/scene.cpp:762–818  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

760 }
761
762 void Scene::build_cpu_accels()
763 {
764 /* select acceleration structures to build */
765 unsigned int new_enabled_geometry_types = world.enabledGeometryTypesMask();
766
767 if (flags_modified || new_enabled_geometry_types != enabled_geometry_types)
768 {
769 accels_init();
770
771 /* we need to make all geometries modified, otherwise two level builder will
772 not rebuild currently not modified geometries */
773 parallel_for(geometryModCounters_.size(), [&] ( const size_t i ) {
774 geometryModCounters_[i] = 0;
775 });
776
777 if (getNumPrimitives(TriangleMesh::geom_type,false)) createTriangleAccel();
778 if (getNumPrimitives(TriangleMesh::geom_type,true)) createTriangleMBAccel();
779 if (getNumPrimitives(QuadMesh::geom_type,false)) createQuadAccel();
780 if (getNumPrimitives(QuadMesh::geom_type,true)) createQuadMBAccel();
781 if (getNumPrimitives(GridMesh::geom_type,false)) createGridAccel();
782 if (getNumPrimitives(GridMesh::geom_type,true)) createGridMBAccel();
783 if (getNumPrimitives(SubdivMesh::geom_type,false)) createSubdivAccel();
784 if (getNumPrimitives(SubdivMesh::geom_type,true)) createSubdivMBAccel();
785 if (getNumPrimitives(Geometry::MTY_CURVES,false)) createHairAccel();
786 if (getNumPrimitives(Geometry::MTY_CURVES,true)) createHairMBAccel();
787 if (getNumPrimitives(UserGeometry::geom_type,false)) createUserGeometryAccel();
788 if (getNumPrimitives(UserGeometry::geom_type,true)) createUserGeometryMBAccel();
789 if (getNumPrimitives(Geometry::MTY_INSTANCE_CHEAP,false)) createInstanceAccel();
790 if (getNumPrimitives(Geometry::MTY_INSTANCE_CHEAP,true)) createInstanceMBAccel();
791 if (getNumPrimitives(Geometry::MTY_INSTANCE_EXPENSIVE,false)) createInstanceExpensiveAccel();
792 if (getNumPrimitives(Geometry::MTY_INSTANCE_EXPENSIVE,true)) createInstanceExpensiveMBAccel();
793 if (getNumPrimitives(Geometry::MTY_INSTANCE_ARRAY,false)) createInstanceArrayAccel();
794 if (getNumPrimitives(Geometry::MTY_INSTANCE_ARRAY,true)) createInstanceArrayMBAccel();
795
796 flags_modified = false;
797 enabled_geometry_types = new_enabled_geometry_types;
798 }
799
800 /* select fast code path if no filter function is present */
801 accels_select(hasFilterFunction());
802
803 /* build all hierarchies of this scene */
804 accels_build();
805
806 /* make static geometry immutable */
807 if (!isDynamicAccel()) {
808 accels_immutable();
809 flags_modified = true; // in non-dynamic mode we have to re-create accels
810 }
811
812 if (device->verbosity(2)) {
813 std::cout << "created scene intersector" << std::endl;
814 accels_print(2);
815 std::cout << "selected scene intersector" << std::endl;
816 intersectors.print(2);
817 }
818 }
819

Callers

nothing calls this directly

Calls 8

parallel_forFunction · 0.85
hasFilterFunctionFunction · 0.85
isDynamicAccelFunction · 0.85
getNumPrimitivesFunction · 0.70
sizeMethod · 0.45
verbosityMethod · 0.45
printMethod · 0.45

Tested by

no test coverage detected