diff --git a/src/experimental/filament/CMakeLists.txt b/src/experimental/filament/CMakeLists.txt index 20ae8c5e..cfa322c2 100644 --- a/src/experimental/filament/CMakeLists.txt +++ b/src/experimental/filament/CMakeLists.txt @@ -24,6 +24,7 @@ target_sources(${MUJOCO_FILAMENT_TARGET_NAME} render_context_filament.h render_context_filament.cc render_context_filament_cpp.h + filament_util.h filament/builtins.cc filament/builtins.h filament/color_grading_options.cc @@ -37,11 +38,8 @@ target_sources(${MUJOCO_FILAMENT_TARGET_NAME} filament/light.h filament/material.cc filament/material.h - filament/math_util.cc - filament/math_util.h filament/mesh.cc filament/mesh.h - filament/model_util.h filament/object_manager.cc filament/object_manager.h filament/render_target.cc diff --git a/src/experimental/filament/compat/mjr_filament_renderer.cc b/src/experimental/filament/compat/mjr_filament_renderer.cc index c56731d8..d43153d8 100644 --- a/src/experimental/filament/compat/mjr_filament_renderer.cc +++ b/src/experimental/filament/compat/mjr_filament_renderer.cc @@ -18,17 +18,14 @@ #include #include -#include -#include #include #include #include #include "experimental/filament/compat/imgui_bridge.h" #include "experimental/filament/compat/scene_bridge.h" #include "experimental/filament/filament/filament_context.h" -#include "experimental/filament/filament/model_util.h" -#include "experimental/filament/render_context_filament.h" #include "experimental/filament/render_context_filament_cpp.h" +#include "experimental/filament/render_context_filament.h" namespace mujoco { diff --git a/src/experimental/filament/compat/model_objects.cc b/src/experimental/filament/compat/model_objects.cc index 2fd77a75..e1c33456 100644 --- a/src/experimental/filament/compat/model_objects.cc +++ b/src/experimental/filament/compat/model_objects.cc @@ -29,10 +29,9 @@ #include #include #include -#include "experimental/filament/filament/math_util.h" -#include "experimental/filament/filament/model_util.h" -#include "experimental/filament/render_context_filament.h" +#include "experimental/filament/filament_util.h" #include "experimental/filament/render_context_filament_cpp.h" +#include "experimental/filament/render_context_filament.h" namespace mujoco { diff --git a/src/experimental/filament/compat/scene_bridge.cc b/src/experimental/filament/compat/scene_bridge.cc index d78dc09c..16c8e26e 100644 --- a/src/experimental/filament/compat/scene_bridge.cc +++ b/src/experimental/filament/compat/scene_bridge.cc @@ -23,16 +23,15 @@ #include #include #include +#include #include #include -#include #include #include "experimental/filament/compat/model_objects.h" #include "experimental/filament/compat/scene_geom_util.h" -#include "experimental/filament/filament/math_util.h" -#include "experimental/filament/filament/model_util.h" -#include "experimental/filament/render_context_filament.h" +#include "experimental/filament/filament_util.h" #include "experimental/filament/render_context_filament_cpp.h" +#include "experimental/filament/render_context_filament.h" namespace mujoco { diff --git a/src/experimental/filament/filament/builtins.cc b/src/experimental/filament/filament/builtins.cc index 28468e50..b18e28e5 100644 --- a/src/experimental/filament/filament/builtins.cc +++ b/src/experimental/filament/filament/builtins.cc @@ -26,7 +26,7 @@ #include #include #include -#include "experimental/filament/filament/math_util.h" +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/mesh.h" #include "experimental/filament/render_context_filament.h" diff --git a/src/experimental/filament/filament/light.cc b/src/experimental/filament/filament/light.cc index a4cc0ed1..396aee42 100644 --- a/src/experimental/filament/filament/light.cc +++ b/src/experimental/filament/filament/light.cc @@ -25,8 +25,8 @@ #include #include #include +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/filament_context.h" -#include "experimental/filament/filament/math_util.h" #include "experimental/filament/filament/texture.h" #include "experimental/filament/render_context_filament.h" diff --git a/src/experimental/filament/filament/material.cc b/src/experimental/filament/filament/material.cc index 925e88fb..672f7a40 100644 --- a/src/experimental/filament/filament/material.cc +++ b/src/experimental/filament/filament/material.cc @@ -20,9 +20,9 @@ #include #include #include -#include "experimental/filament/filament/math_util.h" -#include "experimental/filament/filament/texture.h" +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/object_manager.h" +#include "experimental/filament/filament/texture.h" #include "experimental/filament/render_context_filament.h" namespace mujoco { diff --git a/src/experimental/filament/filament/mesh.cc b/src/experimental/filament/filament/mesh.cc index 9c06cfc7..9d08789e 100644 --- a/src/experimental/filament/filament/mesh.cc +++ b/src/experimental/filament/filament/mesh.cc @@ -32,7 +32,7 @@ #include #include #include -#include "experimental/filament/filament/math_util.h" +#include "experimental/filament/filament_util.h" #include "experimental/filament/render_context_filament.h" namespace mujoco { diff --git a/src/experimental/filament/filament/model_util.h b/src/experimental/filament/filament/model_util.h deleted file mode 100644 index 06501ae7..00000000 --- a/src/experimental/filament/filament/model_util.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2025 DeepMind Technologies Limited -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MODEL_UTIL_H_ -#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MODEL_UTIL_H_ - -#include - -#include -#include -#include -#include -#include - -namespace mujoco { - -// Reads a value with the given name from the mjModel's data sections. The -// default_value is returned if the named element is not found. -template -T ReadElement(const mjModel* model, const char* name, T default_value = T()) { - constexpr bool is_string = - std::is_same_v || std::is_same_v; - - const int type = is_string ? mjOBJ_TEXT : mjOBJ_NUMERIC; - const int id = mj_name2id(model, type, name); - if (id < 0) { - return default_value; - } - - if constexpr (std::is_same_v) { - const char* ptr = model->text_data + model->text_adr[id]; - return ptr; - } else if constexpr (std::is_same_v) { - const char* ptr = model->text_data + model->text_adr[id]; - // Do not include the null terminator in the string view. - return std::string_view(ptr, model->text_size[id] - 1); - } else if constexpr (std::is_arithmetic_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - return static_cast(*ptr); - } else if constexpr (std::is_enum_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - return static_cast(static_cast(*ptr)); - } else if constexpr (std::is_same_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - if (model->numeric_size[id] != 2) mju_error("Invalid numeric size."); - return T{ptr[0], ptr[1]}; - } else if constexpr (std::is_same_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - if (model->numeric_size[id] != 3) mju_error("Invalid numeric size."); - return T{ptr[0], ptr[1], ptr[2]}; - } else if constexpr (std::is_same_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - if (model->numeric_size[id] != 4) mju_error("Invalid numeric size."); - return T{ptr[0], ptr[1], ptr[2], ptr[3]}; - } else if constexpr (std::is_same_v) { - const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; - return static_cast(*ptr != 0); - } - return default_value; -} - -} // namespace mujoco - -#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MODEL_UTIL_H_ diff --git a/src/experimental/filament/filament/renderable.cc b/src/experimental/filament/filament/renderable.cc index 8f4af490..bfa0a57f 100644 --- a/src/experimental/filament/filament/renderable.cc +++ b/src/experimental/filament/filament/renderable.cc @@ -29,10 +29,10 @@ #include #include #include +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/builtins.h" #include "experimental/filament/filament/filament_context.h" #include "experimental/filament/filament/material.h" -#include "experimental/filament/filament/math_util.h" #include "experimental/filament/filament/mesh.h" #include "experimental/filament/filament/object_manager.h" #include "experimental/filament/filament/texture.h" diff --git a/src/experimental/filament/filament/renderable.h b/src/experimental/filament/filament/renderable.h index 3d41b2a1..58310d98 100644 --- a/src/experimental/filament/filament/renderable.h +++ b/src/experimental/filament/filament/renderable.h @@ -24,8 +24,8 @@ #include #include #include +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/filament_context.h" -#include "experimental/filament/filament/math_util.h" #include "experimental/filament/filament/mesh.h" #include "experimental/filament/filament/object_manager.h" #include "experimental/filament/render_context_filament.h" diff --git a/src/experimental/filament/filament/scene_view.cc b/src/experimental/filament/filament/scene_view.cc index e97395b7..c3f132ab 100644 --- a/src/experimental/filament/filament/scene_view.cc +++ b/src/experimental/filament/filament/scene_view.cc @@ -35,16 +35,15 @@ #include #include #include +#include #include #include -#include #include #include +#include "experimental/filament/filament_util.h" #include "experimental/filament/filament/color_grading_options.h" #include "experimental/filament/filament/filament_context.h" #include "experimental/filament/filament/light.h" -#include "experimental/filament/filament/math_util.h" -#include "experimental/filament/filament/model_util.h" #include "experimental/filament/filament/render_target.h" #include "experimental/filament/filament/renderable.h" #include "experimental/filament/filament/texture.h" diff --git a/src/experimental/filament/filament/math_util.cc b/src/experimental/filament/filament_util.cc similarity index 98% rename from src/experimental/filament/filament/math_util.cc rename to src/experimental/filament/filament_util.cc index 34e0cb24..bd092a69 100644 --- a/src/experimental/filament/filament/math_util.cc +++ b/src/experimental/filament/filament_util.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "experimental/filament/filament/math_util.h" +#include "experimental/filament/filament_util.h" #include #include diff --git a/src/experimental/filament/filament/math_util.h b/src/experimental/filament/filament_util.h similarity index 59% rename from src/experimental/filament/filament/math_util.h rename to src/experimental/filament/filament_util.h index 5438b5e4..39c4c640 100644 --- a/src/experimental/filament/filament/math_util.h +++ b/src/experimental/filament/filament_util.h @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATH_UTIL_H_ -#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATH_UTIL_H_ +#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_ +#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_ #include #include #include #include #include +#include +#include namespace mujoco { @@ -96,6 +98,51 @@ filament::math::float4 CalculateOrientation( const filament::math::float3& p2, const filament::math::float3& p3); +// Reads a value with the given name from the mjModel's data sections. The +// default_value is returned if the named element is not found. +template +T ReadElement(const mjModel* model, const char* name, T default_value = T()) { + constexpr bool is_string = + std::is_same_v || std::is_same_v; + + const int type = is_string ? mjOBJ_TEXT : mjOBJ_NUMERIC; + const int id = mj_name2id(model, type, name); + if (id < 0) { + return default_value; + } + + if constexpr (std::is_same_v) { + const char* ptr = model->text_data + model->text_adr[id]; + return ptr; + } else if constexpr (std::is_same_v) { + const char* ptr = model->text_data + model->text_adr[id]; + // Do not include the null terminator in the string view. + return std::string_view(ptr, model->text_size[id] - 1); + } else if constexpr (std::is_arithmetic_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + return static_cast(*ptr); + } else if constexpr (std::is_enum_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + return static_cast(static_cast(*ptr)); + } else if constexpr (std::is_same_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + if (model->numeric_size[id] != 2) mju_error("Invalid numeric size."); + return T{ptr[0], ptr[1]}; + } else if constexpr (std::is_same_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + if (model->numeric_size[id] != 3) mju_error("Invalid numeric size."); + return T{ptr[0], ptr[1], ptr[2]}; + } else if constexpr (std::is_same_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + if (model->numeric_size[id] != 4) mju_error("Invalid numeric size."); + return T{ptr[0], ptr[1], ptr[2], ptr[3]}; + } else if constexpr (std::is_same_v) { + const mjtNum* ptr = model->numeric_data + model->numeric_adr[id]; + return static_cast(*ptr != 0); + } + return default_value; +} + } // namespace mujoco -#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATH_UTIL_H_ +#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_