Renderer: Add mipmaps generation support
This commit is contained in:
@@ -2,13 +2,53 @@
|
||||
// This file is part of the "Nazara Engine - Vulkan renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Core/Error.hpp>
|
||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline VkImageSubresourceLayers VulkanTexture::BuildSubresourceLayers(UInt32 level) const
|
||||
{
|
||||
return BuildSubresourceLayers(level, 0, m_textureViewInfo.layerCount);
|
||||
}
|
||||
|
||||
inline VkImageSubresourceLayers VulkanTexture::BuildSubresourceLayers(UInt32 level, UInt32 baseLayer, UInt32 layerCount) const
|
||||
{
|
||||
NazaraAssert(m_subresourceRange.baseMipLevel + level < m_textureInfo.levelCount, "mipmap level out of bounds");
|
||||
NazaraAssert(m_subresourceRange.baseArrayLayer + baseLayer + layerCount <= m_textureInfo.layerCount, "mipmap level out of bounds");
|
||||
|
||||
VkImageSubresourceLayers subresourceLayers;
|
||||
subresourceLayers.aspectMask = m_subresourceRange.aspectMask;
|
||||
subresourceLayers.mipLevel = m_subresourceRange.baseMipLevel + level;
|
||||
subresourceLayers.baseArrayLayer = baseLayer;
|
||||
subresourceLayers.layerCount = layerCount;
|
||||
|
||||
return subresourceLayers;
|
||||
}
|
||||
|
||||
inline VkImageSubresourceRange VulkanTexture::BuildSubresourceRange(UInt32 baseLevel, UInt32 levelCount) const
|
||||
{
|
||||
return BuildSubresourceRange(baseLevel, levelCount, 0, m_textureInfo.layerCount);
|
||||
}
|
||||
|
||||
inline VkImageSubresourceRange VulkanTexture::BuildSubresourceRange(UInt32 baseLevel, UInt32 levelCount, UInt32 baseLayer, UInt32 layerCount) const
|
||||
{
|
||||
VkImageSubresourceLayers subresourceLayers = BuildSubresourceLayers(baseLevel, baseLayer, layerCount);
|
||||
|
||||
NazaraAssert(subresourceLayers.mipLevel + levelCount <= m_textureInfo.levelCount, "mipmap level out of bounds");
|
||||
|
||||
return {
|
||||
subresourceLayers.aspectMask,
|
||||
subresourceLayers.mipLevel,
|
||||
levelCount,
|
||||
subresourceLayers.baseArrayLayer,
|
||||
subresourceLayers.layerCount
|
||||
};
|
||||
}
|
||||
|
||||
inline PixelFormat VulkanTexture::GetFormat() const
|
||||
{
|
||||
return m_textureInfo.pixelFormat;
|
||||
return m_textureViewInfo.pixelFormat;
|
||||
}
|
||||
|
||||
inline VkImage VulkanTexture::GetImage() const
|
||||
@@ -23,7 +63,7 @@ namespace Nz
|
||||
|
||||
inline UInt8 VulkanTexture::GetLevelCount() const
|
||||
{
|
||||
return m_textureInfo.levelCount;
|
||||
return m_textureViewInfo.levelCount;
|
||||
}
|
||||
|
||||
inline VulkanTexture* VulkanTexture::GetParentTexture() const
|
||||
@@ -33,22 +73,22 @@ namespace Nz
|
||||
|
||||
inline Vector3ui VulkanTexture::GetSize(UInt8 level) const
|
||||
{
|
||||
return Vector3ui(GetLevelSize(m_textureInfo.width, level), GetLevelSize(m_textureInfo.height, level), GetLevelSize(m_textureInfo.depth, level));
|
||||
return Vector3ui(GetLevelSize(m_textureViewInfo.width, level), GetLevelSize(m_textureViewInfo.height, level), GetLevelSize(m_textureViewInfo.depth, level));
|
||||
}
|
||||
|
||||
inline const VkImageSubresourceRange& VulkanTexture::GetSubresourceRange() const
|
||||
{
|
||||
return m_imageRange;
|
||||
return m_subresourceRange;
|
||||
}
|
||||
|
||||
inline const TextureInfo& VulkanTexture::GetTextureInfo() const
|
||||
{
|
||||
return m_textureInfo;
|
||||
return m_textureViewInfo;
|
||||
}
|
||||
|
||||
inline ImageType VulkanTexture::GetType() const
|
||||
{
|
||||
return m_textureInfo.type;
|
||||
return m_textureViewInfo.type;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user