Files
AronaCore/core/rhi/vulkan/texture_vk.cpp
daiqingshuang c93ed0fd77 vulkan pipeline
2024-02-19 18:02:58 +08:00

52 lines
2.0 KiB
C++

#include "texture_vk.h"
#include "renderer_vk.h"
#include "application/application.h"
#include "GLFW/glfw3.h"
bool texture_vk::init_data(const unsigned char* data, int width, int height) {
auto vk_rder = static_cast<renderer_vk*>(application::get()->get_renderer());
auto& device = vk_rder->device;
vk::ImageCreateInfo image_info;
image_info.setFormat(vk::Format::eR8G8B8A8Srgb);
image_info.setImageType(vk::ImageType::e2D);
image_info.setExtent({static_cast<uint32_t>(width), static_cast<uint32_t>(height), 1});
image_info.setMipLevels(1);
image_info.setArrayLayers(1);
image_info.setSamples(vk::SampleCountFlagBits::e1);
image_ = device.createImage(image_info);
vk::ImageViewCreateInfo view_info;
view_info.setImage(image_);
view_info.setViewType(vk::ImageViewType::e2D);
view_info.setFormat(vk::Format::eR8G8B8A8Srgb);
view_info.setSubresourceRange({vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1});
image_view_ = device.createImageView(view_info);
vk::SamplerCreateInfo sampler_info;
sampler_info.setMagFilter(vk::Filter::eLinear);
sampler_info.setMinFilter(vk::Filter::eLinear);
sampler_info.setAddressModeU(vk::SamplerAddressMode::eClampToEdge);
sampler_info.setAddressModeV(vk::SamplerAddressMode::eClampToEdge);
sampler_info.setAddressModeW(vk::SamplerAddressMode::eClampToEdge);
sampler_info.setAnisotropyEnable(VK_FALSE);
sampler_info.setMaxAnisotropy(1);
sampler_info.setBorderColor(vk::BorderColor::eFloatOpaqueWhite);
sampler_info.setUnnormalizedCoordinates(VK_FALSE);
sampler_info.setCompareEnable(VK_FALSE);
sampler_info.setCompareOp(vk::CompareOp::eAlways);
sampler_info.setMipmapMode(vk::SamplerMipmapMode::eLinear);
sampler_ = device.createSampler(sampler_info);
vk::BufferCreateInfo buffer_info;
buffer_info.setSize(width * height * 4);
buffer_info.setUsage(vk::BufferUsageFlagBits::eTransferSrc);
buffer_info.setSharingMode(vk::SharingMode::eExclusive);
buffer_ = device.createBuffer(buffer_info);
return true;
}