custom shader webgpu
This commit is contained in:
parent
dedf6b0467
commit
64116cd980
12 changed files with 445 additions and 36 deletions
41
implementations/Crafter.Graphics-WebGPUComputeShader.cpp
Normal file
41
implementations/Crafter.Graphics-WebGPUComputeShader.cpp
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue