gpt4 book ai didi

resize - 调整 xcb 窗口大小时 VkSurfaceKHR 不会更新

转载 作者:行者123 更新时间:2023-12-03 20:16:30 28 4
gpt4 key购买 nike

我遵循了 https://vulkan-tutorial.com 上的教程...我在没有使用 GLFW etension 的情况下创建了它。到目前为止,我正在使用“交换链娱乐”,并且所有设置和渲染都正确。

但是,我似乎无法正确调整大小!

我已经迷上了 XCB_RESIZE_REQUEST并像这样设置我的信息结构 w/h:

if (resize->width > 0) { info.width = resize->width; }
if (resize->height > 0) { info.height = resize->height; }
info.framebufferResized = true;

导致(在接下来的 drawFrame() 调用中) recreateSwapchain()被称为:
if (res == VK_ERROR_OUT_OF_DATE_KHR || res == VK_SUBOPTIMAL_KHR || info.framebufferResized) {
info.framebufferResized = false;
recreateSwapchain();
} else if (res != VK_SUCCESS) {
throw runtime_error("failed to present swap chain image!");
}

recreateSwapchain() {
vkDeviceWaitIdle(info.device);

cleanupSwapchain();

querySwapchainSupport(info.physicalDevice);
createSwapchain();
createImageViews();
createRenderPass();
createGraphicsPipeline();
createFramebuffers();
createCommandBuffers();
}

我做了一些调试,发现 swapchainSupport.capabilities.minImageExtent.width (和高度)不要从初始值改变!..也就是说,这个调用
querySwapchainSupport(VkPhysicalDevice physicalDevice) {
VkResult res = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
physicalDevice, info.surface, &info.swapchainSupport.capabilities);
assert(res == VK_SUCCESS);

不更新 info.swapchainSupport.capabilities使用新的窗口大小。

任何帮助或评论将不胜感激。

示例截图:

after resize

最佳答案

我不确定 XCB_RESIZE_REQUEST是等待的正确事件。在我的例子中,我使用 XCB_CONFIGURE_NOTIFY检查窗口调整大小事件,并在该事件之后查询表面能力为我提供新的窗口大小,因为表面能力按预期扩展:

case XCB_CONFIGURE_NOTIFY:
{
const xcb_configure_notify_event_t *cfgEvent = (const xcb_configure_notify_event_t *)event;
if (((cfgEvent->width != width) || (cfgEvent->height != height)))
{
destWidth = cfgEvent->width;
destHeight = cfgEvent->height;
if ((destWidth > 0) && (destHeight > 0))
{
// Swap chain recreation ins done in this function
windowResize();
}
}
}

您还需要在 XCB 窗口创建时添加随附标志:
uint32_t value_list[32];
value_list[1] = ... | XCB_EVENT_MASK_STRUCTURE_NOTIFY...

xcb_create_window(connection,
...
value_list);

这已经过测试,可以在许多不同的 Linux 实现和平台上工作。

如果您需要一些帮助来启动和运行 XCB,您可能需要查看我的 Vulkan samples .有趣的部分在 example base classswapchain header .

关于resize - 调整 xcb 窗口大小时 VkSurfaceKHR 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027567/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com