71 VkPipelineInputAssemblyStateCreateInfo inputAssemblyState =
74 VkPipelineRasterizationStateCreateInfo rasterizationState =
77 VkPipelineColorBlendAttachmentState blendAttachmentState =
80 VkPipelineColorBlendStateCreateInfo colorBlendState =
83 VkPipelineDepthStencilStateCreateInfo depthStencilState =
86 VkPipelineViewportStateCreateInfo viewportState =
89 VkPipelineMultisampleStateCreateInfo multisampleState =
92 std::vector<VkDynamicState> dynamicStateEnables = {
93 VK_DYNAMIC_STATE_VIEWPORT,
94 VK_DYNAMIC_STATE_SCISSOR
96 VkPipelineDynamicStateCreateInfo dynamicState =
100 std::array<VkPipelineShaderStageCreateInfo, 2> shaderStages;
110 std::vector<VkVertexInputBindingDescription> inputBindings = {
117 std::vector<VkVertexInputAttributeDescription> inputAttributes = {
129 inputState.vertexBindingDescriptionCount =
static_cast<uint32_t
>(inputBindings.size());
130 inputState.pVertexBindingDescriptions = inputBindings.data();
131 inputState.vertexAttributeDescriptionCount =
static_cast<uint32_t
>(inputAttributes.size());
132 inputState.pVertexAttributeDescriptions = inputAttributes.data();
134 pipelineCreateInfo.pVertexInputState = &inputState;
135 pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState;
136 pipelineCreateInfo.pRasterizationState = &rasterizationState;
137 pipelineCreateInfo.pColorBlendState = &colorBlendState;
138 pipelineCreateInfo.pMultisampleState = &multisampleState;
139 pipelineCreateInfo.pViewportState = &viewportState;
140 pipelineCreateInfo.pDepthStencilState = &depthStencilState;
141 pipelineCreateInfo.pDynamicState = &dynamicState;
142 pipelineCreateInfo.stageCount =
static_cast<uint32_t
>(shaderStages.size());
143 pipelineCreateInfo.pStages = shaderStages.data();
144 pipelineCreateInfo.renderPass = renderPass;
165 inputState.pVertexBindingDescriptions = inputBindings.data();
166 inputState.vertexAttributeDescriptionCount =
static_cast<uint32_t
>(inputAttributes.size());
167 inputState.pVertexAttributeDescriptions = inputAttributes.data();
168 pipelineCreateInfo.pVertexInputState = &inputState;
169 pipelineCreateInfo.pStages = shaderStages.data();
191 inputState.pVertexBindingDescriptions = inputBindings.data();
192 inputState.vertexAttributeDescriptionCount =
static_cast<uint32_t
>(inputAttributes.size());
193 inputState.pVertexAttributeDescriptions = inputAttributes.data();
194 pipelineCreateInfo.pVertexInputState = &inputState;
195 pipelineCreateInfo.pStages = shaderStages.data();
247 VkDeviceSize offsets[1] = { 0 };
253 vkCmdBindPipeline(drawCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
pipeline);
255 vkCmdBindIndexBuffer(drawCmdBuffer,
mCubeIndex.bufferHandle(), 0, VK_INDEX_TYPE_UINT32);
256 vkCmdBindVertexBuffers(drawCmdBuffer, 0, 1, &dataBuffer, offsets);
257 vkCmdBindVertexBuffers(drawCmdBuffer, 1, 1, &instanceBuffer, offsets);
258 vkCmdDrawIndexed(drawCmdBuffer,
mCubeIndex.size(), cubeCount, 0, 0, 0);
263 if (sphereCount > 0) {
267 vkCmdBindPipeline(drawCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
spherePipeline);
269 vkCmdBindIndexBuffer(drawCmdBuffer,
mSphereIndex.bufferHandle(), 0, VK_INDEX_TYPE_UINT32);
270 vkCmdBindVertexBuffers(drawCmdBuffer, 0, 1, &dataBuffer, offsets);
271 vkCmdBindVertexBuffers(drawCmdBuffer, 1, 1, &instanceBuffer, offsets);
272 vkCmdDrawIndexed(drawCmdBuffer,
mSphereIndex.size(), sphereCount, 0, 0, 0);
277 if (capsuleCount > 0) {
281 vkCmdBindPipeline(drawCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
capsulePipeline);
283 vkCmdBindIndexBuffer(drawCmdBuffer,
mCapsuleIndex.bufferHandle(), 0, VK_INDEX_TYPE_UINT32);
284 vkCmdBindVertexBuffers(drawCmdBuffer, 0, 1, &dataBuffer, offsets);
285 vkCmdBindVertexBuffers(drawCmdBuffer, 1, 1, &instanceBuffer, offsets);
286 vkCmdDrawIndexed(drawCmdBuffer,
mCapsuleIndex.size(), capsuleCount, 0, 0, 0);