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

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

Сообщение Anonymous »


Редактировать: Ответ (но на вопрос закрыт) < /h2>
tl; DR в соответствии с спецификацией Vulkan, это неопределенное поведение для прохождения оконного ручки Win32 между графическими API после создания Swapchain. AWATE. I am writing a video game engine which has a menu to switch between graphics backends, two of which are implemented to where they initialise and draw a test triangle scene:
  • Vulkan (red background)
  • D3D11 (blue background)
When Vulkan isn't first to be Инициализированная переход между 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://registry.khronos.org/vulkan/spe ... rface.html
indeferse iteef/inefine. Win32 окно между графическими API после создания Swapchain.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ase-window
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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