75 lines
4 KiB
C++
75 lines
4 KiB
C++
/*
|
|
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);
|
|
}
|
|
#endif // CRAFTER_GRAPHICS_WINDOW_DOM
|