forked from blender/blender
BLEN-359: Implement updates for instances in viewport #20
@ -11,14 +11,6 @@ namespace blender::render::hydra {
|
|||||||
IdData::IdData(BlenderSceneDelegate *scene_delegate, ID *id)
|
IdData::IdData(BlenderSceneDelegate *scene_delegate, ID *id)
|
||||||
: scene_delegate(scene_delegate), id(id)
|
: scene_delegate(scene_delegate), id(id)
|
||||||
{
|
{
|
||||||
//p_id = prim_id();
|
|
||||||
//init();
|
|
||||||
//insert();
|
|
||||||
}
|
|
||||||
|
|
||||||
IdData::~IdData()
|
|
||||||
{
|
|
||||||
//remove();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string IdData::name() const
|
std::string IdData::name() const
|
||||||
|
@ -16,10 +16,9 @@ class BlenderSceneDelegate;
|
|||||||
class IdData {
|
class IdData {
|
||||||
public:
|
public:
|
||||||
IdData(BlenderSceneDelegate *scene_delegate, ID *id);
|
IdData(BlenderSceneDelegate *scene_delegate, ID *id);
|
||||||
virtual ~IdData();
|
virtual ~IdData() = default;
|
||||||
|
|
||||||
enum class DirtyBits { DIRTY_TRANSFORM = 1, DIRTY_VISIBILITY, DIRTY_MATERIAL, ALL_DIRTY };
|
enum class DirtyBits { DIRTY_TRANSFORM = 1, DIRTY_VISIBILITY, DIRTY_MATERIAL, ALL_DIRTY };
|
||||||
virtual pxr::SdfPath prim_id() const = 0;
|
|
||||||
virtual void init() = 0;
|
virtual void init() = 0;
|
||||||
virtual void insert() = 0;
|
virtual void insert() = 0;
|
||||||
virtual void remove() = 0;
|
virtual void remove() = 0;
|
||||||
@ -28,7 +27,6 @@ class IdData {
|
|||||||
virtual pxr::VtValue get_data(pxr::TfToken const &key) const;
|
virtual pxr::VtValue get_data(pxr::TfToken const &key) const;
|
||||||
template<class T> const T get_data(pxr::TfToken const &key) const;
|
template<class T> const T get_data(pxr::TfToken const &key) const;
|
||||||
|
|
||||||
|
|
||||||
std::string name() const;
|
std::string name() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -18,6 +18,12 @@ namespace blender::render::hydra {
|
|||||||
LightData::LightData(BlenderSceneDelegate *scene_delegate, Object *object)
|
LightData::LightData(BlenderSceneDelegate *scene_delegate, Object *object)
|
||||||
: ObjectData(scene_delegate, object)
|
: ObjectData(scene_delegate, object)
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void LightData::init()
|
||||||
|
{
|
||||||
|
CLOG_INFO(LOG_BSD, 2, "%s", id->name);
|
||||||
|
|
||||||
Light *light = (Light *)((Object *)id)->data;
|
Light *light = (Light *)((Object *)id)->data;
|
||||||
|
|
||||||
data[pxr::HdLightTokens->intensity] = scene_delegate->engine_type ==
|
data[pxr::HdLightTokens->intensity] = scene_delegate->engine_type ==
|
||||||
@ -133,10 +139,6 @@ pxr::VtValue LightData::get_data(pxr::TfToken const &key) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightData::init()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void LightData::insert()
|
void LightData::insert()
|
||||||
{
|
{
|
||||||
scene_delegate->GetRenderIndex().InsertSprim(prim_type(), scene_delegate, p_id);
|
scene_delegate->GetRenderIndex().InsertSprim(prim_type(), scene_delegate, p_id);
|
||||||
|
@ -23,7 +23,9 @@ namespace blender::render::hydra {
|
|||||||
std::unique_ptr<MaterialData> MaterialData::create(BlenderSceneDelegate *scene_delegate,
|
std::unique_ptr<MaterialData> MaterialData::create(BlenderSceneDelegate *scene_delegate,
|
||||||
Material *material)
|
Material *material)
|
||||||
{
|
{
|
||||||
return std::make_unique<MaterialData>(scene_delegate, material);
|
auto data = std::make_unique<MaterialData>(scene_delegate, material);
|
||||||
|
data->init();
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath MaterialData::prim_id(BlenderSceneDelegate *scene_delegate, Material *material)
|
pxr::SdfPath MaterialData::prim_id(BlenderSceneDelegate *scene_delegate, Material *material)
|
||||||
@ -41,13 +43,9 @@ MaterialData::MaterialData(BlenderSceneDelegate *scene_delegate, Material *mater
|
|||||||
p_id = prim_id(scene_delegate, material);
|
p_id = prim_id(scene_delegate, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath MaterialData::prim_id() const
|
|
||||||
{
|
|
||||||
return pxr::SdfPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MaterialData::init()
|
void MaterialData::init()
|
||||||
{
|
{
|
||||||
|
CLOG_INFO(LOG_BSD, 2, "%s", id->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::VtValue MaterialData::get_data(pxr::TfToken const &key) const
|
pxr::VtValue MaterialData::get_data(pxr::TfToken const &key) const
|
||||||
|
@ -21,7 +21,6 @@ class MaterialData : IdData {
|
|||||||
|
|
||||||
MaterialData(BlenderSceneDelegate *scene_delegate, Material *material);
|
MaterialData(BlenderSceneDelegate *scene_delegate, Material *material);
|
||||||
|
|
||||||
pxr::SdfPath prim_id() const override;
|
|
||||||
void init() override;
|
void init() override;
|
||||||
void insert() override;
|
void insert() override;
|
||||||
void remove() override;
|
void remove() override;
|
||||||
|
@ -18,17 +18,6 @@ namespace blender::render::hydra {
|
|||||||
MeshData::MeshData(BlenderSceneDelegate *scene_delegate, Object *object)
|
MeshData::MeshData(BlenderSceneDelegate *scene_delegate, Object *object)
|
||||||
: ObjectData(scene_delegate, object)
|
: ObjectData(scene_delegate, object)
|
||||||
{
|
{
|
||||||
if (object->type == OB_MESH && object->mode == OB_MODE_OBJECT &&
|
|
||||||
BLI_listbase_is_empty(&object->modifiers)) {
|
|
||||||
set_mesh((Mesh *)object->data);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Mesh *mesh = BKE_object_to_mesh(nullptr, object, false);
|
|
||||||
if (mesh) {
|
|
||||||
set_mesh(mesh);
|
|
||||||
}
|
|
||||||
BKE_object_to_mesh_clear(object);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::VtValue MeshData::get_data(pxr::TfToken const &key) const
|
pxr::VtValue MeshData::get_data(pxr::TfToken const &key) const
|
||||||
@ -202,6 +191,20 @@ void MeshData::set_mesh(Mesh *mesh)
|
|||||||
|
|
||||||
void MeshData::init()
|
void MeshData::init()
|
||||||
{
|
{
|
||||||
|
CLOG_INFO(LOG_BSD, 2, "%s", id->name);
|
||||||
|
|
||||||
|
Object *object = (Object *)id;
|
||||||
|
if (object->type == OB_MESH && object->mode == OB_MODE_OBJECT &&
|
||||||
|
BLI_listbase_is_empty(&object->modifiers)) {
|
||||||
|
set_mesh((Mesh *)object->data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Mesh *mesh = BKE_object_to_mesh(nullptr, object, false);
|
||||||
|
if (mesh) {
|
||||||
|
set_mesh(mesh);
|
||||||
|
}
|
||||||
|
BKE_object_to_mesh_clear(object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshData::insert()
|
void MeshData::insert()
|
||||||
|
@ -30,6 +30,8 @@ bool ObjectData::supported(Object *object)
|
|||||||
|
|
||||||
std::unique_ptr<ObjectData> ObjectData::create(BlenderSceneDelegate *scene_delegate, Object *object)
|
std::unique_ptr<ObjectData> ObjectData::create(BlenderSceneDelegate *scene_delegate, Object *object)
|
||||||
{
|
{
|
||||||
|
std::unique_ptr<ObjectData> data;
|
||||||
|
|
||||||
switch (object->type) {
|
switch (object->type) {
|
||||||
case OB_MESH:
|
case OB_MESH:
|
||||||
case OB_SURF:
|
case OB_SURF:
|
||||||
@ -37,15 +39,20 @@ std::unique_ptr<ObjectData> ObjectData::create(BlenderSceneDelegate *scene_deleg
|
|||||||
case OB_CURVES:
|
case OB_CURVES:
|
||||||
case OB_CURVES_LEGACY:
|
case OB_CURVES_LEGACY:
|
||||||
case OB_MBALL:
|
case OB_MBALL:
|
||||||
return std::make_unique<MeshData>(scene_delegate, object);
|
data = std::make_unique<MeshData>(scene_delegate, object);
|
||||||
|
break;
|
||||||
|
|
||||||
case OB_LAMP:
|
case OB_LAMP:
|
||||||
return std::make_unique<LightData>(scene_delegate, object);
|
data = std::make_unique<LightData>(scene_delegate, object);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return nullptr;
|
if (data) {
|
||||||
|
data->init();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath ObjectData::prim_id(BlenderSceneDelegate *scene_delegate, Object *object)
|
pxr::SdfPath ObjectData::prim_id(BlenderSceneDelegate *scene_delegate, Object *object)
|
||||||
@ -63,11 +70,6 @@ ObjectData::ObjectData(BlenderSceneDelegate *scene_delegate, Object *object)
|
|||||||
p_id = prim_id(scene_delegate, object);
|
p_id = prim_id(scene_delegate, object);
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath ObjectData::prim_id() const
|
|
||||||
{
|
|
||||||
return pxr::SdfPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
int ObjectData::type()
|
int ObjectData::type()
|
||||||
{
|
{
|
||||||
return ((Object *)id)->type;
|
return ((Object *)id)->type;
|
||||||
|
@ -22,8 +22,6 @@ class ObjectData : public IdData {
|
|||||||
|
|
||||||
ObjectData(BlenderSceneDelegate *scene_delegate, Object *object);
|
ObjectData(BlenderSceneDelegate *scene_delegate, Object *object);
|
||||||
|
|
||||||
pxr::SdfPath prim_id() const override;
|
|
||||||
|
|
||||||
int type();
|
int type();
|
||||||
pxr::GfMatrix4d transform();
|
pxr::GfMatrix4d transform();
|
||||||
bool update_visibility(View3D *view3d);
|
bool update_visibility(View3D *view3d);
|
||||||
|
@ -32,7 +32,9 @@ std::unique_ptr<WorldData> WorldData::create(BlenderSceneDelegate *scene_delegat
|
|||||||
World *world,
|
World *world,
|
||||||
bContext *context)
|
bContext *context)
|
||||||
{
|
{
|
||||||
return std::make_unique<WorldData>(scene_delegate, world, context);
|
auto data = std::make_unique<WorldData>(scene_delegate, world, context);
|
||||||
|
data->init();
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath WorldData::prim_id(BlenderSceneDelegate *scene_delegate)
|
pxr::SdfPath WorldData::prim_id(BlenderSceneDelegate *scene_delegate)
|
||||||
@ -41,9 +43,16 @@ pxr::SdfPath WorldData::prim_id(BlenderSceneDelegate *scene_delegate)
|
|||||||
}
|
}
|
||||||
|
|
||||||
WorldData::WorldData(BlenderSceneDelegate *scene_delegate, World *world, bContext *context)
|
WorldData::WorldData(BlenderSceneDelegate *scene_delegate, World *world, bContext *context)
|
||||||
: IdData(scene_delegate, (ID *)world)
|
: IdData(scene_delegate, (ID *)world), context(context)
|
||||||
{
|
{
|
||||||
p_id = prim_id(scene_delegate);
|
p_id = prim_id(scene_delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WorldData::init()
|
||||||
|
{
|
||||||
|
CLOG_INFO(LOG_BSD, 2, "%s", id->name);
|
||||||
|
|
||||||
|
World *world = (World *)id;
|
||||||
|
|
||||||
data[pxr::UsdLuxTokens->orientToStageUpAxis] = true;
|
data[pxr::UsdLuxTokens->orientToStageUpAxis] = true;
|
||||||
|
|
||||||
@ -100,15 +109,6 @@ WorldData::WorldData(BlenderSceneDelegate *scene_delegate, World *world, bContex
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::SdfPath WorldData::prim_id() const
|
|
||||||
{
|
|
||||||
return pxr::SdfPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorldData::init()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
pxr::GfMatrix4d WorldData::transform()
|
pxr::GfMatrix4d WorldData::transform()
|
||||||
{
|
{
|
||||||
pxr::GfMatrix4d transform = pxr::GfMatrix4d(pxr::GfRotation(pxr::GfVec3d(1.0, 0.0, 0.0), -90),
|
pxr::GfMatrix4d transform = pxr::GfMatrix4d(pxr::GfRotation(pxr::GfVec3d(1.0, 0.0, 0.0), -90),
|
||||||
|
@ -27,7 +27,6 @@ class WorldData : public IdData {
|
|||||||
|
|
||||||
WorldData(BlenderSceneDelegate *scene_delegate, World *world, bContext *context);
|
WorldData(BlenderSceneDelegate *scene_delegate, World *world, bContext *context);
|
||||||
|
|
||||||
pxr::SdfPath prim_id() const override;
|
|
||||||
void init() override;
|
void init() override;
|
||||||
void insert() override;
|
void insert() override;
|
||||||
void remove() override;
|
void remove() override;
|
||||||
@ -39,6 +38,7 @@ class WorldData : public IdData {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<pxr::TfToken, pxr::VtValue> data;
|
std::map<pxr::TfToken, pxr::VtValue> data;
|
||||||
|
bContext *context;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace blender::render::hydra
|
} // namespace blender::render::hydra
|
||||||
|
Loading…
Reference in New Issue
Block a user