我手上已经有了 Jai d3d12 example,可以渲染一个三角形。
接下来对照了 龙书:Introduction to 3D Game Programming with DirectX 12 的 Chatper 4 - Direct3D Initialization,理解现有的 Jai 代码。
DirectX Graphics Infrastructure, DirectX 图形基础设施
d3d12_factory: *IDXGIFactory4; // DXGI 的关键接口之一
d3d12_adapter: *IDXGIAdapter1; // 硬件设备,例如独立显卡
init_backend :: () -> bool {...}
deinit_backend :: () {...}
首先创建一个设备
d3d12_device : *ID3D12Device;
d3d12_queue : *ID3D12CommandQueue;
d3d12_info_queue: *ID3D12InfoQueue;
d3d12_queue_wi_fence: *ID3D12Fence;
d3d12_queue_wi_event: *void;
init_device :: () -> bool {...}
deinit_debvice :: () {...}
VSYNC :: false;
MAX_SWAPCHAIN_BUFFER_COUNT :: 3;
d3d12_swapchain : *IDXGISwapChain3;
d3d12_rtvs : [MAX_SWAPCHAIN_BUFFER_COUNT] *ID3D12Resource;
d3d12_rtv_heap : *ID3D12DescriptorHeap;
d3d12_rtv_heap_inc_size: u32;
d3d12_present_fence: *ID3D12Fence;
d3d12_present_event: *void;
ctx_buffer_count : u32; // use this to get actual count.
ctx_active_buffer_index: u32;
ctx_present_counter : u64;
init_render_context :: () -> bool {...}
deinit_render_context :: () {...}
render_context_present :: () {...}
d3d12_root_signature: *ID3D12RootSignature;
d3d12_pipeline_state: *ID3D12PipelineState;
init_pipeline :: () -> bool {...}
deinit_pipieline :: () {...}
d3d12_command_allocator: *ID3D12CommandAllocator;
d3d12_command_lists : [FRAME_COUNT] *ID3D12GraphicsCommandList;
d3d12_submit_fence : *ID3D12Fence;
d3d12_submit_event : *void;
active_frame_index: u32;
submit_counter : u64;
init_command_encoder :: () -> bool {...}
deinit_command_encoder :: () {...}