Home

Awesome

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:

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