#pragma once #include #include namespace Rendering::Sdl3Gpu { // Loads a compiled shader binary or source from disk and creates an SDL_GPUShader. // For SPIR-V: pass the .spv path with format = SDL_GPU_SHADERFORMAT_SPIRV. // For MSL: pass the .msl text path with format = SDL_GPU_SHADERFORMAT_MSL. inline auto loadShaderFromFile(SDL_GPUDevice* device, const std::filesystem::path& path, SDL_GPUShaderFormat format, const char* entrypoint, SDL_GPUShaderStage stage, Uint32 num_samplers, Uint32 num_uniform_buffers) -> SDL_GPUShader* { std::size_t size = 0; void* data = SDL_LoadFile(path.string().c_str(), &size); if (data == nullptr) { return nullptr; } SDL_GPUShaderCreateInfo info{}; info.code_size = size; info.code = static_cast(data); info.entrypoint = entrypoint; info.format = format; info.stage = stage; info.num_samplers = num_samplers; info.num_storage_textures = 0; info.num_storage_buffers = 0; info.num_uniform_buffers = num_uniform_buffers; SDL_GPUShader* shader = SDL_CreateGPUShader(device, &info); SDL_free(data); return shader; } } // namespace Rendering::Sdl3Gpu