载入中...
搜索中...
未找到
PipelineBuilder.h
浏览该文件的文档.
1#pragma once
2
5
6#include <cstdint>
7#include <vector>
8
9namespace eve::graphics::webgpu {
10
20public:
22 PipelineBuilder() = default;
23
25 PipelineBuilder &label(const char *l) {
26 label_ = l;
27 return *this;
28 }
30 PipelineBuilder &layout(wgpu::PipelineLayout l) {
31 layout_ = l;
32 return *this;
33 }
35 PipelineBuilder &vertexLayout(uint64_t stride, wgpu::VertexStepMode stepMode,
36 const wgpu::VertexAttribute *attrs, size_t attrCount);
38 PipelineBuilder &shader(wgpu::ShaderModule vert, const char *vertEntry,
39 wgpu::ShaderModule frag, const char *fragEntry);
41 PipelineBuilder &topology(wgpu::PrimitiveTopology t) {
42 topology_ = t;
43 return *this;
44 }
46 PipelineBuilder &cull(wgpu::CullMode c) {
47 cullMode_ = c;
48 return *this;
49 }
51 PipelineBuilder &frontFace(wgpu::FrontFace f) {
52 frontFace_ = f;
53 return *this;
54 }
56 PipelineBuilder &colorTarget(WGPUTextureFormat format, eve::graphics::BlendMode mode);
58 PipelineBuilder &depth(WGPUTextureFormat format, wgpu::CompareFunction compare,
59 bool writeEnabled);
62 sampleCount_ = count;
63 return *this;
64 }
65
67 wgpu::RenderPipeline build(const wgpu::Device &device) const;
68
69private:
70 const char *label_ = "eve_pipeline";
71 wgpu::PipelineLayout layout_;
72 std::vector<wgpu::VertexBufferLayout> vertexBuffers_;
73 wgpu::ShaderModule vertModule_;
74 wgpu::ShaderModule fragModule_;
75 const char *vertEntry_ = "vs_main";
76 const char *fragEntry_ = "fs_main";
77 wgpu::PrimitiveTopology topology_ = wgpu::PrimitiveTopology::TriangleList;
78 wgpu::CullMode cullMode_ = wgpu::CullMode::None;
79 wgpu::FrontFace frontFace_ = wgpu::FrontFace::CCW;
80 bool hasColorTarget_ = false;
81 wgpu::TextureFormat colorFormat_ = wgpu::TextureFormat::Undefined;
82 eve::graphics::BlendMode blendMode_ = eve::graphics::BlendMode::Alpha;
83 bool hasDepth_ = false;
84 wgpu::TextureFormat depthFormat_ = wgpu::TextureFormat::Undefined;
85 wgpu::CompareFunction depthCompare_ = wgpu::CompareFunction::Less;
86 bool depthWrite_ = true;
87 uint32_t sampleCount_ = 1;
88};
89
90} // namespace eve::graphics::webgpu
vkb::Device & device
vk::ShaderModule vert
vk::ShaderModule frag
std::int32_t c
float f
float t
Shader * shader
std::uint32_t count
std::uint32_t depth
Fluent builder for wgpu::RenderPipeline.
PipelineBuilder & layout(wgpu::PipelineLayout l)
Layout.
PipelineBuilder()=default
Constructs a PipelineBuilder.
PipelineBuilder & colorTarget(WGPUTextureFormat format, eve::graphics::BlendMode mode)
Set color target format + blend mode (Alpha default = no blend state override risk).
PipelineBuilder & sampleCount(uint32_t count)
Sample count.
PipelineBuilder & vertexLayout(uint64_t stride, wgpu::VertexStepMode stepMode, const wgpu::VertexAttribute *attrs, size_t attrCount)
Vertex layout.
wgpu::RenderPipeline build(const wgpu::Device &device) const
Create the pipeline. Throws on null device.
PipelineBuilder & frontFace(wgpu::FrontFace f)
Front face.
PipelineBuilder & label(const char *l)
Label.
PipelineBuilder & cull(wgpu::CullMode c)
Cull.
PipelineBuilder & topology(wgpu::PrimitiveTopology t)
Topology.
BlendMode
Render-neutral 2D blend mode shared by graphics-facing modules.
Definition RenderTypes.h:11