/* Crafter®.Graphics Copyright (C) 2026 Catcrafts® catcrafts.net */ module Crafter.Graphics:WebGPUComputeShader_impl; import :WebGPUComputeShader; import :WebGPU; import std; using namespace Crafter; void WebGPUComputeShader::Load(std::string_view wgsl, std::span bindings, bool rayQuery) { customBindings.assign(bindings.begin(), bindings.end()); rayQueryCapable = rayQuery; pipelineHandle = WebGPU::wgpuLoadCustomShader( wgsl.data(), static_cast(wgsl.size()), customBindings.data(), static_cast(customBindings.size()), rayQuery ? 1 : 0 ); } void WebGPUComputeShader::Load(const std::filesystem::path& wgslPath, std::span bindings, bool rayQuery) { std::ifstream f(wgslPath, std::ios::binary | std::ios::ate); if (!f.is_open()) { std::println("WebGPUComputeShader::Load: cannot open {}", wgslPath.string()); return; } auto size = f.tellg(); if (size <= 0) { std::println("WebGPUComputeShader::Load: empty file {}", wgslPath.string()); return; } f.seekg(0, std::ios::beg); std::string src(static_cast(size), '\0'); f.read(src.data(), size); Load(std::string_view{src}, bindings, rayQuery); }