forked from blender/blender
Support multimaterials on one mesh #44
@ -138,7 +138,7 @@ pxr::HdCullStyle BlenderSceneDelegate::GetCullStyle(pxr::SdfPath const &id)
|
|||||||
pxr::SdfPath BlenderSceneDelegate::GetInstancerId(pxr::SdfPath const &prim_id)
|
pxr::SdfPath BlenderSceneDelegate::GetInstancerId(pxr::SdfPath const &prim_id)
|
||||||
{
|
{
|
||||||
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 3, "%s", prim_id.GetText());
|
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 3, "%s", prim_id.GetText());
|
||||||
InstancerData *i_data = instancer_data(prim_id.GetParentPath());
|
InstancerData *i_data = instancer_data(prim_id, true);
|
||||||
if (i_data) {
|
if (i_data) {
|
||||||
return i_data->prim_id;
|
return i_data->prim_id;
|
||||||
}
|
}
|
||||||
@ -387,7 +387,6 @@ void BlenderSceneDelegate::check_updates()
|
|||||||
data.only_updated = true;
|
data.only_updated = true;
|
||||||
ITER_BEGIN (DEG_iterator_ids_begin, DEG_iterator_ids_next, DEG_iterator_ids_end, &data, ID *, id)
|
ITER_BEGIN (DEG_iterator_ids_begin, DEG_iterator_ids_next, DEG_iterator_ids_end, &data, ID *, id)
|
||||||
{
|
{
|
||||||
|
|
||||||
CLOG_INFO(LOG_RENDER_HYDRA_SCENE,
|
CLOG_INFO(LOG_RENDER_HYDRA_SCENE,
|
||||||
2,
|
2,
|
||||||
"Update: %s [%s]",
|
"Update: %s [%s]",
|
||||||
|
@ -109,9 +109,9 @@ bool InstancerData::update_visibility()
|
|||||||
|
|
||||||
pxr::GfMatrix4d InstancerData::get_transform(pxr::SdfPath const &id) const
|
pxr::GfMatrix4d InstancerData::get_transform(pxr::SdfPath const &id) const
|
||||||
{
|
{
|
||||||
if (id.GetPathElementCount() == 4) {
|
auto l_it = light_instances_.find(id.GetParentPath());
|
||||||
const auto &inst = light_instances_.find(id.GetParentPath())->second;
|
if (l_it != light_instances_.end()) {
|
||||||
return inst.transforms[light_prim_id_index(id)];
|
return l_it->second.transforms[light_prim_id_index(id)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mesh instance transform must be identity */
|
/* Mesh instance transform must be identity */
|
||||||
@ -131,12 +131,12 @@ pxr::HdPrimvarDescriptorVector InstancerData::primvar_descriptors(
|
|||||||
|
|
||||||
pxr::VtIntArray InstancerData::indices(pxr::SdfPath const &id) const
|
pxr::VtIntArray InstancerData::indices(pxr::SdfPath const &id) const
|
||||||
{
|
{
|
||||||
return mesh_instances_.find(id)->second.indices;
|
return mesh_instances_.find(id.GetParentPath())->second.indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectData *InstancerData::object_data(pxr::SdfPath const &id) const
|
ObjectData *InstancerData::object_data(pxr::SdfPath const &id) const
|
||||||
{
|
{
|
||||||
auto m_it = mesh_instances_.find(id);
|
auto m_it = mesh_instances_.find(id.GetParentPath());
|
||||||
if (m_it != mesh_instances_.end()) {
|
if (m_it != mesh_instances_.end()) {
|
||||||
return m_it->second.data.get();
|
return m_it->second.data.get();
|
||||||
}
|
}
|
||||||
@ -151,7 +151,9 @@ pxr::SdfPathVector InstancerData::prototypes() const
|
|||||||
{
|
{
|
||||||
pxr::SdfPathVector paths;
|
pxr::SdfPathVector paths;
|
||||||
for (auto &it : mesh_instances_) {
|
for (auto &it : mesh_instances_) {
|
||||||
paths.push_back(it.first);
|
for (auto &p : it.second.data->submesh_paths()) {
|
||||||
|
paths.push_back(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
@ -182,6 +182,15 @@ void MeshData::available_materials(std::set<pxr::SdfPath> &paths) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pxr::SdfPathVector MeshData::submesh_paths() const
|
||||||
|
{
|
||||||
|
pxr::SdfPathVector ret;
|
||||||
|
for (int i = 0; i < submeshes_.size(); ++i) {
|
||||||
|
ret.push_back(submesh_prim_id(i));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
pxr::SdfPath MeshData::submesh_prim_id(int index) const
|
pxr::SdfPath MeshData::submesh_prim_id(int index) const
|
||||||
{
|
{
|
||||||
char name[16];
|
char name[16];
|
||||||
|
@ -40,6 +40,7 @@ class MeshData : public ObjectData {
|
|||||||
bool double_sided(pxr::SdfPath const &id) const;
|
bool double_sided(pxr::SdfPath const &id) const;
|
||||||
void update_double_sided(MaterialData *mat_data);
|
void update_double_sided(MaterialData *mat_data);
|
||||||
void available_materials(std::set<pxr::SdfPath> &paths) const;
|
void available_materials(std::set<pxr::SdfPath> &paths) const;
|
||||||
|
pxr::SdfPathVector submesh_paths() const;
|
||||||
|
|
||||||
pxr::HdCullStyle cull_style = pxr::HdCullStyleBackUnlessDoubleSided;
|
pxr::HdCullStyle cull_style = pxr::HdCullStyleBackUnlessDoubleSided;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user