texture cache refactor to later allow async loading
Some checks failed
ContinuousDelivery / linux-ubuntu (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Has been cancelled
ContinuousDelivery / windows (push) Has been cancelled
ContinuousDelivery / windows-asan (push) Has been cancelled
ContinuousIntegration / linux (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Has been cancelled
ContinuousIntegration / macos (push) Has been cancelled
ContinuousIntegration / windows (push) Has been cancelled
ContinuousDelivery / release (push) Has been cancelled
Some checks failed
ContinuousDelivery / linux-ubuntu (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Has been cancelled
ContinuousDelivery / windows (push) Has been cancelled
ContinuousDelivery / windows-asan (push) Has been cancelled
ContinuousIntegration / linux (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Has been cancelled
ContinuousIntegration / macos (push) Has been cancelled
ContinuousIntegration / windows (push) Has been cancelled
ContinuousDelivery / release (push) Has been cancelled
This commit is contained in:
@@ -30,29 +30,29 @@ MessageImageLoader::MessageImageLoader(void) {
|
||||
_image_loaders.push_back(std::make_unique<ImageLoaderSDLImage>());
|
||||
}
|
||||
|
||||
std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Message3Handle m) {
|
||||
TextureLoaderResult MessageImageLoader::load(TextureUploaderI& tu, Message3Handle m) {
|
||||
if (!static_cast<bool>(m)) {
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (m.all_of<Message::Components::TagNotImage>()) {
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (!m.all_of<Message::Components::MessageFileObject>()) {
|
||||
// not a file message
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
const auto& o = m.get<Message::Components::MessageFileObject>().o;
|
||||
|
||||
if (!static_cast<bool>(o)) {
|
||||
std::cerr << "MIL error: invalid object in file message\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (!o.all_of<ObjComp::Ephemeral::Backend, ObjComp::F::SingleInfo>()) {
|
||||
std::cerr << "MIL error: object missing backend (?)\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
// TODO: handle collections
|
||||
@@ -60,40 +60,40 @@ std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Messa
|
||||
|
||||
if (file_size > 50*1024*1024) {
|
||||
std::cerr << "MIL error: image file too large\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (file_size == 0) {
|
||||
std::cerr << "MIL warning: empty file\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (!o.all_of<ObjComp::F::TagLocalHaveAll>()) {
|
||||
// not ready yet
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
auto* file_backend = o.get<ObjComp::Ephemeral::Backend>().ptr;
|
||||
if (file_backend == nullptr) {
|
||||
std::cerr << "MIL error: object backend nullptr\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
auto file2 = file_backend->file2(o, StorageBackendI::FILE2_READ);
|
||||
if (!file2 || !file2->isGood() || !file2->can_read) {
|
||||
std::cerr << "MIL error: creating file2 from object via backendI\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
auto read_data = file2->read(file_size, 0);
|
||||
if (read_data.ptr == nullptr) {
|
||||
std::cerr << "MMIL error: reading from file2 returned nullptr\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
if (read_data.size != file_size) {
|
||||
std::cerr << "MIL error: reading from file2 size missmatch, should be " << file_size << ", is " << read_data.size << "\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
// try all loaders after another
|
||||
@@ -107,7 +107,7 @@ std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Messa
|
||||
new_entry.timestamp_last_rendered = Message::getTimeMS();
|
||||
new_entry.current_texture = 0;
|
||||
for (const auto& [ms, data] : res.frames) {
|
||||
const auto n_t = tu.uploadRGBA(data.data(), res.width, res.height);
|
||||
const auto n_t = tu.upload(data.data(), res.width, res.height);
|
||||
new_entry.textures.push_back(n_t);
|
||||
new_entry.frame_duration.push_back(ms);
|
||||
}
|
||||
@@ -117,10 +117,10 @@ std::optional<TextureEntry> MessageImageLoader::load(TextureUploaderI& tu, Messa
|
||||
|
||||
std::cout << "MIL: loaded image file o:" << /*file_path*/ entt::to_integral(o.entity()) << "\n";
|
||||
|
||||
return new_entry;
|
||||
return {new_entry};
|
||||
}
|
||||
|
||||
std::cerr << "MIL error: failed to load message (unhandled format)\n";
|
||||
return std::nullopt;
|
||||
return {std::nullopt};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user