Crafter.Graphics/implementations/Crafter.Graphics-WebGPUComputeShader.cpp

41 lines
1.2 KiB
C++
Raw Normal View History

2026-05-18 05:39:17 +02:00
/*
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<const UICustomBinding> bindings) {
customBindings.assign(bindings.begin(), bindings.end());
pipelineHandle = WebGPU::wgpuLoadCustomShader(
wgsl.data(),
static_cast<std::int32_t>(wgsl.size()),
customBindings.data(),
static_cast<std::int32_t>(customBindings.size())
);
}
void WebGPUComputeShader::Load(const std::filesystem::path& wgslPath,
std::span<const UICustomBinding> bindings) {
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<std::size_t>(size), '\0');
f.read(src.data(), size);
Load(std::string_view{src}, bindings);
}