如https://vulkan-tutorial.com/code/23_texture_image.cpp所示:createGraphicsPipeline()更改窗口大小时调用重新创建Pipeline,尺寸在下面的代码中设置。
VkViewport viewport = {};
viewport.x = 0.0f;
viewport.y = 0.0f;
viewport.width = (float) swapChainExtent.width;
viewport.height = (float) swapChainExtent.height;
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;
VkRect2D scissor = {};
scissor.offset = {0, 0};
scissor.extent = swapChainExtent;
VkPipelineViewportStateCreateInfo viewportState = {};
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
viewportState.viewportCount = 1;
viewportState.pViewports = &viewport;
viewportState.scissorCount = 1;
viewportState.pScissors = &scissor;
Run Code Online (Sandbox Code Playgroud)
如果场景包含大量材质,更改窗口大小将重新创建所有材质,这非常耗时。我可以直接修改它们VkRect2D而不VkViewport重新创建管道吗?
Jes*_*all 16
您必须在所有管道中使剪刀和视口处于动态状态,它们将取决于窗口大小。去做这个:
填写VkGraphicsPipelineCreateInfo::pDynamicState和。VK_DYNAMIC_STATE_VIEWPORTVK_DYNAMIC_STATE_SCISSORVkPipelineDynamicStateCreateInfo::pDynamicStates
绑定动态视口和剪刀状态的管道后,调用vkCmdSetViewport和vkCmdSetScissor设置当前视口和剪刀。您不必在每次绑定每个管道后再次调用这些函数,仅针对命令缓冲区中的第一个动态管道以及动态状态管道之后(如果前一个管道未使用动态状态)调用这些函数。
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |