#pragma once #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef NOMINMAX #define NOMINMAX #endif #include #include #include #include #include #ifdef small #undef small #endif #include #include namespace dingosdk::server_gui { using Microsoft::WRL::ComPtr; constexpr UINT frame_count = 2; class Renderer { public: bool init(HWND window); void render(); void resize(UINT width, UINT height); void shutdown(); private: struct Frame { ComPtr allocator; UINT64 fence_value{}; }; struct Target { ComPtr resource; D3D12_CPU_DESCRIPTOR_HANDLE handle{}; }; ComPtr device_; ComPtr rtv_heap_, srv_heap_; ComPtr queue_; ComPtr list_; ComPtr fence_; ComPtr swap_; std::array frames_; std::array targets_; HANDLE fence_event_{}; HANDLE waitable_{}; UINT64 fence_value_{}; UINT64 frame_index_{}; void wait(UINT64 value); }; } // namespace dingosdk::server_gui