我阅读了颜色混合Vulkan 教程。
这个页面说:
第一个结构体 VkPipelineColorBlendAttachmentState 包含每个附加帧缓冲区的配置,第二个结构体 VkPipelineColorBlendStateCreateInfo 包含全局颜色混合设置。在我们的例子中,我们只有一个帧缓冲区
第二个结构引用所有帧缓冲区的结构数组
然而,在帧缓冲区一章中,创建了与 imageView 数量一样多的帧缓冲区。
但与之相关的代码是相同的。
并且每帧缓冲区结构没有与帧缓冲区相关的成员。
如何将颜色混合附件附加到帧缓冲区?
我的猜测是,在记录命令时(即渲染通道开始时),它会通过 VkFramebufferCreateInfo::pAttachments 自动附加,对吗?
或者通过 VkSubpassDescription::pColorAttachments ?
因为规范说:
AttachmentCount 的值必须大于使用此管道的子通道的 VkSubpassDescription::pColorAttachments 或 VkSubpassDescription2::pColorAttachments 中非 VK_ATTACHMENT_UNUSED 的所有颜色附件的索引。
我使用 glfw 回调函数用鼠标移动相机。
鼠标回调函数为:
void mouse_callback(GLFWwindow *window, double xposIn, double yposIn)
{
if (is_pressed)
{
camera.ProcessMouseMovement((static_cast<float>(yposIn) - prev_mouse.y) / 3.6f, (static_cast<float>(xposIn) - prev_mouse.x) / 3.6f);
prev_mouse.x = xposIn;
prev_mouse.y = yposIn;
}
cur_mouse.x = xposIn;
cur_mouse.y = yposIn;
}
void mouse_btn_callback(GLFWwindow *window, int button, int action, int mods)
{
if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
{
prev_mouse.x = cur_mouse.x;
prev_mouse.y = cur_mouse.y;
is_pressed = true;
}
else
{
is_pressed = false;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,即使在其他imgui窗口中操作,相机也会移动,如下所示。

我不知道如何处理这个问题。
我应该使用类似的东西将此逻辑放在 IMGUI 的开始和结束之间吗 …