GitHub - pplux/wgpu.hpp: WebGPU header for C++ (original) (raw)

wgpu.hpp a WebGPU header for C++17

If you are stuck on C++17 waiting for C++20 Aggregate initialization this header will help you use C++ chaining to achieve the same.

wgpu::RenderPipeline pipeline = wgpuDeviceCreateRenderPipeline(wgpu->device, wgpu::RenderPipelineDescriptor() .label("Render Pipeline") .layout(wgpuDeviceCreatePipelineLayout(wgpu->device, wgpu::PipelineLayoutDescriptor() .label("pipeline layout") )) .vertex(wgpu::VertexState() .module(shader) .entryPoint("vs_main") ) .primitive(wgpu::PrimitiveState() .topology(WGPUPrimitiveTopology_TriangleList) .stripIndexFormat(WGPUIndexFormat_Undefined) .frontFace(WGPUFrontFace_CCW) .cullMode(WGPUCullMode_None) ) .multisample(wgpu::MultisampleState() .count(1) .mask(~0) .alphaToCoverageEnabled(false) ) .fragment(wgpu::FragmentState() .module(shader) .entryPoint("fs_main") .targets( { wgpu::ColorTargetState() .format(swapChainFormat) .writeMask(WGPUColorWriteMask_All) .blend(wgpu::BlendState() .color(wgpu::BlendComponent() .dstFactor(WGPUBlendFactor_Zero) .srcFactor(WGPUBlendFactor_One) .operation(WGPUBlendOperation_Add)) .alpha(wgpu::BlendComponent() .dstFactor(WGPUBlendFactor_Zero) .srcFactor(WGPUBlendFactor_One) .operation(WGPUBlendOperation_Add))) }) ));

Notes:

     WGPUShaderModule shader = wgpuDeviceCreateShaderModule(wgpu->device, wgpu::ShaderModuleDescriptor()  
        .label("shader")  
        .nextInChain(wgpu::ShaderModuleWGSLDescriptor()  
                .code(shaderCode)  
        ));  
      wgpuCall(device, wgpu::Object().setA(...).setB(...).setC(...));  

Generation

The current wgpu.hpp header is generated from the reference wgpu-native but you can generate your own by running generate.py as:./generate.py inputHeader.h new-webgpu.hpp