Skip to content

Commit fc0cc84

Browse files
committed
save/load scene fix
1 parent 60a67f5 commit fc0cc84

File tree

9 files changed

+33
-11
lines changed

9 files changed

+33
-11
lines changed

sources/DirectXFramework/DX12/Buffer.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,9 @@ namespace DX12
552552
size_t size;
553553
};
554554
std::list<update_data> update_list;
555+
556+
update_tiling_info updates;
557+
555558
public:
556559

557560
typename StructuredBuffer<Type>::ptr buffer;
@@ -577,7 +580,7 @@ namespace DX12
577580
TypedHandle<T> result = Base::Allocate(n);
578581

579582

580-
buffer->map_buffer_part(result.get_offset() * sizeof(T), n * sizeof(T));
583+
buffer->map_buffer_part(updates, result.get_offset() * sizeof(T), n * sizeof(T));
581584
return result;
582585
}
583586

@@ -587,7 +590,7 @@ namespace DX12
587590

588591
result.Free();
589592
result = Base::Allocate(n);
590-
buffer->map_buffer_part( result.get_offset() * sizeof(T), n * sizeof(T));
593+
buffer->map_buffer_part(updates, result.get_offset() * sizeof(T), n * sizeof(T));
591594
}
592595
/*
593596
T* map_elements(size_t offset, size_t size = 1)
@@ -601,7 +604,10 @@ namespace DX12
601604
void reserve(CommandList& list, size_t offset)
602605
{
603606
std::lock_guard<std::mutex> g(m);
604-
buffer->map_buffer_part( 0, offset * sizeof(T));
607+
buffer->map_buffer_part(updates, 0, offset * sizeof(T));
608+
609+
updates.resource = buffer.get();
610+
list.update_tilings(std::move(updates));
605611
}
606612

607613

@@ -634,6 +640,8 @@ namespace DX12
634640
{
635641
std::lock_guard<std::mutex> g(m);
636642

643+
updates.resource = buffer.get();
644+
list->update_tilings(std::move(updates));
637645
for (auto& elems : update_list)
638646
{
639647
buffer->set_data(list, (UINT)elems.offset * sizeof(T), elems.data.data(), (UINT)elems.size);

sources/DirectXFramework/DX12/CommandList.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ namespace DX12
6969

7070
void CommandList::begin(std::string name, Timer* t)
7171
{
72+
#ifdef DEV
73+
begin_stack = Exceptions::get_stack_trace();
74+
#endif
75+
7276
first_debug_log = true;
7377
executed = false;
7478
id = Device::get().id_generator.get();

sources/DirectXFramework/DX12/CommandList.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,9 @@ namespace DX12
620620
virtual void on_start(Timer* timer) override;
621621
virtual void on_end(Timer* timer)override;
622622
protected:
623-
623+
#ifdef DEV
624+
Exceptions::stack_trace begin_stack;
625+
#endif
624626
std::string name;
625627
void reset();
626628
void begin(std::string name, Timer* t = nullptr);
@@ -769,6 +771,8 @@ namespace DX12
769771
public: void update_tilings(update_tiling_info&& info)
770772
{
771773
tile_updates.emplace_back(std::move(info));
774+
775+
use_resource(info.resource);
772776
}
773777
ptr get_sub_list();
774778
FrameResources::ptr frame_resources;

sources/DirectXFramework/DX12/Tiling.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
namespace DX12 {
44

5-
void TiledResourceManager::map_buffer_part(size_t offset, size_t size)
5+
void TiledResourceManager::map_buffer_part(update_tiling_info& target, size_t offset, size_t size)
66
{
77
size_t begin = Math::AlignDown(offset, 64 * 1024) / (64 * 1024);
88
size_t end = Math::AlignUp(offset + size, 64 * 1024) / (64 * 1024);
9-
load_tiles(nullptr, { begin,0,0 }, { end,0,0 });
9+
10+
load_tiles_internal(target, { begin,0,0 }, { end,0,0 }, 0, false);
11+
//load_tiles(target, { begin,0,0 }, { end,0,0 });
1012
}
1113

1214
void TiledResourceManager::load_tile(update_tiling_info& target, ivec3 pos, uint subres, bool recursive)

sources/DirectXFramework/DX12/Tiling.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace DX12
3434

3535
ivec3 get_tiles_count(int mip_level = 0);
3636
ivec3 get_tile_shape();
37-
void map_buffer_part( size_t offset, size_t size);
37+
void map_buffer_part(update_tiling_info& target, size_t offset, size_t size);
3838

3939
void load_tiles(CommandList* list, ivec3 from, ivec3 to, uint subres = 0);
4040
void zero_tiles(CommandList* list, ivec3 from, ivec3 to);

sources/RenderSystem/Scene/Scene.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ class Scene : public scene_object, Events::prop_handler
4141
using ptr = s_ptr<Scene>;
4242
using wptr = w_ptr<Scene>;
4343

44-
// std::set<MaterialAsset*> materials;
44+
virtual ~Scene()
45+
{
46+
remove_all();
47+
}
4548
Scene()
4649
{
4750
scene = this;

sources/Spectrum/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,10 +1464,10 @@ resource_stages[&res.second] = input;
14641464
{
14651465
auto f = FileSystem::get().get_file("scene.dat")->load_all();
14661466

1467-
Scene::ptr scene(new Scene());
1467+
//Scene::ptr scene(new Scene());
14681468

1469-
Serializer::deserialize(f, *scene);
1470-
// drawer->scene = scene;
1469+
Serializer::deserialize(f, *drawer->scene);
1470+
//drawer->scene = scene;
14711471
}
14721472
catch (std::exception e)
14731473
{

workdir/scene.dat

292 Bytes
Binary file not shown.

workdir/shaders/voxel_mipmap.hlsl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ void calc(inout float4 color)
1717
color.rgb/= color.w + 0.5;
1818
color.w = (color.w/4);
1919

20+
//todo: investigate negative values
2021
color = max(0, color);
2122
}
2223

0 commit comments

Comments
 (0)