Vulkan Hogs Университетская область клиента (передний буфер) даже после инструкции выключить. Я пишу двигатель видеоигр, в котором есть меню для переключения между графическими бэкэндами, три из которых реализованы туда, где они инициализируют и нарисуют тестовую сцену: < /p>
- Vulkan (простой треуголь Cube)
Вульганские слои валидации отладки Vulkan не жалуются на проблемы, объекты выпускаются успешно и в правильном порядке. Я прошел через отладчик, чтобы обеспечить название деструктора моего вулканского инкапсутора, инициализации D3D11 и D3D11 выполняет команды Draw. DXGISWAPCHAIN :: Presest () не является вопросами сообщений. Изменение размера окна (повышение квалификации) приводит к тому, что замороженное изображение Vulkan все еще отображалось, но теперь расширяется с черными границами за пределами предыдущего просмотра (пока в пределах расширенной области клиента). Повторная инициализация Vulkan из D3D выполняет без проблем, как будто Vulkan захватывает область клиента окон и продолжается как обычно. Это ошибка драйвера или ошибка, которую я совершил?HMODULE dll_;
VkInstance instance_;
VkSurfaceKHR surface_;
VkPhysicalDevice GPU_;
VkDevice device_;
VkSwapchainKHR swapChain_;
VkImage *swapChainImages_;
VkImageView *swapChainViews_;
VkFramebuffer *swapChainFrameBuffers_;
VkExtent2D swapChainExtent_;
VkFormat swapChainFormat_;
u32 swapChainImageCount_, frameIndex_, imageIndex_;
VkRenderPass renderPass_;
VkPipelineLayout pipelineLayout_;
VkPipeline pipeline_;
VkCommandPool commandPool_;
VkCommandBuffer commandBuffers_ [MAX_CONCURRENT_FRAMES]; // FENCE SYNCED
VkCommandBuffer drawCommandBuffers_ [MAX_CONCURRENT_FRAMES]; // FENCE SYNCED
VkFence frameFence_ [MAX_CONCURRENT_FRAMES]; // SYNC CMD BUFS
VkSemaphore imageReadySemaphores_[MAX_CONCURRENT_FRAMES];
VkSemaphore *drawDoneSemaphores_; // N = scImageCount
vk::q::FamilyIndices queueFamilyIndices_;
vk::q::Queues queues_;
< /code>
Vulkan Destructor: < /p>
VK::~VK()
{
if (dll_)
{
// Queues do not need to be released
// Logical device CAN be destroyed
if (device_)
{
freeSyncObjects(); // Waits for device idling
freeCommandPools();
if (pipeline_)
{
vkDestroyPipeline(device_, pipeline_, nullptr);
pipeline_ = nullptr;
}
if (pipelineLayout_)
{
vkDestroyPipelineLayout(device_, pipelineLayout_, nullptr);
pipelineLayout_ = nullptr;
}
if (renderPass_)
{
vkDestroyRenderPass(device_, renderPass_, nullptr);
renderPass_ = nullptr;
}
freeSwapchain();
vkDestroyDevice(device_, nullptr);
device_ = nullptr;
}
// Physical device cannot be destroyed
if (surface_)
{
vkDestroySurfaceKHR(instance_, surface_, nullptr);
surface_ = nullptr;
}
if (instance_)
{
vkDestroyInstance(instance_, nullptr);
instance_ = nullptr;
}
FreeLibrary(dll_);
dll_ = nullptr;
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ase-window