45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
/*
|
|
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,
|
|
bool rayQuery) {
|
|
customBindings.assign(bindings.begin(), bindings.end());
|
|
rayQueryCapable = rayQuery;
|
|
pipelineHandle = WebGPU::wgpuLoadCustomShader(
|
|
wgsl.data(),
|
|
static_cast<std::int32_t>(wgsl.size()),
|
|
customBindings.data(),
|
|
static_cast<std::int32_t>(customBindings.size()),
|
|
rayQuery ? 1 : 0
|
|
);
|
|
}
|
|
|
|
void WebGPUComputeShader::Load(const std::filesystem::path& wgslPath,
|
|
std::span<const UICustomBinding> 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<std::size_t>(size), '\0');
|
|
f.read(src.data(), size);
|
|
Load(std::string_view{src}, bindings, rayQuery);
|
|
}
|