diff options
author | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2019-02-20 00:03:27 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2019-03-01 10:45:24 +0300 |
commit | 8203055211962d6d383dd2738f08456be9266229 (patch) | |
tree | 29e47130b441ecdd06c41295b3096594d7d865df /drape | |
parent | c68749eccf8492671a5f9432fcb2c9af95c04111 (diff) |
[vulkan] Fixed surface changing
Diffstat (limited to 'drape')
-rw-r--r-- | drape/render_state.cpp | 6 | ||||
-rw-r--r-- | drape/vulkan/vulkan_base_context.cpp | 16 | ||||
-rw-r--r-- | drape/vulkan/vulkan_base_context.hpp | 5 | ||||
-rw-r--r-- | drape/vulkan/vulkan_mesh_object_impl.cpp | 2 |
4 files changed, 15 insertions, 14 deletions
diff --git a/drape/render_state.cpp b/drape/render_state.cpp index a945368bae..3e5174090d 100644 --- a/drape/render_state.cpp +++ b/drape/render_state.cpp @@ -238,6 +238,12 @@ void TextureState::ApplyTextures(ref_ptr<GraphicsContext> context, RenderState c CHECK(it != bindings.end(), ("Texture bindings inconsistency.")); ref_ptr<dp::vulkan::VulkanTexture> t = texture.second->GetHardwareTexture(); + if (t == nullptr) + { + texture.second->UpdateState(context); + t = texture.second->GetHardwareTexture(); + CHECK(t != nullptr, ()); + } t->Bind(context); t->SetFilter(state.GetTextureFilter()); diff --git a/drape/vulkan/vulkan_base_context.cpp b/drape/vulkan/vulkan_base_context.cpp index 0947797245..f1612bf094 100644 --- a/drape/vulkan/vulkan_base_context.cpp +++ b/drape/vulkan/vulkan_base_context.cpp @@ -105,7 +105,7 @@ void VulkanBaseContext::Init(ApiVersion apiVersion) } void VulkanBaseContext::SetSurface(VkSurfaceKHR surface, VkSurfaceFormatKHR surfaceFormat, - VkSurfaceCapabilitiesKHR surfaceCapabilities, int width, int height) + VkSurfaceCapabilitiesKHR const & surfaceCapabilities) { m_surface = surface; m_surfaceFormat = surfaceFormat; @@ -115,7 +115,7 @@ void VulkanBaseContext::SetSurface(VkSurfaceKHR surface, VkSurfaceFormatKHR surf RecreateSwapchain(); } -void VulkanBaseContext::ResetSurface() +void VulkanBaseContext::ResetSurface(bool allowPipelineDump) { vkDeviceWaitIdle(m_device); @@ -130,13 +130,14 @@ void VulkanBaseContext::ResetSurface() m_surface.reset(); - if (m_pipeline) + if (m_pipeline && allowPipelineDump) m_pipeline->Dump(m_device); } void VulkanBaseContext::Resize(int w, int h) { - if (m_depthTexture != nullptr && m_surfaceCapabilities.currentExtent.width == w && + if (m_depthTexture != nullptr && + m_surfaceCapabilities.currentExtent.width == w && m_surfaceCapabilities.currentExtent.height == h) { return; @@ -305,7 +306,7 @@ void VulkanBaseContext::ApplyFramebuffer(std::string const & framebufferLabel) VkClearValue clearValues[2]; clearValues[0].color = {{m_clearColor.GetRedF(), m_clearColor.GetGreenF(), m_clearColor.GetBlueF(), m_clearColor.GetAlphaF()}}; - clearValues[1].depthStencil = {1.0f, m_stencilReferenceValue}; + clearValues[1].depthStencil = {1.0f, 0}; VkRenderPassBeginInfo renderPassBeginInfo = {}; renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; @@ -808,11 +809,6 @@ void VulkanBaseContext::RecreateDepthTexture() m_depthTexture = make_unique_dp<VulkanTexture>(params.m_allocator); m_depthTexture->Create(this, params, nullptr); - - //m_depthTexture = m_objectManager->CreateImage(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - // UnpackFormat(TextureFormat::Depth), VK_IMAGE_ASPECT_DEPTH_BIT, - // m_surfaceCapabilities.currentExtent.width, - // m_surfaceCapabilities.currentExtent.height); } VkRenderPass VulkanBaseContext::CreateRenderPass(uint32_t attachmentsCount, AttachmentsOperations const & attachmentsOp, diff --git a/drape/vulkan/vulkan_base_context.hpp b/drape/vulkan/vulkan_base_context.hpp index e6877a2d0a..a487addcde 100644 --- a/drape/vulkan/vulkan_base_context.hpp +++ b/drape/vulkan/vulkan_base_context.hpp @@ -9,7 +9,6 @@ #include "drape/vulkan/vulkan_utils.hpp" #include "geometry/point2d.hpp" -#include "vulkan_texture.hpp" #include <vulkan_wrapper.h> #include <vulkan/vulkan.h> @@ -76,8 +75,8 @@ public: void ClearParamDescriptors(); void SetSurface(VkSurfaceKHR surface, VkSurfaceFormatKHR surfaceFormat, - VkSurfaceCapabilitiesKHR surfaceCapabilities, int width, int height); - void ResetSurface(); + VkSurfaceCapabilitiesKHR const & surfaceCapabilities); + void ResetSurface(bool allowPipelineDump); VkPhysicalDevice const GetPhysicalDevice() const { return m_gpu; } VkDevice GetDevice() const { return m_device; } diff --git a/drape/vulkan/vulkan_mesh_object_impl.cpp b/drape/vulkan/vulkan_mesh_object_impl.cpp index 09f161ac38..f02baf9b10 100644 --- a/drape/vulkan/vulkan_mesh_object_impl.cpp +++ b/drape/vulkan/vulkan_mesh_object_impl.cpp @@ -86,7 +86,7 @@ public: { if (state.GetColorTexture() != m_lastColorTexture) { - m_lastColorTexture == state.GetColorTexture(); + m_lastColorTexture = state.GetColorTexture(); ResetDescriptorSetGroup(); } } |