Added UI functionality to the Graphics System #232
|
@ -413,4 +413,9 @@ namespace SHADE
|
|||
return height;
|
||||
}
|
||||
|
||||
uint32_t SHVkImage::GetMipLevels(void) const noexcept
|
||||
{
|
||||
return mipLevelCount;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -150,6 +150,7 @@ namespace SHADE
|
|||
vk::Format GetImageFormat (void) const noexcept;
|
||||
uint32_t GetWidth (void) const noexcept;
|
||||
uint32_t GetHeight (void) const noexcept;
|
||||
uint32_t GetMipLevels (void) const noexcept;
|
||||
|
||||
};
|
||||
}
|
||||
|
|
|
@ -831,9 +831,17 @@ namespace SHADE
|
|||
return texLibrary.GetTextureHandle(textureId);
|
||||
}
|
||||
|
||||
Handle<SHFont> SHGraphicsSystem::AddFont(SHFontAsset const& fontAsset) const noexcept
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* Font Registration Functions */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
Handle<SHFont> SHGraphicsSystem::AddFont(SHFontAsset const& fontAsset) noexcept
|
||||
{
|
||||
|
||||
return fontLibrary.AddFont(device, resourceManager, fontAsset);
|
||||
}
|
||||
|
||||
void SHGraphicsSystem::BuildFonts(void) noexcept
|
||||
{
|
||||
fontLibrary.BuildFonts(device, graphicsQueue, graphicsCmdPool, descPool, resourceManager);
|
||||
}
|
||||
|
||||
#pragma endregion ADD_REMOVE
|
||||
|
|
|
@ -336,7 +336,8 @@ namespace SHADE
|
|||
|
||||
*/
|
||||
/***************************************************************************/
|
||||
Handle<SHFont> AddFont (SHFontAsset const& fontAsset) const noexcept;
|
||||
Handle<SHFont> AddFont (SHFontAsset const& fontAsset) noexcept;
|
||||
void BuildFonts (void) noexcept;
|
||||
|
||||
void PrepareResize(uint32_t newWidth, uint32_t newHeight) noexcept;
|
||||
void HandleResize(void) noexcept;
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace SHADE
|
|||
|
||||
*/
|
||||
/***************************************************************************/
|
||||
SHFont::SHFont(Handle<SHVkLogicalDevice> inLogicalDeviceHdl, SHFontAsset& asset) noexcept
|
||||
SHFont::SHFont(Handle<SHVkLogicalDevice> inLogicalDeviceHdl, SHFontAsset const& asset) noexcept
|
||||
{
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* PREPARE GPU DATA */
|
||||
|
@ -88,8 +88,6 @@ namespace SHADE
|
|||
/*-----------------------------------------------------------------------*/
|
||||
/* COMMANDS TO TRANSFER TO DEVICE MEMORY */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
|
||||
// Transfer to device memory
|
||||
bitmapDataImage->TransferToDeviceResource(commandBuffer);
|
||||
|
||||
|
@ -151,4 +149,9 @@ namespace SHADE
|
|||
return bitmapDataImage;
|
||||
}
|
||||
|
||||
Handle<SHVkBuffer> SHFont::GetMatrixBuffer(void) const noexcept
|
||||
{
|
||||
return matrixDataBuffer;
|
||||
}
|
||||
|
||||
}
|
|
@ -50,7 +50,7 @@ namespace SHADE
|
|||
/*-----------------------------------------------------------------------*/
|
||||
/* PUBLIC MEMBER FUNCTIONS */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
SHFont (Handle<SHVkLogicalDevice> inLogicalDeviceHdl, SHFontAsset& asset) noexcept;
|
||||
SHFont (Handle<SHVkLogicalDevice> inLogicalDeviceHdl, SHFontAsset const& asset) noexcept;
|
||||
void TransferToGPU (Handle<SHVkCommandBuffer> commandBuffer) noexcept;
|
||||
void DoPostTransfer (Handle<SHVkDescriptorPool> descPool) noexcept;
|
||||
|
||||
|
@ -61,6 +61,7 @@ namespace SHADE
|
|||
std::unordered_map<msdfgen::unicode_t, uint32_t> GetUnicodeIndexing (void) const noexcept;
|
||||
SHFontAsset const& GetFontAsset (void) const noexcept;
|
||||
Handle<SHVkImage> GetImage (void) const noexcept;
|
||||
Handle<SHVkBuffer> GetMatrixBuffer (void) const noexcept;
|
||||
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
#include "SHFontLibrary.h"
|
||||
#include "Graphics/Images/SHVkImage.h"
|
||||
#include "Graphics/Commands/SHVkCommandPool.h"
|
||||
#include "Graphics/Devices/SHVkLogicalDevice.h"
|
||||
#include "Graphics/Synchronization/SHVkFence.h"
|
||||
#include "Graphics/Buffers/SHVkBuffer.h"
|
||||
|
||||
namespace SHADE
|
||||
{
|
||||
|
@ -26,6 +29,10 @@ namespace SHADE
|
|||
postTransferBarriers.emplace_back();
|
||||
newFont->GetImage()->PrepareImageTransitionInfo(vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, preTransferBarriers[preTransferBarriers.size() - 1]);
|
||||
newFont->GetImage()->PrepareImageTransitionInfo(vk::ImageLayout::eTransferDstOptimal, vk::ImageLayout::eShaderReadOnlyOptimal, postTransferBarriers[postTransferBarriers.size() - 1]);
|
||||
|
||||
unpreparedFonts.emplace_back (newFont);
|
||||
|
||||
return newFont;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
@ -43,30 +50,54 @@ namespace SHADE
|
|||
|
||||
*/
|
||||
/***************************************************************************/
|
||||
void SHFontLibrary::BuildFonts(Handle<SHVkCommandPool> cmdPool, Handle<SHVkDescriptorPool> descPool, SHResourceHub& resourceHub) noexcept
|
||||
void SHFontLibrary::BuildFonts(Handle<SHVkLogicalDevice> logicalDevice, Handle<SHVkQueue> queue, Handle<SHVkCommandPool> cmdPool, Handle<SHVkDescriptorPool> descPool, SHResourceHub& resourceHub) noexcept
|
||||
{
|
||||
//std::vector
|
||||
// create fence to wait on after transfer
|
||||
Handle<SHVkFence> finishCopyFence = resourceHub.Create<SHVkFence>(logicalDevice);
|
||||
|
||||
|
||||
// allocate new command buffer
|
||||
Handle<SHVkCommandBuffer> transferCommandBuffer = cmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY);
|
||||
|
||||
// Begin recording transfer ops
|
||||
transferCommandBuffer->BeginRecording();
|
||||
{
|
||||
// Transition image to dst
|
||||
transferCommandBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, preTransferBarriers);
|
||||
|
||||
// Transition image to dst
|
||||
transferCommandBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, {}, {}, preTransferBarriers);
|
||||
|
||||
|
||||
|
||||
// Transition dst to shader read
|
||||
transferCommandBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eFragmentShader, {}, {}, {}, postTransferBarriers);
|
||||
// Transfer data from staging to image
|
||||
for (auto& font : unpreparedFonts)
|
||||
font->TransferToGPU(transferCommandBuffer);
|
||||
|
||||
// Transition dst to shader read
|
||||
transferCommandBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eFragmentShader, {}, {}, {}, postTransferBarriers);
|
||||
}
|
||||
|
||||
// End recording for transfer ops
|
||||
transferCommandBuffer->EndRecording();
|
||||
|
||||
// Free it
|
||||
// Submit command buffer to queue
|
||||
queue->SubmitCommandBuffer({transferCommandBuffer}, {}, {}, vk::PipelineStageFlagBits::eTransfer, finishCopyFence);
|
||||
|
||||
// wait for copy to finish
|
||||
finishCopyFence->Wait(true, std::numeric_limits<uint32_t>::max());
|
||||
|
||||
// Prepare image views and desc sets
|
||||
for (auto& font : unpreparedFonts)
|
||||
font->DoPostTransfer(descPool);
|
||||
|
||||
// Free the command buffer and fence
|
||||
resourceHub.Free(transferCommandBuffer);
|
||||
resourceHub.Free(finishCopyFence);
|
||||
|
||||
// Once unprepared fonts are now ready for use, push them into container
|
||||
uint32_t i = static_cast<uint32_t> (unpreparedFonts.size());
|
||||
std::copy (unpreparedFonts.begin(), unpreparedFonts.end(), std::back_inserter(fonts));
|
||||
|
||||
// All fonts have been prepared for GPU usage
|
||||
unpreparedFonts.clear();
|
||||
preTransferBarriers.clear();
|
||||
postTransferBarriers.clear();
|
||||
}
|
||||
|
||||
}
|
|
@ -18,8 +18,8 @@ namespace SHADE
|
|||
//! Handles to all the fonts usable in SHTextRendererComponents
|
||||
std::vector<Handle<SHFont>> fonts;
|
||||
|
||||
//! for indexing
|
||||
std::unordered_map<decltype (std::declval<Handle<SHFont>>().GetId().Raw), uint32_t> fontIndexing;
|
||||
//! Fonts that have yet to be properly prepared for usage
|
||||
std::vector<Handle<SHFont>> unpreparedFonts;
|
||||
|
||||
//! For transitioning images for transfer operations
|
||||
std::vector<vk::ImageMemoryBarrier> preTransferBarriers;
|
||||
|
@ -29,6 +29,6 @@ namespace SHADE
|
|||
|
||||
public:
|
||||
Handle<SHFont> AddFont (Handle<SHVkLogicalDevice> logicalDevice, SHResourceHub& resourceHub, SHFontAsset const& asset) noexcept;
|
||||
void BuildFonts (Handle<SHVkCommandPool> cmdPool, Handle<SHVkDescriptorPool> descPool, SHResourceHub& resourceHub) noexcept;
|
||||
void BuildFonts (Handle<SHVkLogicalDevice> logicalDevice, Handle<SHVkQueue> queue, Handle<SHVkCommandPool> cmdPool, Handle<SHVkDescriptorPool> descPool, SHResourceHub& resourceHub) noexcept;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -25,7 +25,8 @@ namespace SHADE
|
|||
std::unordered_map<std::type_index, std::function<void(AssetID)>> SHResourceManager::typedFreeFuncMap;
|
||||
std::vector<AssetID> SHResourceManager::loadedAssetData;
|
||||
bool SHResourceManager::textureChanged = false;
|
||||
bool SHResourceManager::meshChanged = false;
|
||||
bool SHResourceManager::meshChanged = false;
|
||||
bool SHResourceManager::fontChanged = false;
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Function Definitions */
|
||||
|
@ -76,6 +77,11 @@ namespace SHADE
|
|||
gfxSystem->BuildTextures();
|
||||
textureChanged = false;
|
||||
}
|
||||
if (fontChanged)
|
||||
{
|
||||
gfxSystem->BuildFonts();
|
||||
fontChanged = false;
|
||||
}
|
||||
|
||||
// Free CPU Resources
|
||||
for (auto assetId : loadedAssetData)
|
||||
|
|
|
@ -139,6 +139,7 @@ namespace SHADE
|
|||
// Dirty Flags
|
||||
static bool meshChanged;
|
||||
static bool textureChanged;
|
||||
static bool fontChanged;
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* Helper Functions */
|
||||
|
|
|
@ -318,7 +318,10 @@ namespace SHADE
|
|||
}
|
||||
else if constexpr (std::is_same_v<ResourceType, SHFontAsset>)
|
||||
{
|
||||
|
||||
loadedAssetData.emplace_back(assetId);
|
||||
textureChanged = true;
|
||||
|
||||
return gfxSystem->AddFont(assetData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue