98 lines
2.4 KiB
C++
Executable File
98 lines
2.4 KiB
C++
Executable File
#pragma once
|
|
#include "Deer/Memory.h"
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
namespace Deer {
|
|
enum class ShaderDataType {
|
|
None = 0,
|
|
FloatingPoint,
|
|
NormalizedFloatingPoint,
|
|
Integer
|
|
};
|
|
|
|
enum class DataType {
|
|
None = 0,
|
|
Half, Half2, Half3, Half4,
|
|
Float, Float2, Float3, Float4,
|
|
|
|
Byte, Byte2, Byte3, Byte4,
|
|
Short, Short2, Short3, Short4,
|
|
Int, Int2, Int3, Int4,
|
|
|
|
Unsigned_Byte, Unsigned_Byte2, Unsigned_Byte3, Unsigned_Byte4,
|
|
Unsigned_Short, Unsigned_Short2, Unsigned_Short3, Unsigned_Short4,
|
|
Unsigned_Int, Unsigned_Int2, Unsigned_Int3, Unsigned_Int4
|
|
};
|
|
|
|
enum class IndexDataType {
|
|
None = 0,
|
|
Unsigned_Byte,
|
|
Unsigned_Short,
|
|
Unsigned_Int,
|
|
};
|
|
|
|
unsigned int dataTypeSize(DataType type);
|
|
unsigned int dataTypeCount(DataType type);
|
|
unsigned int indexDataTypeSize(IndexDataType type);
|
|
|
|
struct BufferElement {
|
|
std::string name;
|
|
DataType type;
|
|
ShaderDataType shaderType;
|
|
int offset;
|
|
|
|
BufferElement(std::string _name, DataType _type , ShaderDataType _shaderType = ShaderDataType::FloatingPoint,
|
|
int _offset = -1)
|
|
: name(_name), type(_type), shaderType(_shaderType), offset(_offset){
|
|
}
|
|
};
|
|
|
|
class BufferLayout {
|
|
public:
|
|
BufferLayout() { }
|
|
BufferLayout(const std::initializer_list<BufferElement>& elements, int _stride = -1)
|
|
: m_bufferElements(elements), m_stride(_stride) {
|
|
calculateOffsetAndStride();
|
|
}
|
|
BufferLayout(const std::vector<BufferElement> elements)
|
|
: m_bufferElements(elements) {
|
|
calculateOffsetAndStride();
|
|
}
|
|
|
|
inline std::vector<BufferElement>::iterator begin() { return m_bufferElements.begin(); }
|
|
inline std::vector<BufferElement>::iterator end() { return m_bufferElements.end(); }
|
|
inline std::vector<BufferElement> getElements() { return m_bufferElements; }
|
|
inline int getStride() { return m_stride; }
|
|
private:
|
|
void calculateOffsetAndStride();
|
|
|
|
std::vector<BufferElement> m_bufferElements;
|
|
int m_stride;
|
|
};
|
|
|
|
class VertexBuffer {
|
|
public:
|
|
virtual ~VertexBuffer() = default;
|
|
|
|
virtual void bind() const = 0;
|
|
virtual void setLayout(BufferLayout& layout) = 0;
|
|
virtual BufferLayout& getLayout() = 0;
|
|
|
|
static Ref<VertexBuffer> create(void* data, unsigned int size);
|
|
};
|
|
|
|
class IndexBuffer {
|
|
public:
|
|
virtual ~IndexBuffer() = default;
|
|
|
|
virtual void bind() const = 0;
|
|
virtual unsigned int getCount() const = 0;
|
|
virtual IndexDataType getIndexDataType() const = 0;
|
|
|
|
static Ref<IndexBuffer> create(void* data, unsigned int size, IndexDataType indexDataType);
|
|
};
|
|
}
|
|
|