1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// Copyright 2009 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "Geometry.h"
#include "common/Data.h"
// ispc shared
#include "GeometricModelShared.h"
namespace ispc {
struct Material;
}
namespace ospray {
struct Material;
struct OSPRAY_SDK_INTERFACE GeometricModel
: public AddStructShared<ISPCDeviceObject, ispc::GeometricModel>
{
GeometricModel(api::ISPCDevice &device, Geometry *geometry);
~GeometricModel() override = default;
std::string toString() const override;
void commit() override;
Geometry &geometry();
RTCGeometry embreeGeometryHandle() const;
bool invertedNormals() const;
bool hasEmissiveMaterials(
Ref<const DataT<Material *>> rendererMaterials) const;
FeatureFlags getFeatureFlags() const;
private:
Ref<Geometry> geom;
const Ref<Geometry> geomAPI;
Ref<const Data> materialData;
Ref<const DataT<vec4f>> colorData;
Ref<const DataT<uint8_t>> indexData;
BufferSharedUq<ispc::Material *> materialArray;
BufferSharedUq<uint32_t> materialIDArray;
FeatureFlagsOther featureFlagsOther{FFO_NONE};
};
OSPTYPEFOR_SPECIALIZATION(GeometricModel *, OSP_GEOMETRIC_MODEL);
// Inlined members //////////////////////////////////////////////////////////
inline Geometry &GeometricModel::geometry()
{
return *geom;
}
inline RTCGeometry GeometricModel::embreeGeometryHandle() const
{
return geom->getEmbreeGeometry();
}
inline bool GeometricModel::invertedNormals() const
{
return getSh()->invertedNormals;
}
inline FeatureFlags GeometricModel::getFeatureFlags() const
{
FeatureFlags ff = geom->getFeatureFlags();
ff.other |= featureFlagsOther;
return ff;
}
} // namespace ospray
|