Load image data in a different thread

This commit is contained in:
Yousef Khadadeh 2025-10-10 18:41:08 +03:00
parent d633e549bc
commit 1175424c23
6 changed files with 93 additions and 40 deletions

View file

@ -2,6 +2,8 @@
#include "ResourceDisplay.hpp"
#include <include/core/SkImage.h>
#include <vector>
#include <thread>
#include <include/codec/SkCodec.h>
class ImageResourceDisplay : public ResourceDisplay {
public:
@ -12,13 +14,27 @@ class ImageResourceDisplay : public ResourceDisplay {
virtual Vector2f get_dimensions() const override;
virtual float get_dimension_scale() const override;
virtual Type get_type() const override;
virtual ~ImageResourceDisplay() override;
private:
struct FrameData {
sk_sp<SkImage> data;
float duration;
};
std::vector<FrameData> frames;
SkImageInfo imageInfo;
void load_thread();
int totalFramesToLoad;
std::atomic<int> loadedFrames = 0;
sk_sp<SkData> imageRawData;
std::unique_ptr<SkCodec> codec;
std::atomic<bool> shutdownLoadThread = false;
std::unique_ptr<std::thread> loadThread;
float currentTime = 0.0f;
size_t frameIndex = 0;
int frameIndex = 0;
bool mustUpdateDraw = false;
bool loadedFirstFrame = false;
};