diff --git a/src/experimental/filament/CMakeLists.txt b/src/experimental/filament/CMakeLists.txt index a495863b..ebd544f2 100644 --- a/src/experimental/filament/CMakeLists.txt +++ b/src/experimental/filament/CMakeLists.txt @@ -52,8 +52,8 @@ target_sources(${MUJOCO_FILAMENT_TARGET_NAME} filament/object_manager.h filament/render_target.cc filament/render_target.h - filament/renderables.cc - filament/renderables.h + filament/renderable.cc + filament/renderable.h filament/scene_bridge.cc filament/scene_bridge.h filament/scene_view.cc diff --git a/src/experimental/filament/filament/drawable.cc b/src/experimental/filament/filament/drawable.cc index 1f90f5e1..a2bff095 100644 --- a/src/experimental/filament/filament/drawable.cc +++ b/src/experimental/filament/filament/drawable.cc @@ -35,7 +35,7 @@ #include "experimental/filament/filament/mesh.h" #include "experimental/filament/filament/model_objects.h" #include "experimental/filament/filament/object_manager.h" -#include "experimental/filament/filament/renderables.h" +#include "experimental/filament/filament/renderable.h" #include "experimental/filament/filament/texture.h" namespace mujoco { @@ -88,10 +88,10 @@ static bool IsBehind(const float* headpos, const float* pos, const float* mat) { Drawable::Drawable(ModelObjects* model_objects, const mjvScene* scene, const mjvGeom& geom) - : renderables_(model_objects->GetEngine()) { + : renderable_(model_objects->GetEngine()) { if (geom.category == mjCAT_DECOR) { - renderables_.SetCastShadows(false); - renderables_.SetReceiveShadows(false); + renderable_.SetCastShadows(false); + renderable_.SetReceiveShadows(false); } switch ((mjtGeom)geom.type) { @@ -172,15 +172,15 @@ void Drawable::AddMesh(ModelObjects* model_objs, int data_id) { if (mesh == nullptr) { mju_error("Unknown mesh %d", data_id); } - renderables_.Append(mesh); + renderable_.Append(mesh); } void Drawable::AddGeom(ModelObjects* model_objs, const mjvScene* scene, const mjvGeom& geom) { if (geom.type == mjGEOM_FLEX) { - renderables_.Append(model_objs->CreateFlexMesh(scene, geom)); + renderable_.Append(model_objs->CreateFlexMesh(scene, geom)); } else if (geom.type == mjGEOM_SKIN) { - renderables_.Append(model_objs->CreateSkinMesh(scene, geom)); + renderable_.Append(model_objs->CreateSkinMesh(scene, geom)); } } @@ -189,7 +189,7 @@ void Drawable::AddHeightField(ModelObjects* model_objs, int hfield_id) { if (mesh == nullptr) { mju_error("Unknown height field %d", hfield_id); } - renderables_.Append(mesh); + renderable_.Append(mesh); } void Drawable::AddShape(ModelObjects* model_objs, @@ -198,7 +198,7 @@ void Drawable::AddShape(ModelObjects* model_objs, if (mesh == nullptr) { mju_error("Unknown shape %d", shape_type); } - renderables_.Append(mesh); + renderable_.Append(mesh); } void Drawable::SetTransform(const mjvGeom& geom) { @@ -211,9 +211,9 @@ void Drawable::SetTransform(const mjvGeom& geom) { float3 size = ReadFloat3(geom.size); filament::TransformManager& tm = - renderables_.GetEngine()->getTransformManager(); - for (int j = 0; j < renderables_.GetNumEntities(); ++j) { - const utils::Entity& entity = renderables_[j]; + renderable_.GetEngine()->getTransformManager(); + for (int j = 0; j < renderable_.GetNumEntities(); ++j) { + const utils::Entity& entity = renderable_[j]; // Update object transform. mat4 entity_transform = transform_; @@ -330,15 +330,15 @@ void Drawable::UpdateMaterial(const mjModel* model, const mjvGeom& geom, if (geom.type == mjGEOM_PLANE) { if (IsBehind(headpos, geom.pos, geom.mat)) { params.color[3] *= 0.3; - renderables_.SetReceiveShadows(false); + renderable_.SetReceiveShadows(false); params.reflective = false; } else { - renderables_.SetReceiveShadows(true); + renderable_.SetReceiveShadows(true); params.reflective = enable_reflection && geom.reflectance > 0 && params.color.a == 1.0f; } } - renderables_.SetWireframe(render_flags[mjRND_WIREFRAME]); + renderable_.SetWireframe(render_flags[mjRND_WIREFRAME]); Material::Textures textures; if (geom.matid >= 0) { diff --git a/src/experimental/filament/filament/drawable.h b/src/experimental/filament/filament/drawable.h index b28ef5c3..29829c78 100644 --- a/src/experimental/filament/filament/drawable.h +++ b/src/experimental/filament/filament/drawable.h @@ -22,7 +22,7 @@ #include "experimental/filament/filament/material.h" #include "experimental/filament/filament/model_objects.h" #include "experimental/filament/filament/object_manager.h" -#include "experimental/filament/filament/renderables.h" +#include "experimental/filament/filament/renderable.h" namespace mujoco { @@ -48,11 +48,11 @@ class Drawable { // Returns the transform of the drawable. const filament::math::mat4& GetTransform() const { return transform_; } - // Returns the renderables for the drawable. - Renderables& GetRenderables() { return renderables_; } + // Returns the renderable for the drawable. + Renderable& GetRenderable() { return renderable_; } // Returns the material for the drawable. - Material& GetMaterial() { return renderables_.GetMaterial(); } + Material& GetMaterial() { return renderable_.GetMaterial(); } private: void AddMesh(ModelObjects* model_objs, int data_id); @@ -61,7 +61,7 @@ class Drawable { void AddHeightField(ModelObjects* model_objs, int hfield_id); void AddShape(ModelObjects* model_objs, ModelObjects::ShapeType shape_type); - Renderables renderables_; + Renderable renderable_; filament::math::mat4 transform_; }; diff --git a/src/experimental/filament/filament/renderables.cc b/src/experimental/filament/filament/renderable.cc similarity index 83% rename from src/experimental/filament/filament/renderables.cc rename to src/experimental/filament/filament/renderable.cc index fa66a5bf..e25739b1 100644 --- a/src/experimental/filament/filament/renderables.cc +++ b/src/experimental/filament/filament/renderable.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "experimental/filament/filament/renderables.h" +#include "experimental/filament/filament/renderable.h" #include #include @@ -27,15 +27,15 @@ namespace mujoco { -Renderables::Renderables(filament::Engine* engine) : material_(engine) {} +Renderable::Renderable(filament::Engine* engine) : material_(engine) {} -Renderables::~Renderables() noexcept { +Renderable::~Renderable() noexcept { while (!entities_.empty()) { RemoveLast(); } } -void Renderables::RemoveLast() { +void Renderable::RemoveLast() { if (entities_.empty()) { return; } @@ -53,7 +53,7 @@ void Renderables::RemoveLast() { meshes_.pop_back(); } -void Renderables::Update(int index, const Mesh* mesh) { +void Renderable::Update(int index, const Mesh* mesh) { if (index < 0 || index >= entities_.size()) { mju_error("Invalid index %d for renderable.", index); } @@ -62,7 +62,7 @@ void Renderables::Update(int index, const Mesh* mesh) { UpdateMeshes(index, mesh); } -void Renderables::Update(int index, MeshPtr mesh) { +void Renderable::Update(int index, MeshPtr mesh) { if (index < 0 || index >= entities_.size()) { mju_error("Invalid index %d for renderable.", index); } @@ -71,19 +71,19 @@ void Renderables::Update(int index, MeshPtr mesh) { UpdateMeshes(index, mesh.get(), std::move(mesh)); } -void Renderables::Append(const Mesh* mesh) { +void Renderable::Append(const Mesh* mesh) { utils::Entity entity = CreateEntity(mesh); entities_.push_back(entity); meshes_.push_back({nullptr, mesh}); } -void Renderables::Append(MeshPtr mesh) { +void Renderable::Append(MeshPtr mesh) { utils::Entity entity = CreateEntity(mesh.get()); entities_.push_back(entity); meshes_.push_back({std::move(mesh), mesh.get()}); } -utils::Entity Renderables::CreateEntity(const Mesh* mesh) { +utils::Entity Renderable::CreateEntity(const Mesh* mesh) { filament::VertexBuffer* vertex_buffer = mesh->GetFilamentVertexBuffer(); if (vertex_buffer == nullptr) { mju_error("Invalid (null) vertex buffer."); @@ -113,7 +113,8 @@ utils::Entity Renderables::CreateEntity(const Mesh* mesh) { builder.receiveShadows(receive_shadows_); builder.layerMask(0xff, layer_mask_); builder.priority(priority_); - builder.screenSpaceContactShadows(true);; + builder.screenSpaceContactShadows(true); + ; builder.build(*GetEngine(), entity); if (assigned_scene_) { @@ -122,7 +123,7 @@ utils::Entity Renderables::CreateEntity(const Mesh* mesh) { return entity; } -void Renderables::UpdateEntity(utils::Entity entity, const Mesh* mesh) { +void Renderable::UpdateEntity(utils::Entity entity, const Mesh* mesh) { filament::VertexBuffer* vertex_buffer = mesh->GetFilamentVertexBuffer(); if (vertex_buffer == nullptr) { mju_error("Invalid (null) vertex buffer."); @@ -139,8 +140,7 @@ void Renderables::UpdateEntity(utils::Entity entity, const Mesh* mesh) { index_buffer->getIndexCount()); } -void Renderables::UpdateMeshes(int index, const Mesh* mesh, - MeshPtr owned_mesh) { +void Renderable::UpdateMeshes(int index, const Mesh* mesh, MeshPtr owned_mesh) { if (index < 0 || index >= meshes_.size()) { mju_error("Invalid index %d for renderable.", index); } @@ -148,7 +148,7 @@ void Renderables::UpdateMeshes(int index, const Mesh* mesh, meshes_[index].mesh = mesh; } -void Renderables::AddToScene(filament::Scene* scene) { +void Renderable::AddToScene(filament::Scene* scene) { if (assigned_scene_) { if (assigned_scene_ != scene) { mju_error("Cannot add renderable to multiple scenes."); @@ -162,7 +162,7 @@ void Renderables::AddToScene(filament::Scene* scene) { assigned_scene_ = scene; } -void Renderables::RemoveFromScene(filament::Scene* scene) { +void Renderable::RemoveFromScene(filament::Scene* scene) { if (assigned_scene_ != scene) { mju_error("Attempting to remove renderable from wrong scene."); } @@ -172,8 +172,7 @@ void Renderables::RemoveFromScene(filament::Scene* scene) { assigned_scene_ = nullptr; } -void Renderables::SetMaterialInstance( - filament::MaterialInstance* instance) { +void Renderable::SetMaterialInstance(filament::MaterialInstance* instance) { if (instance != material_instance_) { filament::RenderableManager& rm = GetEngine()->getRenderableManager(); for (utils::Entity& entity : entities_) { @@ -184,7 +183,7 @@ void Renderables::SetMaterialInstance( } } -void Renderables::SetLayerMask(std::uint8_t mask) { +void Renderable::SetLayerMask(std::uint8_t mask) { if (mask != layer_mask_) { layer_mask_ = mask; @@ -195,7 +194,7 @@ void Renderables::SetLayerMask(std::uint8_t mask) { } } -void Renderables::SetPriority(std::uint8_t priority) { +void Renderable::SetPriority(std::uint8_t priority) { if (priority != priority_) { priority_ = priority; @@ -206,7 +205,7 @@ void Renderables::SetPriority(std::uint8_t priority) { } } -void Renderables::SetCastShadows(bool cast_shadows) { +void Renderable::SetCastShadows(bool cast_shadows) { if (cast_shadows_ != cast_shadows) { cast_shadows_ = cast_shadows; @@ -217,7 +216,7 @@ void Renderables::SetCastShadows(bool cast_shadows) { } } -void Renderables::SetReceiveShadows(bool receive_shadows) { +void Renderable::SetReceiveShadows(bool receive_shadows) { if (receive_shadows_ != receive_shadows) { receive_shadows_ = receive_shadows; @@ -228,7 +227,7 @@ void Renderables::SetReceiveShadows(bool receive_shadows) { } } -void Renderables::SetWireframe(bool wireframe) { +void Renderable::SetWireframe(bool wireframe) { static constexpr auto kWireframeType = filament::RenderableManager::PrimitiveType::LINES; @@ -249,10 +248,8 @@ void Renderables::SetWireframe(bool wireframe) { } } -Material& Renderables::GetMaterial() { return material_; } +Material& Renderable::GetMaterial() { return material_; } -filament::Engine* Renderables::GetEngine() { - return material_.GetEngine(); -} +filament::Engine* Renderable::GetEngine() { return material_.GetEngine(); } } // namespace mujoco diff --git a/src/experimental/filament/filament/renderables.h b/src/experimental/filament/filament/renderable.h similarity index 89% rename from src/experimental/filament/filament/renderables.h rename to src/experimental/filament/filament/renderable.h index 9daa544c..7cdcd762 100644 --- a/src/experimental/filament/filament/renderables.h +++ b/src/experimental/filament/filament/renderable.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLES_H_ -#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLES_H_ +#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_ +#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_ #include #include @@ -27,17 +27,17 @@ namespace mujoco { // Manages a collection of related filament Renderable Entities. -class Renderables { +class Renderable { public: // Default filament values for priority and layer mask. static constexpr std::uint8_t kDefaultPriority = 4; static constexpr std::uint8_t kDefaultLayerMask = 0x01; - Renderables(filament::Engine* engine); - ~Renderables() noexcept; + Renderable(filament::Engine* engine); + ~Renderable() noexcept; - Renderables(const Renderables&) = delete; - Renderables& operator=(const Renderables&) = delete; + Renderable(const Renderable&) = delete; + Renderable& operator=(const Renderable&) = delete; // Appends a new renderable entity built from the given mesh. void Append(const Mesh* mesh); @@ -110,4 +110,4 @@ class Renderables { } // namespace mujoco -#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLES_H_ +#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_ diff --git a/src/experimental/filament/filament/scene_view.cc b/src/experimental/filament/filament/scene_view.cc index 5877d831..9ea46dcb 100644 --- a/src/experimental/filament/filament/scene_view.cc +++ b/src/experimental/filament/filament/scene_view.cc @@ -45,7 +45,7 @@ #include "experimental/filament/filament/material.h" #include "experimental/filament/filament/math_util.h" #include "experimental/filament/filament/render_target.h" -#include "experimental/filament/filament/renderables.h" +#include "experimental/filament/filament/renderable.h" #include "experimental/filament/filament/texture.h" namespace mujoco { @@ -163,7 +163,7 @@ SceneView::~SceneView() { light->RemoveFromScene(scene_); } for (auto& drawable : drawables_) { - drawable->GetRenderables().RemoveFromScene(scene_); + drawable->GetRenderable().RemoveFromScene(scene_); } lights_.clear(); drawables_.clear(); @@ -194,7 +194,7 @@ void SceneView::RemoveFromScene(Light* light) { void SceneView::AddToScene(Drawable* drawable) { if (drawables_.insert(drawable).second) { - drawable->GetRenderables().AddToScene(scene_); + drawable->GetRenderable().AddToScene(scene_); if (drawable->GetMaterial().GetParams().reflective) { AddReflectiveDrawable(drawable); } @@ -207,7 +207,7 @@ void SceneView::RemoveFromScene(Drawable* drawable) { if (it != reflectives_.end()) { reflectives_.erase(it); } - drawable->GetRenderables().RemoveFromScene(scene_); + drawable->GetRenderable().RemoveFromScene(scene_); } } @@ -248,8 +248,8 @@ void SceneView::Render(filament::Renderer* renderer, for (auto& iter : drawables_) { Material& material = iter->GetMaterial(); - Renderables& renderables = iter->GetRenderables(); - renderables.SetMaterialInstance( + Renderable& renderable = iter->GetRenderable(); + renderable.SetMaterialInstance( material.GetMaterialInstance(request.draw_mode)); } @@ -272,7 +272,7 @@ void SceneView::Render(filament::Renderer* renderer, SetupReflectionCamera(drawable->GetTransform(), camera_, reflect_camera_); // Hide reflective surface from its own reflection pass. - drawable->GetRenderables().SetLayerMask(0x00); + drawable->GetRenderable().SetLayerMask(0x00); // Render the reflection to its render target. reflect_view_->setRenderTarget( @@ -280,7 +280,7 @@ void SceneView::Render(filament::Renderer* renderer, renderer->render(reflect_view_); // Unhide the reflective surface. - drawable->GetRenderables().SetLayerMask(0x01); + drawable->GetRenderable().SetLayerMask(0x01); } }