Diligent Engine  v.2.4.g
TextureViewVkImpl.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
32 
33 #include "EngineVkImplTraits.hpp"
34 #include "TextureViewBase.hpp"
36 
37 namespace Diligent
38 {
39 
41 class TextureViewVkImpl final : public TextureViewBase<EngineVkImplTraits>
42 {
43 public:
45 
47  RenderDeviceVkImpl* pDevice,
48  const TextureViewDesc& ViewDesc,
49  ITexture* pTexture,
51  bool bIsDefaultView);
53 
55 
56 
57  virtual VkImageView DILIGENT_CALL_TYPE GetVulkanImageView() const override final { return m_ImageView; }
58 
59  bool HasMipLevelViews() const
60  {
61  return m_MipLevelViews != nullptr;
62  }
63 
65  {
66  VERIFY_EXPR(m_MipLevelViews != nullptr && MipLevel < m_Desc.NumMipLevels);
67  return m_MipLevelViews[MipLevel * 2].get();
68  }
69 
71  {
72  VERIFY_EXPR(m_MipLevelViews != nullptr && MipLevel < m_Desc.NumMipLevels);
73  return m_MipLevelViews[MipLevel * 2 + 1].get();
74  }
75 
76  using MipLevelViewAutoPtrType = std::unique_ptr<TextureViewVkImpl, STDDeleter<TextureViewVkImpl, FixedBlockMemoryAllocator>>;
77 
79  {
80  m_MipLevelViews = MipLevelViews;
81  }
82 
83 protected:
86 
89 };
90 
91 } // namespace Diligent
Diligent::IReferenceCounters
Base interface for a reference counter object that stores the number of strong and weak references an...
Definition: ReferenceCounters.h:44
Diligent::TextureViewVkImpl::TextureViewVkImpl
TextureViewVkImpl(IReferenceCounters *pRefCounters, RenderDeviceVkImpl *pDevice, const TextureViewDesc &ViewDesc, ITexture *pTexture, VulkanUtilities::ImageViewWrapper &&ImgView, bool bIsDefaultView)
Definition: TextureViewVkImpl.cpp:36
Diligent::RenderDeviceVkImpl
Render device implementation in Vulkan backend.
Definition: RenderDeviceVkImpl.hpp:58
VulkanUtilities::ImageViewWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(ImageView) ImageViewWrapper
Definition: VulkanLogicalDevice.hpp:72
Diligent::TextureViewDesc::NumMipLevels
Uint32 NumMipLevels
Total number of mip levels for the view of the texture. Render target and depth stencil views can add...
Definition: TextureView.h:104
Diligent::DeviceObjectBase< EngineVkImplTraits ::TextureViewInterface, EngineVkImplTraits ::RenderDeviceImplType, TextureViewDesc >::m_Desc
TextureViewDesc m_Desc
Object description.
Definition: DeviceObjectBase.hpp:182
Diligent::TextureViewVkImpl
Texture view implementation in Vulkan backend.
Definition: TextureViewVkImpl.hpp:41
Diligent::TextureViewVkImpl::m_MipLevelViews
MipLevelViewAutoPtrType * m_MipLevelViews
Individual mip level views used for mipmap generation.
Definition: TextureViewVkImpl.hpp:88
Diligent::TextureViewVkImpl::~TextureViewVkImpl
~TextureViewVkImpl()
Definition: TextureViewVkImpl.cpp:56
TextureViewBase.hpp
Diligent::TextureViewVkImpl::AssignMipLevelViews
void AssignMipLevelViews(MipLevelViewAutoPtrType *MipLevelViews)
Definition: TextureViewVkImpl.hpp:78
Diligent::TextureViewVkImpl::MipLevelViewAutoPtrType
std::unique_ptr< TextureViewVkImpl, STDDeleter< TextureViewVkImpl, FixedBlockMemoryAllocator > > MipLevelViewAutoPtrType
Definition: TextureViewVkImpl.hpp:76
IMPLEMENT_QUERY_INTERFACE_IN_PLACE
#define IMPLEMENT_QUERY_INTERFACE_IN_PLACE(InterfaceID, ParentClassName)
Definition: ObjectBase.hpp:59
Diligent::TextureViewBase
Template class implementing base functionality of the texture view interface.
Definition: TextureViewBase.hpp:45
DILIGENT_CALL_TYPE
#define DILIGENT_CALL_TYPE
Definition: CommonDefinitions.h:45
Diligent::Uint32
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:51
Diligent::TextureViewVkImpl::GetMipLevelUAV
TextureViewVkImpl * GetMipLevelUAV(Uint32 MipLevel)
Definition: TextureViewVkImpl.hpp:70
Diligent::TextureViewVkImpl::GetVulkanImageView
virtual VkImageView GetVulkanImageView() const override final
Implementation of ITextureViewVk::GetVulkanImageView().
Definition: TextureViewVkImpl.hpp:57
Diligent::TextureViewVkImpl::GetMipLevelSRV
TextureViewVkImpl * GetMipLevelSRV(Uint32 MipLevel)
Definition: TextureViewVkImpl.hpp:64
Diligent::TextureViewVkImpl::HasMipLevelViews
bool HasMipLevelViews() const
Definition: TextureViewVkImpl.hpp:59
VERIFY_EXPR
#define VERIFY_EXPR(...)
Definition: DebugUtilities.hpp:79
VulkanObjectWrappers.hpp
EngineVkImplTraits.hpp
Diligent::TextureViewVkImpl::m_ImageView
VulkanUtilities::ImageViewWrapper m_ImageView
Vulkan image view descriptor handle.
Definition: TextureViewVkImpl.hpp:85
Diligent::TextureViewDesc
Texture view description.
Definition: TextureView.h:80
Diligent::ITexture
Texture inteface.
Definition: Texture.h:273
Diligent
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37