Cleanup: Use const for Blender data in Hydra exporter
As a render engine, this code generally shouldn't modify Blender data. const helps to use the type system to enforce that.
This commit is contained in:
@@ -12,9 +12,9 @@
|
||||
|
||||
namespace blender::io::hydra {
|
||||
|
||||
CameraData::CameraData(View3D *v3d, ARegion *region)
|
||||
CameraData::CameraData(const View3D *v3d, const ARegion *region)
|
||||
{
|
||||
RegionView3D *region_data = (RegionView3D *)region->regiondata;
|
||||
const RegionView3D *region_data = (const RegionView3D *)region->regiondata;
|
||||
|
||||
/* TODO: refactor use BKE_camera_params API. */
|
||||
float VIEWPORT_SENSOR_SIZE = DEFAULT_SENSOR_WIDTH * 2.0f;
|
||||
@@ -86,9 +86,9 @@ CameraData::CameraData(View3D *v3d, ARegion *region)
|
||||
}
|
||||
}
|
||||
|
||||
CameraData::CameraData(Object *camera_obj, pxr::GfVec2i res, pxr::GfVec4f tile)
|
||||
CameraData::CameraData(const Object *camera_obj, pxr::GfVec2i res, pxr::GfVec4f tile)
|
||||
{
|
||||
Camera *camera = (Camera *)camera_obj->data;
|
||||
const Camera *camera = (const Camera *)camera_obj->data;
|
||||
|
||||
float t_pos[2] = {tile[0], tile[1]};
|
||||
float t_size[2] = {tile[2], tile[3]};
|
||||
@@ -113,7 +113,7 @@ CameraData::CameraData(Object *camera_obj, pxr::GfVec2i res, pxr::GfVec4f tile)
|
||||
std::max(focus_distance, 0.001f), camera->dof.aperture_fstop, camera->dof.aperture_blades);
|
||||
}
|
||||
|
||||
float ratio = (float)res[0] / res[1];
|
||||
float ratio = float(res[0]) / res[1];
|
||||
|
||||
switch (camera->sensor_fit) {
|
||||
case CAMERA_SENSOR_FIT_VERT:
|
||||
|
||||
@@ -26,8 +26,8 @@ class CameraData {
|
||||
std::tuple<float, float, int> dof_data_;
|
||||
|
||||
public:
|
||||
CameraData(View3D *v3d, ARegion *region);
|
||||
CameraData(Object *camera_obj, pxr::GfVec2i res, pxr::GfVec4f tile);
|
||||
CameraData(const View3D *v3d, const ARegion *region);
|
||||
CameraData(const Object *camera_obj, pxr::GfVec2i res, pxr::GfVec4f tile);
|
||||
|
||||
pxr::GfCamera gf_camera();
|
||||
pxr::GfCamera gf_camera(pxr::GfVec4f tile);
|
||||
|
||||
@@ -9,12 +9,14 @@
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_material.h"
|
||||
|
||||
#include "BKE_curves.hh"
|
||||
|
||||
#include "hydra_scene_delegate.h"
|
||||
|
||||
namespace blender::io::hydra {
|
||||
|
||||
CurvesData::CurvesData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: ObjectData(scene_delegate, object, prim_id)
|
||||
{
|
||||
@@ -24,8 +26,8 @@ void CurvesData::init()
|
||||
{
|
||||
ID_LOGN(1, "");
|
||||
|
||||
Object *object = (Object *)id;
|
||||
write_curves((Curves *)object->data);
|
||||
const Object *object = (const Object *)id;
|
||||
write_curves((const Curves *)object->data);
|
||||
write_transform();
|
||||
write_materials();
|
||||
}
|
||||
@@ -45,7 +47,7 @@ void CurvesData::remove()
|
||||
|
||||
void CurvesData::update()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
const Object *object = (const Object *)id;
|
||||
pxr::HdDirtyBits bits = pxr::HdChangeTracker::Clean;
|
||||
if ((id->recalc & ID_RECALC_GEOMETRY) || (((ID *)object->data)->recalc & ID_RECALC_GEOMETRY)) {
|
||||
init();
|
||||
@@ -130,16 +132,16 @@ pxr::HdPrimvarDescriptorVector CurvesData::primvar_descriptors(
|
||||
|
||||
void CurvesData::write_materials()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
Material *mat = nullptr;
|
||||
const Object *object = (const Object *)id;
|
||||
const Material *mat = nullptr;
|
||||
/* TODO: Using only first material. Add support for multimaterial. */
|
||||
if (BKE_object_material_count_eval(object) > 0) {
|
||||
mat = BKE_object_material_get_eval(object, 0);
|
||||
mat = BKE_object_material_get_eval(const_cast<Object *>(object), 0);
|
||||
}
|
||||
mat_data_ = get_or_create_material(mat);
|
||||
}
|
||||
|
||||
void CurvesData::write_curves(Curves *curves)
|
||||
void CurvesData::write_curves(const Curves *curves)
|
||||
{
|
||||
curve_vertex_counts_.clear();
|
||||
widths_.clear();
|
||||
@@ -167,7 +169,7 @@ void CurvesData::write_curves(Curves *curves)
|
||||
write_uv_maps(curves);
|
||||
}
|
||||
|
||||
void CurvesData::write_uv_maps(Curves *curves)
|
||||
void CurvesData::write_uv_maps(const Curves *curves)
|
||||
{
|
||||
uvs_.clear();
|
||||
|
||||
|
||||
@@ -27,7 +27,9 @@ class CurvesData : public ObjectData {
|
||||
MaterialData *mat_data_ = nullptr;
|
||||
|
||||
public:
|
||||
CurvesData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id);
|
||||
CurvesData(HydraSceneDelegate *scene_delegate,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id);
|
||||
|
||||
void init() override;
|
||||
void insert() override;
|
||||
@@ -45,8 +47,8 @@ class CurvesData : public ObjectData {
|
||||
void write_materials() override;
|
||||
|
||||
private:
|
||||
void write_curves(Curves *curves);
|
||||
void write_uv_maps(Curves *curves);
|
||||
void write_curves(const Curves *curves);
|
||||
void write_uv_maps(const Curves *curves);
|
||||
};
|
||||
|
||||
} // namespace blender::io::hydra
|
||||
|
||||
@@ -234,7 +234,7 @@ void HydraSceneDelegate::clear()
|
||||
view3d = nullptr;
|
||||
}
|
||||
|
||||
pxr::SdfPath HydraSceneDelegate::prim_id(ID *id, const char *prefix) const
|
||||
pxr::SdfPath HydraSceneDelegate::prim_id(const ID *id, const char *prefix) const
|
||||
{
|
||||
/* Making id of object in form like <prefix>_<pointer in 16 hex digits format> */
|
||||
char name[32];
|
||||
@@ -242,12 +242,12 @@ pxr::SdfPath HydraSceneDelegate::prim_id(ID *id, const char *prefix) const
|
||||
return GetDelegateID().AppendElementString(name);
|
||||
}
|
||||
|
||||
pxr::SdfPath HydraSceneDelegate::object_prim_id(Object *object) const
|
||||
pxr::SdfPath HydraSceneDelegate::object_prim_id(const Object *object) const
|
||||
{
|
||||
return prim_id((ID *)object, "O");
|
||||
}
|
||||
|
||||
pxr::SdfPath HydraSceneDelegate::material_prim_id(Material *mat) const
|
||||
pxr::SdfPath HydraSceneDelegate::material_prim_id(const Material *mat) const
|
||||
{
|
||||
return prim_id((ID *)mat, "M");
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class HydraSceneDelegate : public pxr::HdSceneDelegate {
|
||||
};
|
||||
|
||||
Depsgraph *depsgraph = nullptr;
|
||||
View3D *view3d = nullptr;
|
||||
const View3D *view3d = nullptr;
|
||||
Main *bmain = nullptr;
|
||||
Scene *scene = nullptr;
|
||||
ShadingSettings shading_settings;
|
||||
@@ -88,9 +88,9 @@ class HydraSceneDelegate : public pxr::HdSceneDelegate {
|
||||
void clear();
|
||||
|
||||
private:
|
||||
pxr::SdfPath prim_id(ID *id, const char *prefix) const;
|
||||
pxr::SdfPath object_prim_id(Object *object) const;
|
||||
pxr::SdfPath material_prim_id(Material *mat) const;
|
||||
pxr::SdfPath prim_id(const ID *id, const char *prefix) const;
|
||||
pxr::SdfPath object_prim_id(const Object *object) const;
|
||||
pxr::SdfPath material_prim_id(const Material *mat) const;
|
||||
pxr::SdfPath instancer_prim_id() const;
|
||||
pxr::SdfPath world_prim_id() const;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
namespace blender::io::hydra {
|
||||
|
||||
IdData::IdData(HydraSceneDelegate *scene_delegate, ID *id, pxr::SdfPath const &prim_id)
|
||||
IdData::IdData(HydraSceneDelegate *scene_delegate, const ID *id, pxr::SdfPath const &prim_id)
|
||||
: id(id), prim_id(prim_id), scene_delegate_(scene_delegate)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -31,14 +31,14 @@ class HydraSceneDelegate;
|
||||
|
||||
class IdData {
|
||||
public:
|
||||
ID *id;
|
||||
const ID *id;
|
||||
pxr::SdfPath prim_id;
|
||||
|
||||
protected:
|
||||
HydraSceneDelegate *scene_delegate_;
|
||||
|
||||
public:
|
||||
IdData(HydraSceneDelegate *scene_delegate, ID *id, pxr::SdfPath const &prim_id);
|
||||
IdData(HydraSceneDelegate *scene_delegate, const ID *id, pxr::SdfPath const &prim_id);
|
||||
virtual ~IdData() = default;
|
||||
|
||||
virtual void init() = 0;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
namespace blender::io::hydra {
|
||||
|
||||
LightData::LightData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: ObjectData(scene_delegate, object, prim_id)
|
||||
{
|
||||
@@ -26,7 +26,7 @@ void LightData::init()
|
||||
{
|
||||
ID_LOGN(1, "");
|
||||
|
||||
Light *light = (Light *)((Object *)id)->data;
|
||||
const Light *light = (const Light *)((const Object *)id)->data;
|
||||
data_.clear();
|
||||
|
||||
switch (light->type) {
|
||||
@@ -109,8 +109,8 @@ void LightData::remove()
|
||||
|
||||
void LightData::update()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
Light *light = (Light *)object->data;
|
||||
const Object *object = (const Object *)id;
|
||||
const Light *light = (const Light *)object->data;
|
||||
pxr::HdDirtyBits bits = pxr::HdLight::Clean;
|
||||
if (id->recalc & ID_RECALC_GEOMETRY || light->id.recalc & ID_RECALC_GEOMETRY) {
|
||||
if (prim_type(light) != prim_type_) {
|
||||
@@ -143,7 +143,7 @@ pxr::VtValue LightData::get_data(pxr::TfToken const &key) const
|
||||
return pxr::VtValue();
|
||||
}
|
||||
|
||||
pxr::TfToken LightData::prim_type(Light *light)
|
||||
pxr::TfToken LightData::prim_type(const Light *light)
|
||||
{
|
||||
switch (light->type) {
|
||||
case LA_AREA:
|
||||
|
||||
@@ -23,7 +23,7 @@ class LightData : public ObjectData {
|
||||
pxr::TfToken prim_type_;
|
||||
|
||||
public:
|
||||
LightData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id);
|
||||
LightData(HydraSceneDelegate *scene_delegate, const Object *object, pxr::SdfPath const &prim_id);
|
||||
|
||||
void init() override;
|
||||
void insert() override;
|
||||
@@ -33,7 +33,7 @@ class LightData : public ObjectData {
|
||||
pxr::VtValue get_data(pxr::TfToken const &key) const override;
|
||||
|
||||
protected:
|
||||
pxr::TfToken prim_type(Light *light);
|
||||
pxr::TfToken prim_type(const Light *light);
|
||||
};
|
||||
|
||||
} // namespace blender::io::hydra
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
namespace blender::io::hydra {
|
||||
|
||||
MaterialData::MaterialData(HydraSceneDelegate *scene_delegate,
|
||||
Material *material,
|
||||
const Material *material,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: IdData(scene_delegate, (ID *)material, prim_id)
|
||||
: IdData(scene_delegate, (const ID *)material, prim_id)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace blender::io::hydra {
|
||||
class MaterialData : public IdData {
|
||||
public:
|
||||
MaterialData(HydraSceneDelegate *scene_delegate,
|
||||
Material *material,
|
||||
const Material *material,
|
||||
pxr::SdfPath const &prim_id);
|
||||
|
||||
void init() override;
|
||||
|
||||
@@ -18,7 +18,9 @@ PXR_NAMESPACE_CLOSE_SCOPE
|
||||
|
||||
namespace blender::io::hydra {
|
||||
|
||||
MeshData::MeshData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id)
|
||||
MeshData::MeshData(HydraSceneDelegate *scene_delegate,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: ObjectData(scene_delegate, object, prim_id)
|
||||
{
|
||||
}
|
||||
@@ -188,10 +190,10 @@ pxr::SdfPathVector MeshData::submesh_paths() const
|
||||
|
||||
void MeshData::write_materials()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
const Object *object = (const Object *)id;
|
||||
for (int i = 0; i < submeshes_.size(); ++i) {
|
||||
SubMesh &m = submeshes_[i];
|
||||
Material *mat = BKE_object_material_get_eval(object, m.mat_index + 1);
|
||||
Material *mat = BKE_object_material_get_eval(const_cast<Object *>(object), m.mat_index + 1);
|
||||
m.mat_data = get_or_create_material(mat);
|
||||
}
|
||||
}
|
||||
@@ -210,12 +212,12 @@ const MeshData::SubMesh &MeshData::submesh(pxr::SdfPath const &id) const
|
||||
return submeshes_[index];
|
||||
}
|
||||
|
||||
void MeshData::write_submeshes(Mesh *mesh)
|
||||
void MeshData::write_submeshes(const Mesh *mesh)
|
||||
{
|
||||
submeshes_.clear();
|
||||
|
||||
/* Insert base submeshes */
|
||||
int mat_count = BKE_object_material_count_eval((Object *)id);
|
||||
const int mat_count = BKE_object_material_count_eval((const Object *)id);
|
||||
for (int i = 0; i < std::max(mat_count, 1); ++i) {
|
||||
SubMesh sm;
|
||||
sm.mat_index = i;
|
||||
@@ -225,11 +227,11 @@ void MeshData::write_submeshes(Mesh *mesh)
|
||||
/* Fill submeshes data */
|
||||
const int *material_indices = BKE_mesh_material_indices(mesh);
|
||||
|
||||
blender::Span<int> looptri_faces = mesh->looptri_faces();
|
||||
blender::Span<int> corner_verts = mesh->corner_verts();
|
||||
blender::Span<MLoopTri> looptris = mesh->looptris();
|
||||
const Span<int> looptri_faces = mesh->looptri_faces();
|
||||
const Span<int> corner_verts = mesh->corner_verts();
|
||||
const Span<MLoopTri> looptris = mesh->looptris();
|
||||
|
||||
BKE_mesh_calc_normals_split(mesh);
|
||||
BKE_mesh_calc_normals_split(const_cast<Mesh *>(mesh));
|
||||
const float(*lnors)[3] = (float(*)[3])CustomData_get_layer(&mesh->loop_data, CD_NORMAL);
|
||||
const float(*luvs)[2] = (float(*)[2])CustomData_get_layer(&mesh->loop_data, CD_PROP_FLOAT2);
|
||||
|
||||
@@ -271,7 +273,7 @@ void MeshData::write_submeshes(Mesh *mesh)
|
||||
}
|
||||
|
||||
/* vertices */
|
||||
blender::Span<blender::float3> verts = mesh->vert_positions();
|
||||
const blender::Span<blender::float3> verts = mesh->vert_positions();
|
||||
pxr::VtVec3fArray vertices(mesh->totvert);
|
||||
int i = 0;
|
||||
for (blender::float3 v : verts) {
|
||||
|
||||
@@ -31,7 +31,7 @@ class MeshData : public ObjectData {
|
||||
int submeshes_count_ = 0;
|
||||
|
||||
public:
|
||||
MeshData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id);
|
||||
MeshData(HydraSceneDelegate *scene_delegate, const Object *object, pxr::SdfPath const &prim_id);
|
||||
|
||||
void init() override;
|
||||
void insert() override;
|
||||
@@ -56,7 +56,7 @@ class MeshData : public ObjectData {
|
||||
private:
|
||||
pxr::SdfPath submesh_prim_id(int index) const;
|
||||
const SubMesh &submesh(pxr::SdfPath const &id) const;
|
||||
void write_submeshes(Mesh *mesh);
|
||||
void write_submeshes(const Mesh *mesh);
|
||||
void update_prims();
|
||||
};
|
||||
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
namespace blender::io::hydra {
|
||||
|
||||
ObjectData::ObjectData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: IdData(scene_delegate, (ID *)object, prim_id), transform(pxr::GfMatrix4d(1.0))
|
||||
: IdData(scene_delegate, &object->id, prim_id), transform(pxr::GfMatrix4d(1.0))
|
||||
{
|
||||
}
|
||||
|
||||
std::unique_ptr<ObjectData> ObjectData::create(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
{
|
||||
std::unique_ptr<ObjectData> obj_data;
|
||||
@@ -53,7 +53,7 @@ std::unique_ptr<ObjectData> ObjectData::create(HydraSceneDelegate *scene_delegat
|
||||
return obj_data;
|
||||
}
|
||||
|
||||
bool ObjectData::is_supported(Object *object)
|
||||
bool ObjectData::is_supported(const Object *object)
|
||||
{
|
||||
switch (object->type) {
|
||||
case OB_MESH:
|
||||
@@ -72,7 +72,7 @@ bool ObjectData::is_supported(Object *object)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ObjectData::is_mesh(Object *object)
|
||||
bool ObjectData::is_mesh(const Object *object)
|
||||
{
|
||||
switch (object->type) {
|
||||
case OB_MESH:
|
||||
@@ -90,7 +90,7 @@ bool ObjectData::is_mesh(Object *object)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ObjectData::is_visible(HydraSceneDelegate *scene_delegate, Object *object, int mode)
|
||||
bool ObjectData::is_visible(HydraSceneDelegate *scene_delegate, const Object *object, int mode)
|
||||
{
|
||||
eEvaluationMode deg_mode = DEG_get_mode(scene_delegate->depsgraph);
|
||||
bool ret = BKE_object_visibility(object, deg_mode) & mode;
|
||||
@@ -120,12 +120,12 @@ void ObjectData::available_materials(Set<pxr::SdfPath> & /* paths */) const {}
|
||||
|
||||
void ObjectData::write_transform()
|
||||
{
|
||||
transform = gf_matrix_from_transform(((Object *)id)->object_to_world);
|
||||
transform = gf_matrix_from_transform(((const Object *)id)->object_to_world);
|
||||
}
|
||||
|
||||
void ObjectData::write_materials() {}
|
||||
|
||||
MaterialData *ObjectData::get_or_create_material(Material *mat)
|
||||
MaterialData *ObjectData::get_or_create_material(const Material *mat)
|
||||
{
|
||||
if (!mat) {
|
||||
return nullptr;
|
||||
@@ -143,7 +143,7 @@ MaterialData *ObjectData::get_or_create_material(Material *mat)
|
||||
return mat_data;
|
||||
}
|
||||
|
||||
pxr::GfMatrix4d gf_matrix_from_transform(float m[4][4])
|
||||
pxr::GfMatrix4d gf_matrix_from_transform(const float m[4][4])
|
||||
{
|
||||
pxr::GfMatrix4d ret;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
||||
@@ -25,15 +25,17 @@ class ObjectData : public IdData {
|
||||
bool visible = true;
|
||||
|
||||
public:
|
||||
ObjectData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id);
|
||||
ObjectData(HydraSceneDelegate *scene_delegate,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id);
|
||||
|
||||
static std::unique_ptr<ObjectData> create(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id);
|
||||
static bool is_supported(Object *object);
|
||||
static bool is_mesh(Object *object);
|
||||
static bool is_supported(const Object *object);
|
||||
static bool is_mesh(const Object *object);
|
||||
static bool is_visible(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
int mode = OB_VISIBLE_SELF);
|
||||
|
||||
using IdData::get_data;
|
||||
@@ -45,11 +47,11 @@ class ObjectData : public IdData {
|
||||
protected:
|
||||
virtual void write_transform();
|
||||
virtual void write_materials();
|
||||
MaterialData *get_or_create_material(Material *mat);
|
||||
MaterialData *get_or_create_material(const Material *mat);
|
||||
};
|
||||
|
||||
using ObjectDataMap = Map<pxr::SdfPath, std::unique_ptr<ObjectData>>;
|
||||
|
||||
pxr::GfMatrix4d gf_matrix_from_transform(float m[4][4]);
|
||||
pxr::GfMatrix4d gf_matrix_from_transform(const float m[4][4]);
|
||||
|
||||
} // namespace blender::io::hydra
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
namespace blender::io::hydra {
|
||||
|
||||
VolumeData::VolumeData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: ObjectData(scene_delegate, object, prim_id)
|
||||
{
|
||||
@@ -29,7 +29,7 @@ void VolumeData::init()
|
||||
{
|
||||
field_descriptors_.clear();
|
||||
|
||||
Volume *volume = (Volume *)((Object *)this->id)->data;
|
||||
Volume *volume = (Volume *)((const Object *)this->id)->data;
|
||||
if (!BKE_volume_load(volume, scene_delegate_->bmain)) {
|
||||
return;
|
||||
}
|
||||
@@ -81,7 +81,7 @@ void VolumeData::remove()
|
||||
|
||||
void VolumeData::update()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
const Object *object = (const Object *)id;
|
||||
pxr::HdDirtyBits bits = pxr::HdChangeTracker::Clean;
|
||||
if ((id->recalc & ID_RECALC_GEOMETRY) || (((ID *)object->data)->recalc & ID_RECALC_GEOMETRY)) {
|
||||
init();
|
||||
@@ -150,11 +150,11 @@ pxr::HdVolumeFieldDescriptorVector VolumeData::field_descriptors() const
|
||||
|
||||
void VolumeData::write_materials()
|
||||
{
|
||||
Object *object = (Object *)id;
|
||||
Material *mat = nullptr;
|
||||
const Object *object = (Object *)id;
|
||||
const Material *mat = nullptr;
|
||||
/* TODO: Using only first material. Add support for multimaterial. */
|
||||
if (BKE_object_material_count_eval(object) > 0) {
|
||||
mat = BKE_object_material_get_eval(object, 0);
|
||||
mat = BKE_object_material_get_eval(const_cast<Object *>(object), 0);
|
||||
}
|
||||
mat_data_ = get_or_create_material(mat);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,9 @@ class VolumeData : public ObjectData {
|
||||
MaterialData *mat_data_ = nullptr;
|
||||
|
||||
public:
|
||||
VolumeData(HydraSceneDelegate *scene_delegate, Object *object, pxr::SdfPath const &prim_id);
|
||||
VolumeData(HydraSceneDelegate *scene_delegate,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id);
|
||||
|
||||
void init() override;
|
||||
void insert() override;
|
||||
|
||||
@@ -22,19 +22,19 @@ PXR_NAMESPACE_CLOSE_SCOPE
|
||||
namespace blender::io::hydra {
|
||||
|
||||
VolumeModifierData::VolumeModifierData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id)
|
||||
: VolumeData(scene_delegate, object, prim_id)
|
||||
{
|
||||
}
|
||||
|
||||
bool VolumeModifierData::is_volume_modifier(Object *object)
|
||||
bool VolumeModifierData::is_volume_modifier(const Object *object)
|
||||
{
|
||||
if (object->type != OB_MESH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FluidModifierData *modifier = (FluidModifierData *)BKE_modifiers_findby_type(
|
||||
const FluidModifierData *modifier = (const FluidModifierData *)BKE_modifiers_findby_type(
|
||||
object, eModifierType_Fluid);
|
||||
return modifier && modifier->type & MOD_FLUID_TYPE_DOMAIN &&
|
||||
modifier->domain->type == FLUID_DOMAIN_TYPE_GAS;
|
||||
@@ -44,10 +44,10 @@ void VolumeModifierData::init()
|
||||
{
|
||||
field_descriptors_.clear();
|
||||
|
||||
Object *object = (Object *)this->id;
|
||||
ModifierData *md = BKE_modifiers_findby_type(object, eModifierType_Fluid);
|
||||
modifier_ = (FluidModifierData *)BKE_modifier_get_evaluated(
|
||||
scene_delegate_->depsgraph, object, md);
|
||||
const Object *object = (const Object *)this->id;
|
||||
const ModifierData *md = BKE_modifiers_findby_type(object, eModifierType_Fluid);
|
||||
modifier_ = (const FluidModifierData *)BKE_modifier_get_evaluated(
|
||||
scene_delegate_->depsgraph, const_cast<Object *>(object), const_cast<ModifierData *>(md));
|
||||
|
||||
if ((modifier_->domain->cache_data_format & FLUID_DOMAIN_FILE_OPENVDB) == 0) {
|
||||
CLOG_WARN(LOG_HYDRA_SCENE,
|
||||
|
||||
@@ -13,9 +13,9 @@ class VolumeModifierData : public VolumeData {
|
||||
|
||||
public:
|
||||
VolumeModifierData(HydraSceneDelegate *scene_delegate,
|
||||
Object *object,
|
||||
const Object *object,
|
||||
pxr::SdfPath const &prim_id);
|
||||
static bool is_volume_modifier(Object *object);
|
||||
static bool is_volume_modifier(const Object *object);
|
||||
|
||||
void init() override;
|
||||
void update() override;
|
||||
@@ -26,7 +26,7 @@ class VolumeModifierData : public VolumeData {
|
||||
private:
|
||||
std::string get_cached_file_path(std::string directory, int frame);
|
||||
|
||||
FluidModifierData *modifier_;
|
||||
const FluidModifierData *modifier_;
|
||||
};
|
||||
|
||||
} // namespace blender::io::hydra
|
||||
|
||||
@@ -49,7 +49,7 @@ void WorldData::init()
|
||||
pxr::SdfAssetPath texture_file;
|
||||
|
||||
if (scene_delegate_->shading_settings.use_scene_world) {
|
||||
World *world = scene_delegate_->scene->world;
|
||||
const World *world = scene_delegate_->scene->world;
|
||||
ID_LOG(1, "%s", world->id.name);
|
||||
|
||||
exposure = world->exposure;
|
||||
@@ -57,7 +57,7 @@ void WorldData::init()
|
||||
/* TODO: Create nodes parsing system */
|
||||
|
||||
bNode *output_node = ntreeShaderOutputNode(world->nodetree, SHD_OUTPUT_ALL);
|
||||
blender::Span<bNodeSocket *> input_sockets = output_node->input_sockets();
|
||||
const Span<bNodeSocket *> input_sockets = output_node->input_sockets();
|
||||
bNodeSocket *input_socket = nullptr;
|
||||
|
||||
for (auto socket : input_sockets) {
|
||||
|
||||
Reference in New Issue
Block a user