#include <skin.h>
|
static std::unique_ptr< Skin > | MakeFromFlatbuffer (const fb::Skin &skin, const std::vector< std::shared_ptr< Node >> &scene_nodes) |
|
Definition at line 21 of file skin.h.
◆ ~Skin()
impeller::scene::Skin::~Skin |
( |
| ) |
|
|
default |
◆ Skin()
impeller::scene::Skin::Skin |
( |
Skin && |
| ) |
|
|
default |
◆ GetJointsTexture()
std::shared_ptr< Texture > impeller::scene::Skin::GetJointsTexture |
( |
Allocator & |
allocator | ) |
|
Definition at line 65 of file skin.cc.
68 auto required_pixels = joints_.size() * 4;
69 auto dimension_size = std::max(
76 texture_descriptor.
size = {dimension_size, dimension_size};
79 auto result = allocator.CreateTexture(texture_descriptor);
80 result->SetLabel(
"Joints Texture");
82 FML_LOG(ERROR) <<
"Could not create joint texture.";
86 std::vector<Matrix> joints;
87 joints.resize(result->GetSize().Area() / 4, Matrix());
88 FML_DCHECK(joints.size() >= joints_.size());
89 for (
size_t joint_i = 0; joint_i < joints_.size(); joint_i++) {
90 const Node* joint = joints_[joint_i].get();
98 while (joint && joint->IsJoint()) {
99 joints[joint_i] = joint->GetLocalTransform() * joints[joint_i];
100 joint = joint->GetParent();
110 joints[joint_i] = joints[joint_i] * inverse_bind_matrices_[joint_i];
113 if (!result->SetContents(
reinterpret_cast<uint8_t*
>(joints.data()),
114 joints.size() *
sizeof(Matrix))) {
115 FML_LOG(ERROR) <<
"Could not set contents of joint texture.";
References impeller::Allocator::CreateTexture(), impeller::TextureDescriptor::format, impeller::scene::Node::GetLocalTransform(), impeller::scene::Node::GetParent(), impeller::scene::Node::IsJoint(), impeller::kHostVisible, impeller::kR32G32B32A32Float, impeller::TextureDescriptor::mip_count, impeller::Allocation::NextPowerOfTwoSize(), impeller::TextureDescriptor::size, and impeller::TextureDescriptor::storage_mode.
◆ MakeFromFlatbuffer()
std::unique_ptr< Skin > impeller::scene::Skin::MakeFromFlatbuffer |
( |
const fb::Skin & |
skin, |
|
|
const std::vector< std::shared_ptr< Node >> & |
scene_nodes |
|
) |
| |
|
static |
Definition at line 19 of file skin.cc.
22 if (!skin.joints() || !skin.inverse_bind_matrices() ||
23 skin.joints()->size() != skin.inverse_bind_matrices()->size()) {
30 result.joints_.reserve(skin.joints()->size());
31 for (
auto joint : *skin.joints()) {
32 if (joint < 0 ||
static_cast<size_t>(joint) > scene_nodes.size()) {
34 result.joints_.push_back(
nullptr);
37 if (scene_nodes[joint]) {
38 scene_nodes[joint]->SetIsJoint(
true);
40 result.joints_.push_back(scene_nodes[joint]);
43 result.inverse_bind_matrices_.reserve(skin.inverse_bind_matrices()->size());
44 for (
size_t matrix_i = 0; matrix_i < skin.inverse_bind_matrices()->size();
46 const auto* ip_matrix = skin.inverse_bind_matrices()->Get(matrix_i);
49 result.inverse_bind_matrices_.push_back(matrix);
51 result.joints_[matrix_i]->SetGlobalTransform(matrix.Invert());
54 return std::make_unique<Skin>(std::move(result));
References impeller::Matrix::Invert(), impeller::scene::importer::ToMatrix(), and VALIDATION_LOG.
◆ operator=()
Skin & impeller::scene::Skin::operator= |
( |
Skin && |
| ) |
|
|
default |
The documentation for this class was generated from the following files: