Rendering a cube basics through ENTT
This commit is contained in:
parent
7458254b2d
commit
bc1254e427
@ -10,6 +10,8 @@ void Create();
|
|||||||
void Bind();
|
void Bind();
|
||||||
void Unbind();
|
void Unbind();
|
||||||
|
|
||||||
|
unsigned int getID() { return id; }
|
||||||
|
|
||||||
void Delete();
|
void Delete();
|
||||||
|
|
||||||
void AttachAttribute(unsigned int index, int size, int stride);
|
void AttachAttribute(unsigned int index, int size, int stride);
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
|
#include "../Scene/Components.h"
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
float Angle = 0.0;
|
float Angle = 0.0;
|
||||||
Camera cam = Camera(glm::vec3(16.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), 90.0f);
|
Camera cam = Camera(glm::vec3(16.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), 90.0f);
|
||||||
@ -14,7 +16,29 @@ BarinkEngine::Renderer::~Renderer()
|
|||||||
|
|
||||||
|
|
||||||
void BarinkEngine::Renderer::Render(Scene& scene)
|
void BarinkEngine::Renderer::Render(Scene& scene)
|
||||||
{}
|
{
|
||||||
|
auto group = scene.getReg().view<TransformComponent, Render3DComponent>();
|
||||||
|
group.each([](auto entity , TransformComponent& trans, Render3DComponent& render)
|
||||||
|
{
|
||||||
|
glBindVertexArray(render.VAO);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, render.IBO);
|
||||||
|
|
||||||
|
render.shader.Use();
|
||||||
|
|
||||||
|
render.shader.setUniformVec3("Color", render.color);
|
||||||
|
|
||||||
|
render.shader.setUniformMat4("M", glm::mat4(1.0f));
|
||||||
|
render.shader.setUniformMat4("V", cam.GetViewMatrix());
|
||||||
|
render.shader.setUniformMat4("P", projection);
|
||||||
|
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, render.ElementCount,
|
||||||
|
GL_UNSIGNED_INT, NULL);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include "../Graphics/Primitives/Shader.h"
|
||||||
|
|
||||||
namespace BarinkEngine {
|
namespace BarinkEngine {
|
||||||
|
struct IdentifierComponent {
|
||||||
|
std::string name;
|
||||||
|
};
|
||||||
|
|
||||||
struct TransformComponent {
|
struct TransformComponent {
|
||||||
glm::mat4& transform = glm::mat4(1.0f);
|
glm::mat4& transform = glm::mat4(1.0f);
|
||||||
@ -17,7 +21,13 @@ namespace BarinkEngine {
|
|||||||
struct Render3DComponent {
|
struct Render3DComponent {
|
||||||
unsigned int VAO;
|
unsigned int VAO;
|
||||||
unsigned int IBO;
|
unsigned int IBO;
|
||||||
|
unsigned int ElementCount;
|
||||||
|
glm::vec3 color;
|
||||||
|
Shader shader;
|
||||||
|
Render3DComponent()
|
||||||
|
: shader(Shader("build/Debug/test.vs", "build/Debug/test.fs") )
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Render2DComponent {
|
struct Render2DComponent {
|
||||||
|
@ -10,10 +10,15 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
template<class T >
|
template<class T >
|
||||||
T AddComponent() {
|
T& AddComponent() {
|
||||||
return m_scene->m_registry.emplace<T>(m_entity);
|
return m_scene->m_registry.emplace<T>(m_entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
T* GetComponent() {
|
||||||
|
return m_scene->m_registry.try_get<T>(m_entity);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
entt::entity m_entity;
|
entt::entity m_entity;
|
||||||
Scene* m_scene;
|
Scene* m_scene;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "Scene.h"
|
#include "Scene.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
|
#include "Components.h"
|
||||||
Scene::Scene()
|
Scene::Scene()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -9,6 +10,12 @@ Scene::~Scene()
|
|||||||
|
|
||||||
Entity Scene::AddEntity(std::string& name)
|
Entity Scene::AddEntity(std::string& name)
|
||||||
{
|
{
|
||||||
return { m_registry.create(), this };
|
Entity entity = { m_registry.create(), this };
|
||||||
|
|
||||||
|
entity.AddComponent<BarinkEngine::IdentifierComponent>();
|
||||||
|
entity.AddComponent<BarinkEngine::TransformComponent>();
|
||||||
|
|
||||||
|
|
||||||
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,5 +7,5 @@ uniform sampler2D Texture;
|
|||||||
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
FragColor = vec4(1.0f, 0.0f, 0.0f , 1.0f); // mix ( texture(Texture, TexCoord), vec4(Color, 1.0f), 1.0f);
|
FragColor = vec4(color , 1.0f); // mix ( texture(Texture, TexCoord), vec4(Color, 1.0f), 1.0f);
|
||||||
}
|
}
|
@ -2,43 +2,61 @@
|
|||||||
#include "../../BarinkEngine/src/Scene/Components.h"
|
#include "../../BarinkEngine/src/Scene/Components.h"
|
||||||
#include "../../BarinkEngine/src/Scene/Scene.h"
|
#include "../../BarinkEngine/src/Scene/Scene.h"
|
||||||
#include "../../BarinkEngine/src/Scene/Entity.h"
|
#include "../../BarinkEngine/src/Scene/Entity.h"
|
||||||
|
#include "../../BarinkEngine/src/AssetManager/ModelImporter.h"
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include "GUI.h"
|
#include "GUI.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include <entt/entt.hpp>
|
#include <entt/entt.hpp>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define globals
|
* Define globals
|
||||||
*/
|
*/
|
||||||
//Shader* shader;
|
|
||||||
const std::string vertexShaderSource = "build/Debug/test.vs";
|
|
||||||
const std::string fragmentShaderSource = "build/Debug/test.fs";
|
|
||||||
|
|
||||||
Scene scene;
|
Scene scene;
|
||||||
|
VertexArray va = VertexArray();
|
||||||
|
GpuBuffer vertexBuffer = GpuBuffer();
|
||||||
|
GpuBuffer elementBuffer = GpuBuffer();
|
||||||
|
BarinkEngine::Renderable* renderable;
|
||||||
|
BarinkEngine::SceneObject* object;
|
||||||
|
Entity cube;
|
||||||
/*
|
/*
|
||||||
* Runs once at startup
|
* Runs once at startup
|
||||||
* - USe to initialize the game/sandbox/demo
|
* - USe to initialize the game/sandbox/demo
|
||||||
*/
|
*/
|
||||||
void Start() {
|
void Start() {
|
||||||
// shader = new Shader(vertexShaderSource, fragmentShaderSource);
|
|
||||||
|
|
||||||
auto cube = scene.AddEntity((std::string&)"cube");
|
cube = scene.AddEntity((std::string&)"cube");
|
||||||
auto transform = cube.AddComponent<BarinkEngine::TransformComponent>();
|
auto& render3DComponent = cube.AddComponent<BarinkEngine::Render3DComponent>();
|
||||||
auto render3DComponent = cube.AddComponent<BarinkEngine::Render3DComponent>();
|
auto importer = BarinkEngine::ModelImporter();
|
||||||
|
|
||||||
auto cube2 = scene.AddEntity((std::string&)"cube1");
|
va.Create();
|
||||||
|
va.Bind();
|
||||||
|
|
||||||
auto cube3 = scene.AddEntity((std::string&)"cube2");
|
object = importer.Import("build/Debug/Models/Cube.obj");
|
||||||
auto Transform2 = cube3.AddComponent<BarinkEngine::TransformComponent>();
|
renderable = object->renderable;
|
||||||
auto render3DComponent2 = cube3.AddComponent<BarinkEngine::Render3DComponent>();
|
render3DComponent.ElementCount = static_cast<unsigned int>(renderable->mesh->elements.size());
|
||||||
|
|
||||||
|
vertexBuffer.createBuffer();
|
||||||
|
vertexBuffer.Bind(false);
|
||||||
|
vertexBuffer.setBufferData((void*)&renderable->mesh->vertices[0], renderable->mesh->vertices.size() * sizeof(BarinkEngine::Vertex), false);
|
||||||
|
|
||||||
// Run over every transform component
|
elementBuffer.createBuffer();
|
||||||
auto view = scene.getReg().view<BarinkEngine::TransformComponent, BarinkEngine::Render3DComponent>();
|
elementBuffer.Bind(true);
|
||||||
view.each([](auto entity, auto& transform) {
|
elementBuffer.setBufferData((void*)&renderable->mesh->elements[0], renderable->mesh->elements.size() * sizeof(unsigned int), true);
|
||||||
std::cout << "Found a transform !" << std::endl;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
va.AttachAttribute(0, 3, sizeof(BarinkEngine::Vertex));
|
||||||
|
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(BarinkEngine::Vertex), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
va.Unbind();
|
||||||
|
vertexBuffer.Unbind(false);
|
||||||
|
elementBuffer.Unbind(true);
|
||||||
|
|
||||||
|
render3DComponent.VAO = va.getID();
|
||||||
|
render3DComponent.IBO = elementBuffer.getBufferID();
|
||||||
|
render3DComponent.color = glm::vec3(1.0f, 0.0f, 0.0f);
|
||||||
|
std::cout << render3DComponent.ElementCount << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -49,6 +67,18 @@ void ImmediateGraphicsDraw()
|
|||||||
{
|
{
|
||||||
// Show internal BarinkEngine stats
|
// Show internal BarinkEngine stats
|
||||||
ShowStats();
|
ShowStats();
|
||||||
|
|
||||||
|
ImGui::Begin("Render edit");
|
||||||
|
|
||||||
|
auto a = cube.GetComponent<BarinkEngine::Render3DComponent>();
|
||||||
|
|
||||||
|
ImGui::DragFloat3("Color", &a->color[0], 0.01f, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -57,7 +87,6 @@ void ImmediateGraphicsDraw()
|
|||||||
*/
|
*/
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
renderer.Render(scene);
|
renderer.Render(scene);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user