2 changed files with 102 additions and 0 deletions
			
			
		@ -0,0 +1,58 @@
					 | 
				
			||||
#include <glad/glad.h> | 
				
			||||
 | 
				
			||||
#include "inferno/render/buffer.h" | 
				
			||||
 | 
				
			||||
namespace Inferno { | 
				
			||||
 | 
				
			||||
	VertexBuffer::VertexBuffer(float* vertices, size_t size) | 
				
			||||
	{ | 
				
			||||
		glCreateBuffers(1, &m_id); | 
				
			||||
		this->bind(); | 
				
			||||
 | 
				
			||||
		// Upload data to the GPU
 | 
				
			||||
		glBufferData(GL_ARRAY_BUFFER, size, vertices, GL_STATIC_DRAW); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	VertexBuffer::~VertexBuffer() | 
				
			||||
	{ | 
				
			||||
		glDeleteBuffers(1, &m_id); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	void VertexBuffer::bind() const | 
				
			||||
	{ | 
				
			||||
		glBindBuffer(GL_ARRAY_BUFFER, m_id); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	void VertexBuffer::unbind() const | 
				
			||||
	{ | 
				
			||||
		glBindBuffer(GL_ARRAY_BUFFER, 0); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
// -----------------------------------------
 | 
				
			||||
 | 
				
			||||
	IndexBuffer::IndexBuffer(uint32_t* indices, size_t size) : | 
				
			||||
		m_count(size / sizeof(uint32_t)) | 
				
			||||
	{ | 
				
			||||
		glCreateBuffers(1, &m_id); | 
				
			||||
		this->bind(); | 
				
			||||
 | 
				
			||||
		// Upload data to the GPU
 | 
				
			||||
		glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, indices, GL_STATIC_DRAW); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	IndexBuffer::~IndexBuffer() | 
				
			||||
	{ | 
				
			||||
		glDeleteBuffers(1, &m_id); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	void IndexBuffer::bind() const | 
				
			||||
	{ | 
				
			||||
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	void IndexBuffer::unbind() const | 
				
			||||
	{ | 
				
			||||
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,44 @@
					 | 
				
			||||
#ifndef BUFFER_H | 
				
			||||
#define BUFFER_H | 
				
			||||
 | 
				
			||||
#include <cstddef> // std::size_t | 
				
			||||
#include <cstdint> // std::uint32_t | 
				
			||||
 | 
				
			||||
namespace Inferno { | 
				
			||||
 | 
				
			||||
	// GPU memory which holds the raw vertex data
 | 
				
			||||
	class VertexBuffer { | 
				
			||||
	public: | 
				
			||||
		VertexBuffer(float* vertices, size_t size); | 
				
			||||
		~VertexBuffer(); | 
				
			||||
 | 
				
			||||
		void bind() const; | 
				
			||||
		void unbind() const; | 
				
			||||
 | 
				
			||||
	private: | 
				
			||||
		uint32_t m_id; | 
				
			||||
	}; | 
				
			||||
 | 
				
			||||
// -----------------------------------------
 | 
				
			||||
 | 
				
			||||
	// Vertices order of rendering
 | 
				
			||||
	class IndexBuffer { | 
				
			||||
	public: | 
				
			||||
		IndexBuffer(uint32_t* indices, size_t size); | 
				
			||||
		~IndexBuffer(); | 
				
			||||
 | 
				
			||||
		void bind() const; | 
				
			||||
		void unbind() const; | 
				
			||||
 | 
				
			||||
// -----------------------------------------
 | 
				
			||||
 | 
				
			||||
		inline uint32_t getCount() const { return m_count; } | 
				
			||||
 | 
				
			||||
	private: | 
				
			||||
		uint32_t m_id; | 
				
			||||
		uint32_t m_count; | 
				
			||||
	}; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
#endif // BUFFER_H
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue