动态状态

只有非常有限的管线状态可以在不重建管线的情况下进行动态修改。这包括视口大小,线宽和混合常量。我们可以通过填写VkPipelineDynamicStateCreateInfo结构体指定需要动态修改的状态,比如像这样:

VkDynamicState dynamicStates[] = {
    VK_DYNAMIC_STATE_VIEWPORT,
    VK_DYNAMIC_STATE_LINE_WIDTH
};

VkPipelineDynamicStateCreateInfo dynamicState = {};
dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
dynamicState.dynamicStateCount = 2;
dynamicState.pDynamicStates = dynamicStates;

这样设置后会导致我们之前对这里使用的动态状态的设置被忽略掉,需要我们在进行绘制时重新指定它们的值。有关这一问题的细节,我们会在之后的章节进行更加详细地说明。如果我们不需要管线创建后进行任何状态的动态修改,可以将设置这一结构体指针的成员变量设置为nullptr。