32 [[nodiscard]] virtual const
ISurface& surface() const noexcept = 0;
50 [[nodiscard]] virtual const
ISwapChain& swapChain() const noexcept = 0;
56 [[nodiscard]] virtual
ISwapChain& swapChain() noexcept = 0;
62 [[nodiscard]] virtual const
ICommandQueue& graphicsQueue() const noexcept = 0;
69 [[nodiscard]] virtual const
ICommandQueue& transferQueue() const noexcept = 0;
76 [[nodiscard]] virtual const
ICommandQueue& bufferQueue() const noexcept = 0;
83 [[nodiscard]] virtual const
ICommandQueue& computeQueue() const noexcept = 0;
90 [[nodiscard]] virtual MultiSamplingLevel maximumMultiSamplingLevel(Format format) const noexcept = 0;
96 [[nodiscard]] virtual
double ticksPerMillisecond() const noexcept = 0;
104 virtual
void wait() const = 0;
119 template <typename FactoryType, typename SurfaceType, typename GraphicsAdapterType, typename SwapChainType, typename CommandQueueType, typename RenderPassType>
123 using surface_type = SurfaceType;
124 using adapter_type = GraphicsAdapterType;
125 using swap_chain_type = SwapChainType;
126 using command_queue_type = CommandQueueType;
127 using command_buffer_type =
typename command_queue_type::command_buffer_type;
128 using factory_type = FactoryType;
129 using descriptor_layout_type =
typename factory_type::descriptor_layout_type;
130 using vertex_buffer_type =
typename factory_type::vertex_buffer_type;
131 using index_buffer_type =
typename factory_type::index_buffer_type;
132 using buffer_type =
typename factory_type::buffer_type;
133 using image_type =
typename factory_type::image_type;
134 using sampler_type =
typename factory_type::sampler_type;
135 using render_pass_type = RenderPassType;
136 using frame_buffer_type =
typename render_pass_type::frame_buffer_type;
137 using render_pipeline_type =
typename render_pass_type::render_pipeline_type;
138 using pipeline_layout_type =
typename render_pipeline_type::pipeline_layout_type;
139 using shader_program_type =
typename render_pipeline_type::shader_program_type;
140 using input_assembler_type =
typename render_pipeline_type::input_assembler_type;
141 using rasterizer_type =
typename render_pipeline_type::rasterizer_type;
148 [[nodiscard]] const surface_type& surface() const noexcept override = 0;
151 [[nodiscard]] const adapter_type& graphicsAdapter() const noexcept override = 0;
154 [[nodiscard]] const swap_chain_type& swapChain() const noexcept override = 0;
157 [[nodiscard]] swap_chain_type& swapChain() noexcept override = 0;
160 [[nodiscard]] const factory_type& factory() const noexcept override = 0;
163 [[nodiscard]] const command_queue_type& graphicsQueue() const noexcept override = 0;
166 [[nodiscard]] const command_queue_type& transferQueue() const noexcept override = 0;
169 [[nodiscard]] const command_queue_type& bufferQueue() const noexcept override = 0;
172 [[nodiscard]] const command_queue_type& computeQueue() const noexcept override = 0;