[WIP] Texture support
This commit is contained in:
@@ -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, ®ion);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user