63 {
64 if (iptexture == nullptr || iptexture->embedded_image() == nullptr ||
65 iptexture->embedded_image()->bytes() == nullptr) {
66 return nullptr;
67 }
68
69 auto embedded = iptexture->embedded_image();
70
71 uint8_t bytes_per_component = 0;
72 switch (embedded->component_type()) {
73 case fb::ComponentType::k8Bit:
74 bytes_per_component = 1;
75 break;
76 case fb::ComponentType::k16Bit:
77
78 FML_LOG(WARNING) <<
"16 bit textures not yet supported.";
79 return nullptr;
80 }
81
82 switch (embedded->component_count()) {
83 case 4:
84
85 break;
86 case 1:
87 case 3:
88 default:
89 FML_LOG(WARNING) <<
"Textures with " << embedded->component_count()
90 << " components are not supported." << std::endl;
91 return nullptr;
92 }
93 if (embedded->bytes()->size() != bytes_per_component *
94 embedded->component_count() *
95 embedded->width() * embedded->height()) {
96 FML_LOG(WARNING) <<
"Embedded texture has an unexpected size. Skipping."
97 << std::endl;
98 return nullptr;
99 }
100
101 auto image_mapping = std::make_shared<fml::NonOwnedMapping>(
102 embedded->bytes()->Data(), embedded->bytes()->size());
103
104 auto texture_descriptor = TextureDescriptor{};
105 texture_descriptor.storage_mode = StorageMode::kHostVisible;
106 texture_descriptor.format = PixelFormat::kR8G8B8A8UNormInt;
107 texture_descriptor.size =
ISize(embedded->width(), embedded->height());
108
109 texture_descriptor.mip_count = 1u;
110
114 return nullptr;
115 }
116
117 auto uploaded =
texture->SetContents(image_mapping);
118 if (!uploaded) {
119 FML_LOG(
ERROR) <<
"Could not upload texture to device memory.";
120 return nullptr;
121 }
122
124}
std::shared_ptr< Texture > CreateTexture(const TextureDescriptor &desc)
#define FML_LOG(severity)