/* Crafter®.Graphics Copyright (C) 2026 Catcrafts® catcrafts.net */ // JS bridge declarations for the DOM-mode WebGPU backend. Each function // corresponds to one entry in `additional/dom-webgpu.js`. Handles are // opaque uint32 cookies into the JS-side handle tables. export module Crafter.Graphics:WebGPU; #ifdef CRAFTER_GRAPHICS_WINDOW_DOM import std; export namespace Crafter { using WebGPUBufferRef = std::uint32_t; using WebGPUTextureRef = std::uint32_t; using WebGPUSamplerRef = std::uint32_t; using WebGPUCommandEncoderRef = std::uint32_t; // unused as a real handle; just a marker type for portability } namespace Crafter::WebGPU { __attribute__((import_module("env"), import_name("wgpuGetCanvasWidth"))) extern "C" std::int32_t wgpuGetCanvasWidth(); __attribute__((import_module("env"), import_name("wgpuGetCanvasHeight"))) extern "C" std::int32_t wgpuGetCanvasHeight(); __attribute__((import_module("env"), import_name("wgpuSurfaceWidth"))) extern "C" std::int32_t wgpuSurfaceWidth(); __attribute__((import_module("env"), import_name("wgpuSurfaceHeight"))) extern "C" std::int32_t wgpuSurfaceHeight(); __attribute__((import_module("env"), import_name("wgpuInit"))) extern "C" void wgpuInit(); __attribute__((import_module("env"), import_name("wgpuCreateBuffer"))) extern "C" std::uint32_t wgpuCreateBuffer(std::int32_t byteSize); __attribute__((import_module("env"), import_name("wgpuWriteBuffer"))) extern "C" void wgpuWriteBuffer(std::uint32_t handle, const void* srcPtr, std::int32_t byteSize); __attribute__((import_module("env"), import_name("wgpuDestroyBuffer"))) extern "C" void wgpuDestroyBuffer(std::uint32_t handle); __attribute__((import_module("env"), import_name("wgpuCreateAtlasTexture"))) extern "C" std::uint32_t wgpuCreateAtlasTexture(std::int32_t w, std::int32_t h); __attribute__((import_module("env"), import_name("wgpuWriteAtlasRegion"))) extern "C" void wgpuWriteAtlasRegion(std::uint32_t handle, const void* srcPtr, std::int32_t srcW, std::int32_t srcH, std::int32_t srcBytesPerRow, std::int32_t dstX, std::int32_t dstY, std::int32_t copyW, std::int32_t copyH); __attribute__((import_module("env"), import_name("wgpuDestroyTexture"))) extern "C" void wgpuDestroyTexture(std::uint32_t handle); __attribute__((import_module("env"), import_name("wgpuCreateLinearClampSampler"))) extern "C" std::uint32_t wgpuCreateLinearClampSampler(); __attribute__((import_module("env"), import_name("wgpuFrameBegin"))) extern "C" void wgpuFrameBegin(); __attribute__((import_module("env"), import_name("wgpuFrameEnd"))) extern "C" void wgpuFrameEnd(); __attribute__((import_module("env"), import_name("wgpuDispatchQuads"))) extern "C" void wgpuDispatchQuads(std::uint32_t itemsHandle, const void* headerPtr, std::int32_t gx, std::int32_t gy); __attribute__((import_module("env"), import_name("wgpuDispatchCircles"))) extern "C" void wgpuDispatchCircles(std::uint32_t itemsHandle, const void* headerPtr, std::int32_t gx, std::int32_t gy); __attribute__((import_module("env"), import_name("wgpuDispatchImages"))) extern "C" void wgpuDispatchImages(std::uint32_t itemsHandle, const void* headerPtr, std::int32_t gx, std::int32_t gy, std::uint32_t texHandle, std::uint32_t sampHandle); __attribute__((import_module("env"), import_name("wgpuDispatchText"))) extern "C" void wgpuDispatchText(std::uint32_t itemsHandle, const void* headerPtr, std::int32_t gx, std::int32_t gy, std::uint32_t atlasHandle, std::uint32_t sampHandle); // ─── custom user-authored compute shaders ─────────────────────────── __attribute__((import_module("env"), import_name("wgpuLoadCustomShader"))) extern "C" std::uint32_t wgpuLoadCustomShader(const void* wgslPtr, std::int32_t wgslLen, const void* bindingsPtr, std::int32_t bindingsCount); __attribute__((import_module("env"), import_name("wgpuDispatchCustom"))) extern "C" void wgpuDispatchCustom(std::uint32_t pipelineHandle, const void* pushPtr, std::int32_t pushBytes, const void* handlesPtr, std::int32_t handlesCount, std::int32_t gx, std::int32_t gy, std::int32_t gz); } #endif // CRAFTER_GRAPHICS_WINDOW_DOM