/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* texture.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/31 18:03:35 by maldavid #+# #+# */ /* Updated: 2023/03/31 18:06:26 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #include #include namespace mlx { void Texture::create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format) { Image::create(width, height, format, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT ); Image::createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); Image::createSampler(); Buffer staging_buffer; std::size_t size = width * height * (format == VK_FORMAT_R32G32B32A32_SFLOAT ? 16 : 4); staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, pixels); Image::copyBuffer(staging_buffer); staging_buffer.destroy(); } }