anton_render/src/render/d3d12/render_d3d12.h
2025-05-22 22:06:33 +02:00

56 lines
1.4 KiB
C

#ifndef RENDER_D3D12_H
#define RENDER_D3D12_H
#define COBJMACROS 1
#include <d3d12.h>
#include <dxgi1_4.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//~
#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 */