13 static std::vector<VkVertexInputBindingDescription> defaultBindingDescriptions = {{{
15 .stride =
sizeof(Vertex),
16 .inputRate = VK_VERTEX_INPUT_RATE_VERTEX,
19 static std::vector<VkVertexInputAttributeDescription> defaultAttributeDescriptions = {{
23 .format = VK_FORMAT_R32G32B32_SFLOAT,
24 .offset = offsetof(Vertex, position),
29 .format = VK_FORMAT_R32G32B32_SFLOAT,
30 .offset = offsetof(Vertex, normal),
35 .format = VK_FORMAT_R32G32_SFLOAT,
36 .offset = offsetof(Vertex, texcoord),
41 .format = VK_FORMAT_R32G32B32_SFLOAT,
42 .offset = offsetof(Vertex, tangent),
47 .format = VK_FORMAT_R32G32B32_SFLOAT,
48 .offset = offsetof(Vertex, binormal),
53 std::vector<VkVertexInputBindingDescription> bindingDescriptions;
54 std::vector<VkVertexInputAttributeDescription> attributeDescriptions;
55 VkPolygonMode polygonMode;
58 VkBool32 alphaToCoverage;
62 std::vector<VkVertexInputBindingDescription> bindingDescriptions = defaultBindingDescriptions,
63 std::vector<VkVertexInputAttributeDescription> attributeDescriptions = defaultAttributeDescriptions,
64 VkPolygonMode polygonMode = VK_POLYGON_MODE_FILL, VkBool32 depthTest = VK_TRUE, VkBool32 blend = VK_FALSE,
65 VkBool32 alphaToCoverage = VK_FALSE)
66 : bindingDescriptions(bindingDescriptions), attributeDescriptions(attributeDescriptions),
67 polygonMode(polygonMode), depthTest(depthTest), blend(blend), alphaToCoverage(alphaToCoverage)
88 MANDRILL_API
Pipeline(ptr<Device> pDevice, ptr<Pass> pPass, ptr<Layout> pLayout, ptr<Shader> pShader,
89 const PipelineDesc& desc = PipelineDesc());
101 MANDRILL_API
void bind(VkCommandBuffer cmd);
124 return mPipelineLayout;
134 mCullMode = cullMode;
144 mFrontFace = frontFace;
154 mLineWidth = lineWidth;
158 virtual void createPipeline();
159 virtual void destroyPipeline();
161 ptr<Device> mpDevice;
164 ptr<Shader> mpShader;
165 ptr<Layout> mpLayout;
167 VkPipeline mPipeline;
168 VkPipelineLayout mPipelineLayout;
171 VkPolygonMode mPolygonMode;
174 VkBool32 mAlphaToCoverage;
176 std::vector<VkVertexInputBindingDescription> mBindingDescriptions;
177 std::vector<VkVertexInputAttributeDescription> mAttributeDescriptions;
178 VkCullModeFlagBits mCullMode = VK_CULL_MODE_NONE;
179 VkFrontFace mFrontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
180 float mLineWidth = 1.0f;
Pipeline class for managing Vulkan graphics pipelines.
Definition Pipeline.h:76
MANDRILL_API void setFrontFace(VkFrontFace frontFace)
Set the front face.
Definition Pipeline.h:142
MANDRILL_API VkPipeline getPipeline() const
Get the pipeline handle.
Definition Pipeline.h:113
MANDRILL_API VkPipelineLayout getLayout() const
Get the pipeline layout handle.
Definition Pipeline.h:122
MANDRILL_API void setLineWidth(float lineWidth)
Set line width.
Definition Pipeline.h:152
MANDRILL_API ~Pipeline()
Destructor for pipeline.
Definition Pipeline.cpp:33
MANDRILL_API void bind(VkCommandBuffer cmd)
Bind a pipeline for rendering and set its dynamic states.
Definition Pipeline.cpp:39
MANDRILL_API void setCullMode(VkCullModeFlagBits cullMode)
Set the cull mode.
Definition Pipeline.h:132
MANDRILL_API void recreate()
Recreate a pipeline. Call this if shader source code has changed and should be reloaded.
Definition Pipeline.cpp:65