30 bool initialize(SDL_GPUDevice *device, ShaderFormat shaderFormat,
31 SDL_GPUTextureFormat swapchainFormat);
38 void bind(SDL_GPURenderPass *renderPass, SDL_GPUPrimitiveType primitiveType)
const {
40 FLINT_ENGINE_ERROR(
"PrimitivePipeline: Cannot bind to null render pass");
44 SDL_GPUGraphicsPipeline *pipeline =
nullptr;
45 switch (primitiveType) {
46 case SDL_GPU_PRIMITIVETYPE_LINELIST:
47 pipeline = linePipeline;
49 case SDL_GPU_PRIMITIVETYPE_LINESTRIP:
50 pipeline = lineStripPipeline;
52 case SDL_GPU_PRIMITIVETYPE_POINTLIST:
53 pipeline = pointPipeline;
56 FLINT_ENGINE_WARN(
"PrimitivePipeline: Unsupported primitive type");
61 SDL_BindGPUGraphicsPipeline(renderPass, pipeline);
65 bool isInitialized()
const {
66 return linePipeline !=
nullptr && lineStripPipeline !=
nullptr && pointPipeline !=
nullptr;
73 SDL_ReleaseGPUGraphicsPipeline(m_device, linePipeline);
74 linePipeline =
nullptr;
76 if (lineStripPipeline) {
77 SDL_ReleaseGPUGraphicsPipeline(m_device, lineStripPipeline);
78 lineStripPipeline =
nullptr;
81 SDL_ReleaseGPUGraphicsPipeline(m_device, pointPipeline);
82 pointPipeline =
nullptr;
88 SDL_GPUDevice *m_device =
nullptr;
89 SDL_GPUGraphicsPipeline *linePipeline =
nullptr;
90 SDL_GPUGraphicsPipeline *lineStripPipeline =
nullptr;
91 SDL_GPUGraphicsPipeline *pointPipeline =
nullptr;
92 std::unique_ptr<Shader> m_shader;