(WIN32) Переключение с Vulkan на D3D11 Renderer не выпускает окноC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 (WIN32) Переключение с Vulkan на D3D11 Renderer не выпускает окно

Сообщение Anonymous »

https://github.com/cara-ames/vktod3dbug/
Vulkan Hogs Университетская область клиента (передний буфер) даже после инструкции выключить. Я пишу двигатель видеоигр, в котором есть меню для переключения между графическими бэкэндами, три из которых реализованы туда, где они инициализируют и нарисуют тестовую сцену: < /p>
  • Vulkan (простой треуголь Cube)
Когда Vulkan не , сначала инициализированное , переход между D3D9 и D3D11 является плавным и переключается с D3D на Вулкан также обычно представляет. Но переход от Vulkan на D3D делает не , как и ожидалось. Вулкан выходит, но не выпускает окно. D3D11 и D3D9 успешно инициализируются после выходов в Вулкан, но ни один из них не может привлечь к окну, которое они поделились, даже если Вулкан вышел (включая его DLL, закрытый с помощью Freelibrary () ).
Вульганские слои валидации отладки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»