MCPcopy Create free account
hub / github.com/RenderKit/ospray / commit

Method commit

modules/cpu/geometry/GeometricModel.cpp:21–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19}
20
21void GeometricModel::commit()
22{
23 geom = getParamObject<Geometry>("geometry", geomAPI.ptr);
24 if (!geom)
25 throw std::runtime_error(toString() + " received NULL 'geometry'");
26
27 materialData = getParamDataT<Material *>("material", false, true);
28
29 materialArray = nullptr;
30 materialIDArray = nullptr;
31 getSh()->material = nullptr;
32 getSh()->materialID = nullptr;
33 getSh()->numMaterials = 0;
34 featureFlagsOther = FFO_NONE;
35 if (materialData) {
36 for (auto &&mat : materialData->as<Material *>())
37 featureFlagsOther |= mat->getFeatureFlags().other;
38
39 materialArray = devicert::make_buffer_shared_unique<ispc::Material *>(
40 getISPCDevice().getDRTDevice(),
41 createArrayOfSh<ispc::Material>(materialData->as<Material *>()));
42 getSh()->material = materialArray->sharedPtr();
43 getSh()->numMaterials = materialArray->size();
44 } else {
45 materialData = getParamDataT<uint32_t>("material", false, true);
46 if (materialData) {
47 materialIDArray = devicert::make_buffer_shared_unique<uint32_t>(
48 getISPCDevice().getDRTDevice(),
49 materialData->as<uint32_t>().data(),
50 materialData->size());
51 getSh()->materialID = materialIDArray->sharedPtr();
52 getSh()->numMaterials = materialIDArray->size();
53 }
54 }
55 colorData = getParamDataT<vec4f>("color", false, true);
56 indexData = getParamDataT<uint8_t>("index");
57
58 size_t maxItems = geom->numPrimitives();
59 if (indexData && indexData->size() < maxItems) {
60 postStatusMsg(OSP_LOG_INFO)
61 << toString()
62 << " not enough 'index' elements for 'geometry', clamping";
63 }
64
65 if (indexData)
66 maxItems = 256; // conservative, should actually go over the index
67
68 if (materialData && materialData->size() > 1
69 && materialData->size() < maxItems) {
70 postStatusMsg(OSP_LOG_INFO)
71 << toString()
72 << " potentially not enough 'material' elements for "
73 "'geometry', clamping";
74 }
75
76 if (colorData && colorData->size() > 1 && colorData->size() < maxItems) {
77 postStatusMsg(OSP_LOG_INFO)
78 << toString()

Callers

nothing calls this directly

Calls 8

postStatusMsgFunction · 0.85
ispcFunction · 0.85
sharedPtrMethod · 0.80
getShMethod · 0.80
getFeatureFlagsMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45
numPrimitivesMethod · 0.45

Tested by

no test coverage detected