Texture implementation basics

This commit is contained in:
2024-07-04 17:00:46 +02:00
parent d79f74c21d
commit 3e73672538
9 changed files with 104 additions and 37 deletions

View File

@@ -148,7 +148,7 @@ namespace OpenVulkano::Vulkan
const std::unique_lock lock(mutex);
if (material->texture && !material->texture->renderTexture)
{
material->texture->renderTexture = PrepareTexture(material->texture);
PrepareTexture(material->texture);
}
}
@@ -291,6 +291,21 @@ namespace OpenVulkano::Vulkan
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);
vk::ImageMemoryBarrier barrier {};
barrier.oldLayout = vk::ImageLayout::eUndefined;
barrier.newLayout = vk::ImageLayout::eShaderReadOnlyOptimal;
barrier.image = image->image;
barrier.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor;
barrier.subresourceRange.baseMipLevel = 0;
barrier.subresourceRange.levelCount = 1;
barrier.subresourceRange.baseArrayLayer = 0;
barrier.subresourceRange.layerCount = 1;
barrier.setSrcAccessMask({});
barrier.setDstAccessMask(vk::AccessFlagBits::eTransferWrite);
// TODO set access masks for mip and array layers
cmdBuffers[currentBuffer].pipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, 0, nullptr, 0, nullptr, 1, &barrier );
FreeBuffer(uploadBuffer);
}
@@ -365,8 +380,7 @@ namespace OpenVulkano::Vulkan
{
VulkanTexture* vkTexture = new VulkanTexture();
vkTexture->Init(this, texture);
//vkTexture->
vkTexture->Init(this, texture, GetDescriptorLayoutSet(Scene::Texture::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Texture::DESCRIPTOR_SET_LAYOUT_BINDING, 2);
return vkTexture;
}

View File

@@ -40,6 +40,7 @@ namespace OpenVulkano
class ResourceManager : public ICloseable, public IShaderOwner
{
friend UniformBuffer;
friend VulkanTexture;
Context* context;
vk::Device device = nullptr;