-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlve_model.hpp
More file actions
79 lines (62 loc) · 2.4 KB
/
Copy pathlve_model.hpp
File metadata and controls
79 lines (62 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma once
#include "lve_device.hpp"
//libs
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
//std
#include <vector>
namespace lve {
class LveModel {
public:
VkDescriptorSetLayout descriptorSetLayout;
struct Vertex {
glm::vec3 position;
glm::vec3 color;
glm::vec2 texCoord;
static std::vector<VkVertexInputBindingDescription> getBindingDescriptions();
static std::vector<VkVertexInputAttributeDescription> getAttributeDescriptions();
};
struct UniformBufferObject {
glm::mat4 model;
glm::mat4 view;
glm::mat4 proj;
};
LveModel(LveDevice &device, const std::vector<Vertex> &vertices, const std::vector<uint16_t> &indices, const size_t imageSize);
~LveModel();
//prohibit copying
LveModel(const LveModel &) = delete;
LveModel &operator=(const LveModel &) = delete;
void bind(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, uint32_t i);
void draw(VkCommandBuffer commandBuffer);
void updateUniformBuffer(uint32_t currentImage, uint32_t width, uint32_t height);
private:
void createDescriptorSetLayout();
void createDescriptorPool(const size_t imageSize);
void createDescriptorSets(const size_t imageSize);
void createTextureImage();
void createTextureImageView();
void createTextureSampler();
void createVertexBuffers(const std::vector<Vertex> &vertices);
void createIndexBuffers(const std::vector<uint16_t> &indices);
void createUniformBuffers(const size_t imageSize);
LveDevice &lveDevice;
VkBuffer vertexBuffer;
VkDeviceMemory vertexBufferMemory;
VkBuffer indexBuffer;
VkDeviceMemory indexBufferMemory;
std::vector<VkBuffer> uniformBuffers;
std::vector<VkDeviceMemory> uniformBuffersMemory;
VkImage textureImage;
VkDeviceMemory textureImageMemory;
VkImageView textureImageView;
VkSampler textureSampler;
VkDescriptorPool descriptorPool;
std::vector<VkDescriptorSet> descriptorSets;
uint32_t vertexCount;
uint32_t indexCount;
size_t pImageSize;
};
} //namespace lve