PeriDyno 1.0.0
Loading...
Searching...
No Matches
VulkanTexture.h
Go to the documentation of this file.
1/*
2* Vulkan texture loader
3*
4* Copyright(C) by Sascha Willems - www.saschawillems.de
5*
6* This code is licensed under the MIT license(MIT) (http://opensource.org/licenses/MIT)
7*/
8
9#pragma once
10
11#include <fstream>
12#include <stdlib.h>
13#include <string>
14#include <vector>
15
16#include "vulkan/vulkan.h"
17
18#include <ktx.h>
19#include <ktxvulkan.h>
20
21#include "VulkanBuffer.h"
22#include "VulkanTools.h"
23#include "VkContext.h"
24
25#if defined(__ANDROID__)
26# include <android/asset_manager.h>
27#endif
28
29namespace vks
30{
32{
33public:
34 Texture();
35
36 void updateDescriptor();
37 void destroy();
38 ktxResult loadKTXFile(std::string filename, ktxTexture **target);
39
40 VkDescriptorImageInfo& descriptorInfo() { return descriptor; }
41
42protected:
44 VkImage image;
45 VkImageLayout imageLayout;
46 VkDeviceMemory deviceMemory;
47 VkImageView view;
48 uint32_t width, height;
49 uint32_t mipLevels;
50 uint32_t layerCount;
51 VkDescriptorImageInfo descriptor;
52 VkSampler sampler;
53};
54
55class Texture2D : public Texture
56{
57 public:
58 void loadFromFile(
59 std::string filename,
60 VkFormat format,
61 VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
62 VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
63 bool forceLinear = false);
64 void fromBuffer(
65 void * buffer,
66 VkDeviceSize bufferSize,
67 VkFormat format,
68 uint32_t texWidth,
69 uint32_t texHeight,
70 VkFilter filter = VK_FILTER_LINEAR,
71 VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
72 VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
73};
74
75class Texture2DArray : public Texture
76{
77 public:
78 void loadFromFile(
79 std::string filename,
80 VkFormat format,
81 VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
82 VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
83};
84
85class TextureCubeMap : public Texture
86{
87 public:
88 void loadFromFile(
89 std::string filename,
90 VkFormat format,
91 VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
92 VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
93};
94} // namespace vks
void loadFromFile(std::string filename, VkFormat format, VkImageUsageFlags imageUsageFlags=VK_IMAGE_USAGE_SAMPLED_BIT, VkImageLayout imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
void loadFromFile(std::string filename, VkFormat format, VkImageUsageFlags imageUsageFlags=VK_IMAGE_USAGE_SAMPLED_BIT, VkImageLayout imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, bool forceLinear=false)
void fromBuffer(void *buffer, VkDeviceSize bufferSize, VkFormat format, uint32_t texWidth, uint32_t texHeight, VkFilter filter=VK_FILTER_LINEAR, VkImageUsageFlags imageUsageFlags=VK_IMAGE_USAGE_SAMPLED_BIT, VkImageLayout imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
void loadFromFile(std::string filename, VkFormat format, VkImageUsageFlags imageUsageFlags=VK_IMAGE_USAGE_SAMPLED_BIT, VkImageLayout imageLayout=VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
VkDescriptorImageInfo descriptor
ktxResult loadKTXFile(std::string filename, ktxTexture **target)
uint32_t mipLevels
uint32_t height
VkDescriptorImageInfo & descriptorInfo()
dyno::VkContext * ctx
uint32_t width
VkImageLayout imageLayout
uint32_t layerCount
void updateDescriptor()
VkImageView view
VkSampler sampler
VkDeviceMemory deviceMemory