1
0
Fork 0
Univerxel/src/client/render/vk/api/Models.hpp

82 lines
2.0 KiB
C++

#pragma once
#include "../../api/Models.hpp"
#include "Buffers.hpp"
namespace render::vk {
/// Positions only buffer
class Shape final: public Buffer {
public:
const size_t size;
static std::unique_ptr<Shape> Create(const std::vector<glm::vec3>&);
static VkVertexInputBindingDescription getBindingDescription() {
VkVertexInputBindingDescription description{};
description.binding = 0;
description.stride = sizeof(glm::vec3);
description.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
return description;
}
static VkVertexInputAttributeDescription getAttributeDescription() {
VkVertexInputAttributeDescription attributeDescription{};
attributeDescription.binding = 0;
attributeDescription.location = 0;
attributeDescription.format = VK_FORMAT_R32G32B32_SFLOAT;
attributeDescription.offset = 0;
return attributeDescription;
}
protected:
Shape(VkBuffer ref, memory::ptr mem, size_t size):
Buffer(ref, std::move(mem)), size(size) { }
};
/*class Indicator final: public render::Indicator {
public:
Indicator(const std::vector<glm::vec3>&, const std::vector<glm::vec4>&);
~Indicator();
size_t draw();
size_t drawInstanced(size_t count);
private:
size_t size;
GLuint vertexBufferId;
GLuint colorBufferId;
void enableAttribs();
void disableAttribs();
};
class Model final: public render::Model {
public:
Model(const Data&);
~Model();
size_t draw();
size_t drawInstanced(size_t count);
private:
size_t indexSize;
GLuint vertexBufferId;
GLuint indexBufferId;
};*/
class LodModel final: public render::LodModel, public ShortIndexedVertexBuffer {
public:
static std::unique_ptr<LodModel> Create(const LodData&);
static void MakeDefault();
protected:
LodModel(size_t size, const std::vector<size_t>& off,
VkBuffer vertex, VkBuffer index, memory::ptr mem):
ShortIndexedVertexBuffer(vertex, index, std::move(mem))
{
indexSize = size;
offsets = off;
}
};
}