From f15590518588eb9c2bcf3aeacf1b3e0f4bd9005f Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Wed, 13 Aug 2025 19:23:14 +0300 Subject: [PATCH] Removed RAW support to compile for Emscripten, fixed bug in cache in online use --- src/CollabList.hpp | 19 ++++++++++--------- src/DrawingProgram/DrawingProgram.cpp | 5 +++-- .../DrawingProgramSelection.cpp | 4 ++++ .../DrawingProgramSelection.hpp | 1 + src/ResourceDisplay/ImageResourceDisplay.cpp | 6 +++--- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/CollabList.hpp b/src/CollabList.hpp index 9a6d0cc..2732092 100644 --- a/src/CollabList.hpp +++ b/src/CollabList.hpp @@ -1,5 +1,6 @@ #pragma once #include "SharedTypes.hpp" +#include template class CollabList { public: @@ -24,7 +25,7 @@ template class CollabList { std::function clientInsertCallback; std::function clientEraseCallback; std::function& c)> clientInsertOrderedVectorCallback; - std::function clientServerLastPosShiftCallback; + std::function clientServerFirstPosShiftCallback; void set_server_from_client_list() { serverSideList = clientSideList; @@ -144,11 +145,11 @@ template class CollabList { bool erasedSomething = false; std::erase_if(clientSideList, [&](const auto& obj) { if(objSet.contains(obj)) { - obj->syncIgnore = true; - obj->obj->collabListInfo.reset(); - idToObjectMap.erase(obj->id); if(clientEraseCallback) clientEraseCallback(obj); + idToObjectMap.erase(obj->id); + obj->syncIgnore = true; + obj->obj->collabListInfo.reset(); erasedSomething = true; return true; } @@ -333,19 +334,19 @@ template class CollabList { } private: void complete_client_pos_refresh(bool syncFromServer) { - uint64_t lastShiftPos = 0; + uint64_t firstShiftPos = std::numeric_limits::max(); bool shiftHappened = false; for(uint64_t i = 0; i < clientSideList.size(); i++) { auto& c = clientSideList[i]; if(c->pos != i) { - lastShiftPos = std::max(lastShiftPos, c->pos); - lastShiftPos = std::max(lastShiftPos, i); + firstShiftPos = std::min(firstShiftPos, c->pos); + firstShiftPos = std::min(firstShiftPos, i); shiftHappened = true; c->pos = i; } } - if(syncFromServer && shiftHappened && clientServerLastPosShiftCallback) - clientServerLastPosShiftCallback(lastShiftPos); + if(syncFromServer && shiftHappened && clientServerFirstPosShiftCallback) + clientServerFirstPosShiftCallback(firstShiftPos); } void client_pos_refresh_after_insert(uint64_t posToRefreshAfter) { diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 4728353..fe71a3a 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -53,8 +53,9 @@ DrawingProgram::DrawingProgram(World& initWorld): for(auto& c : comps) components.clientInsertCallback(c); }; - components.clientServerLastPosShiftCallback = [&](uint64_t lastShiftPos) { - compCache.invalidate_cache_before_pos(lastShiftPos); + components.clientServerFirstPosShiftCallback = [&](uint64_t firstShiftPos) { + compCache.clear_own_cached_surfaces(); + selection.clear_own_cached_surfaces(); }; } diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index 8239023..116d891 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -216,6 +216,10 @@ void DrawingProgramSelection::invalidate_cache_at_optional_aabb_before_pos(const cache.invalidate_cache_at_optional_aabb_before_pos(aabb, placementToInvalidateAt); } +void DrawingProgramSelection::clear_own_cached_surfaces() { + cache.clear_own_cached_surfaces(); +} + void DrawingProgramSelection::preupdate_component(const CollabListType::ObjectInfoPtr& objToCheck) { cache.preupdate_component(objToCheck); } diff --git a/src/DrawingProgram/DrawingProgramSelection.hpp b/src/DrawingProgram/DrawingProgramSelection.hpp index d5bedd5..626ee30 100644 --- a/src/DrawingProgram/DrawingProgramSelection.hpp +++ b/src/DrawingProgram/DrawingProgramSelection.hpp @@ -23,6 +23,7 @@ class DrawingProgramSelection { bool is_being_transformed(); void invalidate_cache_at_optional_aabb_before_pos(const std::optional>& aabb, uint64_t placementToInvalidateAt); + void clear_own_cached_surfaces(); void preupdate_component(const CollabListType::ObjectInfoPtr& objToCheck); private: std::function&, std::vector&)> erase_select_objects_in_bvh_func(std::unordered_set& selectedComponents, const SCollision::ColliderCollection& cC, const SCollision::ColliderCollection& cCWorld); diff --git a/src/ResourceDisplay/ImageResourceDisplay.cpp b/src/ResourceDisplay/ImageResourceDisplay.cpp index 7587b5b..98adf33 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.cpp +++ b/src/ResourceDisplay/ImageResourceDisplay.cpp @@ -4,19 +4,19 @@ #include #include #include -#include +//#include #include #include #include "../MainProgram.hpp" #include -std::array decoders = { +std::array decoders = { SkBmpDecoder::Decoder(), SkGifDecoder::Decoder(), SkIcoDecoder::Decoder(), SkJpegDecoder::Decoder(), SkPngDecoder::Decoder(), - SkRawDecoder::Decoder(), +// SkRawDecoder::Decoder(), SkWbmpDecoder::Decoder(), SkWebpDecoder::Decoder() };