From 6962ce0bcf0ee8e7e80c39fb61c597b8a43da1ec Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 11 Jun 2024 10:25:06 +0200 Subject: [PATCH] Some more TexturePreparations #11 --- openVulkanoCpp/Scene/Material.hpp | 1 - openVulkanoCpp/Scene/Texture.hpp | 4 +++- .../Vulkan/Resources/ResourceManager.cpp | 4 ---- .../Scene/SimpleDrawableVulkanEncoder.cpp | 21 +++++++++++++++++-- openVulkanoCpp/Vulkan/Scene/VulkanTexture.hpp | 6 ++++-- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/openVulkanoCpp/Scene/Material.hpp b/openVulkanoCpp/Scene/Material.hpp index 36c2e2b..59b199b 100644 --- a/openVulkanoCpp/Scene/Material.hpp +++ b/openVulkanoCpp/Scene/Material.hpp @@ -19,6 +19,5 @@ namespace OpenVulkano::Scene { MaterialProperties properties; Texture* texture; - Shader* shader; }; } diff --git a/openVulkanoCpp/Scene/Texture.hpp b/openVulkanoCpp/Scene/Texture.hpp index 943a133..7833b33 100644 --- a/openVulkanoCpp/Scene/Texture.hpp +++ b/openVulkanoCpp/Scene/Texture.hpp @@ -8,11 +8,13 @@ #include "UpdateFrequency.hpp" #include "Base/ICloseable.hpp" +#include "Math/Math.hpp" namespace OpenVulkano::Scene { - struct Texture + class Texture { + public: ICloseable* renderTexture = nullptr; void* textureBuffer; Math::Vector3ui resolution; diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index b8638d0..eaf33d1 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -143,10 +143,6 @@ namespace OpenVulkano::Vulkan void ResourceManager::PrepareMaterial(Scene::Material* material) { const std::unique_lock lock(mutex); - if(!material->shader->renderShader) - { - material->shader->renderShader = CreateShader(material->shader); - } if (material->texture && !material->texture->renderTexture) { material->texture->renderTexture = PrepareTexture(material->texture); diff --git a/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp b/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp index 4f7066f..be7c672 100644 --- a/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp +++ b/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp @@ -5,9 +5,11 @@ */ #include "Scene/SimpleDrawable.hpp" +#include "Scene/Material.hpp" #include "VulkanGeometry.hpp" #include "VulkanNode.hpp" #include "Vulkan/VulkanDrawContext.hpp" +#include "VulkanTexture.hpp" using namespace OpenVulkano::Scene; @@ -15,10 +17,25 @@ namespace OpenVulkano::Vulkan { void EncodeSimpleDrawable(Drawable* instance, Vulkan::VulkanDrawContext* drawContext) { - Geometry* mesh = static_cast(instance)->GetMesh(); + SimpleDrawable* drawable = static_cast(instance); + Geometry* mesh = drawable->GetMesh(); VulkanGeometry* renderGeo = static_cast(mesh->renderGeo); - if (!mesh->renderGeo) renderGeo = drawContext->renderer->GetResourceManager().PrepareGeometry(mesh); + if (!renderGeo) renderGeo = drawContext->renderer->GetResourceManager().PrepareGeometry(mesh); renderGeo->RecordBind(drawContext->commandBuffer); + if (Material* material = drawable->GetMaterial()) + { + if (Texture* texture = material->texture) + { + VulkanTexture* renderTexture = static_cast(texture->renderTexture); + if (!renderTexture) + { + drawContext->renderer->GetResourceManager().PrepareMaterial(drawable->GetMaterial()); + renderTexture = static_cast(texture->renderTexture); + } + renderTexture->Record(drawContext); + } + } + for(Node* node : instance->GetNodes()) { drawContext->EncodeNode(node); diff --git a/openVulkanoCpp/Vulkan/Scene/VulkanTexture.hpp b/openVulkanoCpp/Vulkan/Scene/VulkanTexture.hpp index 63a061e..ec39cce 100644 --- a/openVulkanoCpp/Vulkan/Scene/VulkanTexture.hpp +++ b/openVulkanoCpp/Vulkan/Scene/VulkanTexture.hpp @@ -14,8 +14,9 @@ namespace OpenVulkano::Vulkan { - struct VulkanTexture : IRecordable, Image + class VulkanTexture : public IRecordable, public Image { + public: Scene::Texture* m_texture = nullptr; virtual void Init(ResourceManager* resManager, Scene::Texture* texture) @@ -32,8 +33,9 @@ namespace OpenVulkano::Vulkan } }; - struct VulkanTextureDynamic : VulkanTexture + class VulkanTextureDynamic : VulkanTexture { + public: uint32_t lastUpdate = -1; ResourceManager* resourceManager;