52 lines
2.0 KiB
C++
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;
|
|
}
|