[WIP] Texture support

This commit is contained in:
2023-08-02 16:17:18 +02:00
parent cf91c9c67e
commit d340d91f52
8 changed files with 175 additions and 2 deletions

View File

@@ -6,10 +6,14 @@
#include "ResourceManager.hpp"
#include "Scene/Vertex.hpp"
#include "Scene/Geometry.hpp"
#include "Scene/Material.hpp"
#include "Vulkan/Context.hpp"
#include "Vulkan/Scene/VulkanShader.hpp"
#include "Vulkan/Scene/VulkanGeometry.hpp"
#include "Vulkan/Scene/VulkanNode.hpp"
#include "Vulkan/Scene/VulkanTexture.hpp"
#include "Vulkan/Image.hpp"
namespace openVulkanoCpp::Vulkan
{
@@ -115,6 +119,10 @@ namespace openVulkanoCpp::Vulkan
{
material->shader->renderShader = CreateShader(material->shader);
}
if (material->texture && !material->texture->renderTexture)
{
material->texture->renderTexture = PrepareTexture(material->texture);
}
}
void ResourceManager::PrepareNode(Scene::Node* node)
@@ -159,7 +167,7 @@ namespace openVulkanoCpp::Vulkan
}
}
}
ManagedBuffer* buffer = CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent);
ManagedBuffer* buffer = CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent/* | vk::MemoryPropertyFlagBits::eDeviceLocal*/);
return buffer;
}
@@ -196,6 +204,17 @@ namespace openVulkanoCpp::Vulkan
toFree[currentBuffer].clear();
}
void ResourceManager::CopyDataToImage(vk::DeviceSize size, void* data, Image* image)
{
ManagedBuffer* uploadBuffer = CreateBuffer(size, vk::BufferUsageFlagBits::eTransferSrc, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible);
uploadBuffer->Copy(data, size, 0);
vk::BufferImageCopy region(0, 0, 0, { vk::ImageAspectFlagBits::eColor, 0, 0, 1 }, { 0, 0, 0 }, image->extent);
cmdBuffers[currentBuffer].copyBufferToImage(uploadBuffer->buffer, image->image, vk::ImageLayout::eTransferDstOptimal, 1, &region);
FreeBuffer(uploadBuffer);
}
ManagedBuffer* ResourceManager::CreateDeviceOnlyBufferWithData(vk::DeviceSize size, vk::BufferUsageFlagBits usage, void* data)
{
ManagedBuffer* target = CreateBuffer(size, usage | vk::BufferUsageFlagBits::eTransferDst, vk::MemoryPropertyFlagBits::eDeviceLocal);
@@ -253,4 +272,14 @@ namespace openVulkanoCpp::Vulkan
shaders.push_back(vkShader);
return vkShader;
}
VulkanTexture* ResourceManager::PrepareTexture(Scene::Texture* texture)
{
VulkanTexture* vkTexture = new VulkanTexture();
vkTexture->Init(this, texture);
//vkTexture->
return vkTexture;
}
}