#ifndef RENDER_D3D12_H #define RENDER_D3D12_H #define COBJMACROS 1 #include #include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //~ #define R_NUM_FRAMES_IN_FLIGHT 3 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //~ typedef struct R_D3D12_Command R_D3D12_Command; struct R_D3D12_Command { Arena *arena; ID3D12CommandQueue *queue; ID3D12CommandAllocator *allocator; ID3D12GraphicsCommandList *list1; }; typedef struct R_D3D12_RenderTarget R_D3D12_RenderTarget; struct R_D3D12_RenderTarget { Arena *arena; ID3D12DescriptorHeap *heap; D3D12_CPU_DESCRIPTOR_HANDLE handle; U32 descriptor_size; ID3D12Resource *targets[R_NUM_FRAMES_IN_FLIGHT]; }; typedef struct R_D3D12_State R_D3D12_State; struct R_D3D12_State { Arena *arena; HWND window_handle; ID3D12Device *device; ID3D12Debug *debug; IDXGISwapChain3 *swapchain; ID3D12Fence *fence; U64 fence_value; U64 frame_fence_values[R_NUM_FRAMES_IN_FLIGHT]; HANDLE fence_event; }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //~ internal LRESULT r_d3d12_create_swapchain(IDXGIFactory4 *factory); internal void r_d3d12_wait_for_previous_frame(); #endif /* RENDER_D3D12_H */