diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 53139b4..8d2d764 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -36,10 +36,6 @@ DrawingProgram::DrawingProgram(World& initWorld): { drawTool = DrawingProgramToolBase::allocate_tool_type(*this, DrawingProgramToolType::BRUSH); - components.updateCallback = [&]() { - if(&world == world.main.world.get()) - world.main.drawProgCache.refresh = true; - }; components.clientInsertCallback = [&](const CollabListType::ObjectInfoPtr& c) { if(addToCompCacheOnInsert) compCache.add_component(c); @@ -579,26 +575,15 @@ void DrawingProgram::draw(SkCanvas* canvas, const DrawData& drawData) { } } else { - if(world.main.drawProgCache.disableDrawCache) { - parallel_loop_all_components([&](auto& c) { - c->obj->calculate_draw_transform(drawData); - }); - for(auto& c : components.client_list()) { - c->obj->draw(canvas, drawData); - c->obj->drawSetupData.shouldDraw = false; - } - } - else { - SkCanvas* drawProgCacheCanvas = world.main.drawProgCache.surface->getCanvas(); - drawProgCacheCanvas->clear(SkColor4f{0.0f, 0.0f, 0.0f, 0.0f}); + canvas->saveLayer(nullptr, nullptr); + canvas->clear(SkColor4f{0.0f, 0.0f, 0.0f, 0.0f}); compCache.refresh_all_draw_cache(drawData); - compCache.draw_components_to_canvas(drawProgCacheCanvas, drawData); - drawProgCacheCanvas->saveLayerAlphaf(nullptr, 1.0f); - selection.draw_components(drawProgCacheCanvas, drawData); - drawProgCacheCanvas->restore(); - canvas->drawImage(world.main.drawProgCache.surface->makeTemporaryImage(), 0, 0); - selection.draw_gui(canvas, drawData); - } + compCache.draw_components_to_canvas(canvas, drawData); + canvas->saveLayer(nullptr, nullptr); + selection.draw_components(canvas, drawData); + canvas->restore(); + canvas->restore(); + selection.draw_gui(canvas, drawData); } drawTool->draw(canvas, drawData); diff --git a/src/DrawingProgram/DrawingProgramCache.cpp b/src/DrawingProgram/DrawingProgramCache.cpp index 51ed9d7..82f0740 100644 --- a/src/DrawingProgram/DrawingProgramCache.cpp +++ b/src/DrawingProgram/DrawingProgramCache.cpp @@ -334,7 +334,6 @@ void DrawingProgramCache::refresh_draw_cache(const std::shared_ptrbounds.dim(); - //std::cout << "\niMin: " << iBounds.min.x() << " " << iBounds.min.y() << "\niMax: " << iBounds.max.x() << " " << iBounds.max.y() << "\nbMin: " << bvhNode->bounds.min.x() << " " << bvhNode->bounds.min.y() << "\nbMax: " << bvhNode->bounds.max.x() << " " << bvhNode->bounds.max.y() << "\nbDim: " << bDim.x() << " " << bDim.y(); Vector2f clipBoundMin{static_cast((iBounds.min.x() - bvhNode->bounds.min.x()) / bDim.x()) * bvhNode->resolution.x(), static_cast((iBounds.min.y() - bvhNode->bounds.min.y()) / bDim.y()) * bvhNode->resolution.y()}; @@ -352,7 +351,6 @@ void DrawingProgramCache::refresh_draw_cache(const std::shared_ptrcoords.from_space(clipRectBoundAABB.max) }; - //std::cout << "\ncMin: " << clipBoundMin.x() << " " << clipBoundMin.y() << "\ncMax: " << clipBoundMax.x() << " " << clipBoundMax.y() << std::endl; cacheCanvas->save(); cacheCanvas->clipIRect(clipRect); cacheCanvas->clear(SkColor4f{0, 0, 0, 0}); diff --git a/src/MainProgram.cpp b/src/MainProgram.cpp index 9ee8007..54dedac 100755 --- a/src/MainProgram.cpp +++ b/src/MainProgram.cpp @@ -63,28 +63,6 @@ MainProgram::MainProgram(): }); } -void MainProgram::init_draw_program_cache() { - if(window.size.x() < 0 || window.size.y() < 0) - return; - SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(window.size.x(), window.size.y()); - #ifdef USE_SKIA_BACKEND_GRAPHITE - drawProgCache.surface = SkSurfaces::RenderTarget(window.recorder(), imgInfo, skgpu::Mipmapped::kNo, window.defaultMSAASurfaceProps); - #elif USE_SKIA_BACKEND_GANESH - drawProgCache.surface = SkSurfaces::RenderTarget(window.ctx.get(), skgpu::Budgeted::kNo, imgInfo, window.defaultMSAASampleCount, &window.defaultMSAASurfaceProps); - #endif - if(!drawProgCache.surface) - throw std::runtime_error("[MainProgram::init_draw_program_cache] Could not make surface"); - drawProgCache.canvas = drawProgCache.surface->getCanvas(); - - if(!drawProgCache.canvas) - throw std::runtime_error("[MainProgram::init_draw_program_cache] Could not create canvas"); - - drawProgCache.canvas->clear(SkColor4f{0, 0, 0, 0}); - - drawProgCache.refresh = true; -} - - void MainProgram::update() { while(std::chrono::duration_cast>(std::chrono::steady_clock::now() - lastFrameTime).count() < 1.0 / fpsLimit); lastFrameTime = std::chrono::steady_clock::now(); @@ -117,8 +95,6 @@ void MainProgram::update() { std::shared_ptr oldWorld = world; world = worlds[worldIndex]; - if(oldWorld != world) - drawProgCache.refresh = true; deltaTime.update_time_since(); deltaTime.update_time_point(); diff --git a/src/MainProgram.hpp b/src/MainProgram.hpp index d1df540..c35651e 100644 --- a/src/MainProgram.hpp +++ b/src/MainProgram.hpp @@ -30,14 +30,6 @@ class MainProgram { Vector3f userColor; - struct DrawingProgramImageCache { - bool refresh = true; - sk_sp surface; - std::shared_ptr firstCompUpdate = nullptr; - SkCanvas* canvas; - bool disableDrawCache = false; - } drawProgCache; - struct Window { Vector2i size = {-1, -1}; Vector2i pos = {-1, -1}; @@ -86,8 +78,6 @@ class MainProgram { void update(); void draw(SkCanvas* canvas); - void init_draw_program_cache(); - bool setToQuit = false; void early_destroy(); diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index 3e0a742..b622d13 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -221,7 +221,6 @@ nlohmann::json Toolbar::get_config_json() { toRet["themeInUse"] = themeData.themeCurrentlyLoaded; toRet["velocityAffectsBrushWidth"] = velocityAffectsBrushWidth; toRet["jumpTransitionEasing"] = jumpTransitionEasing; - toRet["disableDrawCache"] = main.drawProgCache.disableDrawCache; toRet["defaultCanvasBackgroundColor"] = main.defaultCanvasBackgroundColor; json tablet; @@ -273,7 +272,6 @@ void Toolbar::set_config_json(const nlohmann::json& j) { j.at("themeInUse").get_to(themeData.themeCurrentlyLoaded); j.at("velocityAffectsBrushWidth").get_to(velocityAffectsBrushWidth); j.at("jumpTransitionEasing").get_to(jumpTransitionEasing); - j.at("disableDrawCache").get_to(main.drawProgCache.disableDrawCache); j.at("defaultCanvasBackgroundColor").get_to(main.defaultCanvasBackgroundColor); j.at("tablet").at("pressureAffectsBrushWidth").get_to(tabletOptions.pressureAffectsBrushWidth); @@ -1321,7 +1319,6 @@ void Toolbar::options_menu() { gui.text_label("Note: Requires restart to take effect. May cause bugs on Intel Graphics"); gui.input_scalar_field("fps cap slider", "FPS cap", &main.fpsLimit, 3.0f, 10000.0f); #endif - gui.checkbox_field("Disable Draw Cache", "Disable BVH Draw Cache", &main.drawProgCache.disableDrawCache); gui.pop_id(); break; } diff --git a/src/World.cpp b/src/World.cpp index 7ca4afe..b0f4634 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -31,10 +31,6 @@ World::World(MainProgram& initMain, OpenWorldInfo& worldInfo): netSource = worldInfo.netSource; - drawData.cam.changed = [&]() { - main.drawProgCache.refresh = true; - }; - if(worldInfo.conType == CONNECTIONTYPE_CLIENT || worldInfo.conType == CONNECTIONTYPE_SERVER) NetLibrary::init(); diff --git a/src/main.cpp b/src/main.cpp index c2d27f4..afdcf55 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -286,8 +286,6 @@ void resize_window(MainStruct& mS) { throw std::runtime_error("[resize_window] No canvas made"); #endif - - mS.m->init_draw_program_cache(); } #ifdef __EMSCRIPTEN__