| Flutter Impeller |

Namespaces | Classes | Enumerations | Functions | Variables
impeller::scene Namespace Reference

## Namespaces
| importer
| testing

## Classes
class | Animation
class | AnimationClip
class | AnimationPlayer
struct | AnimationTransforms
class | Camera
class | CuboidGeometry
class | Geometry
class | Material
class | Mesh
class | Node
class | PhysicallyBasedMaterial
struct | PipelineKey
class | PropertyResolver
class | RotationTimelineResolver
class | ScaleTimelineResolver
class | Scene
struct | SceneCommand
class | SceneContext
struct | SceneContextOptions
class | SceneEncoder
class | Skin
class | SkinnedVertexBufferGeometry
class | TimelineResolver
class | TranslationTimelineResolver
class | UnlitMaterial
class | UnskinnedVertexBufferGeometry

## Enumerations
enum | GeometryType { GeometryType::kUnskinned = 0, GeometryType::kSkinned = 1, GeometryType::kLastType = kSkinned }
enum | MaterialType { MaterialType::kUnlit = 0, MaterialType::kLastType = kUnlit }

## Functions
static std::shared_ptr< Texture > | UnpackTextureFromFlatbuffer (const fb::Texture *iptexture, Allocator &allocator)
static void | EncodeCommand (const SceneContext &scene_context, const Matrix &view_transform, RenderPass &render_pass, const SceneCommand &scene_command)

## Variables
static std::atomic_uint64_t | kNextNodeID = 0

## Enumeration Type Documentation

## ◆ GeometryType

enum impeller::scene::GeometryType
| strong

Enumerator
kUnskinned |
kSkinned |
kLastType |

Definition at line 13 of file pipeline_key.h.

13 {
14 kUnskinned = 0,
15 kSkinned = 1,
16 kLastType = kSkinned,
17 };

## ◆ MaterialType

enum impeller::scene::MaterialType
| strong

Enumerator
kUnlit |
kLastType |

Definition at line 18 of file pipeline_key.h.

18 {
19 kUnlit = 0,
20 kLastType = kUnlit,
21 };

## Function Documentation

## ◆ EncodeCommand()

static void impeller::scene::EncodeCommand | ( | const SceneContext & | scene_context,
|  | const Matrix & | view_transform,
|  | RenderPass & | render_pass,
|  | const SceneCommand & | scene_command
| ) |  |
| static

Definition at line 23 of file scene_encoder.cc.

26 {
27 auto& host_buffer = render_pass.GetTransientsBuffer();
28
29 Command cmd;
30 DEBUG_COMMAND_INFO(cmd, scene_command.label);
31 cmd.stencil_reference =
32 0; // TODO(bdero): Configurable stencil ref per-command.
33
34 cmd.pipeline = scene_context.GetPipeline(
35 PipelineKey{scene_command.geometry->GetGeometryType(),
36 scene_command.material->GetMaterialType()},
37 scene_command.material->GetContextOptions(render_pass));
38
39 scene_command.geometry->BindToCommand(
40 scene_context, host_buffer, view_transform * scene_command.transform,
41 cmd);
42 scene_command.material->BindToCommand(scene_context, host_buffer, cmd);
43
44 render_pass.AddCommand(std::move(cmd));
45 }

References impeller::RenderPass::AddCommand(), impeller::scene::Geometry::BindToCommand(), impeller::scene::Material::BindToCommand(), DEBUG_COMMAND_INFO, impeller::scene::SceneCommand::geometry, impeller::scene::Material::GetContextOptions(), impeller::scene::Geometry::GetGeometryType(), impeller::scene::Material::GetMaterialType(), impeller::scene::SceneContext::GetPipeline(), impeller::RenderPass::GetTransientsBuffer(), impeller::scene::SceneCommand::label, impeller::scene::SceneCommand::material, impeller::Command::pipeline, impeller::Command::stencil_reference, and impeller::scene::SceneCommand::transform.

## ◆ UnpackTextureFromFlatbuffer()

static std::shared_ptr<Texture> impeller::scene::UnpackTextureFromFlatbuffer | ( | const fb::Texture * | iptexture,
|  | Allocator & | allocator
| ) |  |
| static

Definition at line 62 of file node.cc.

64 {
65 if (iptexture == nullptr || iptexture->embedded_image() == nullptr ||
66 iptexture->embedded_image()->bytes() == nullptr) {
67 return nullptr;
68 }
69
70 auto embedded = iptexture->embedded_image();
71
72 uint8_t bytes_per_component = 0;
73 switch (embedded->component_type()) {
74 case fb::ComponentType::k8Bit:
75 bytes_per_component = 1;
76 break;
77 case fb::ComponentType::k16Bit:
78 // bytes_per_component = 2;
79 FML_LOG(WARNING) << "16 bit textures not yet supported.";
80 return nullptr;
81 }
82
83 DecompressedImage::Format format;
84 switch (embedded->component_count()) {
85 case 1:
86 format = DecompressedImage::Format::kGrey;
87 break;
88 case 3:
89 format = DecompressedImage::Format::kRGB;
90 break;
91 case 4:
92 format = DecompressedImage::Format::kRGBA;
93 break;
94 default:
95 FML_LOG(WARNING) << "Textures with " << embedded->component_count()
96 << " components are not supported." << std::endl;
97 return nullptr;
98 }
99 if (embedded->bytes()->size() != bytes_per_component *
100 embedded->component_count() *
101 embedded->width() * embedded->height()) {
102 FML_LOG(WARNING) << "Embedded texture has an unexpected size. Skipping."
103 << std::endl;
104 return nullptr;
105 }
106
107 auto image_mapping = std::make_shared<fml::NonOwnedMapping>(
108 embedded->bytes()->Data(), embedded->bytes()->size());
109 auto decompressed_image =
110 DecompressedImage(ISize(embedded->width(), embedded->height()), format,
111 image_mapping)
112 .ConvertToRGBA();
113
114 auto texture_descriptor = TextureDescriptor{};
115 texture_descriptor.storage_mode = StorageMode::kHostVisible;
116 texture_descriptor.format = PixelFormat::kR8G8B8A8UNormInt;
117 texture_descriptor.size = decompressed_image.GetSize();
118 // TODO(bdero): Generate mipmaps for embedded textures.
119 texture_descriptor.mip_count = 1u;
120
121 auto texture = allocator.CreateTexture(texture_descriptor);
122 if (!texture) {
123 FML_LOG(ERROR) << "Could not allocate texture.";
124 return nullptr;
125 }
126
127 auto uploaded = texture->SetContents(decompressed_image.GetAllocation());
128 if (!uploaded) {
129 FML_LOG(ERROR) << "Could not upload texture to device memory.";
130 return nullptr;
131 }
132
133 return texture;
134 }

References impeller::DecompressedImage::ConvertToRGBA(), impeller::Allocator::CreateTexture(), impeller::DecompressedImage::kGrey, impeller::kHostVisible, impeller::kR8G8B8A8UNormInt, impeller::DecompressedImage::kRGB, impeller::DecompressedImage::kRGBA, and impeller::TextureDescriptor::storage_mode.

Referenced by impeller::scene::Node::MakeFromFlatbuffer().

## Variable Documentation

## ◆ kNextNodeID

std::atomic_uint64_t impeller::scene::kNextNodeID = 0
| static

Definition at line 28 of file node.cc.

DEBUG_COMMAND_INFO
#define DEBUG_COMMAND_INFO(obj, arg)
Definition: command.h:28
impeller::scene::GeometryType::kUnskinned
@ kUnskinned
impeller::scene::GeometryType::kLastType
@ kLastType
impeller::scene::MaterialType::kUnlit
@ kUnlit
impeller::ISize
TSize< int64_t > ISize
Definition: size.h:138
impeller::scene::GeometryType::kSkinned
@ kSkinned