Rendering a cube basics through ENTT

This commit is contained in:
2022-10-23 12:57:58 +02:00
parent 7458254b2d
commit bc1254e427
7 changed files with 103 additions and 26 deletions

View File

@ -2,43 +2,61 @@
#include "../../BarinkEngine/src/Scene/Components.h"
#include "../../BarinkEngine/src/Scene/Scene.h"
#include "../../BarinkEngine/src/Scene/Entity.h"
#include "../../BarinkEngine/src/AssetManager/ModelImporter.h"
#include <imgui.h>
#include "GUI.h"
#include "Util.h"
#include <entt/entt.hpp>
/*
* Define globals
*/
//Shader* shader;
const std::string vertexShaderSource = "build/Debug/test.vs";
const std::string fragmentShaderSource = "build/Debug/test.fs";
Scene scene;
VertexArray va = VertexArray();
GpuBuffer vertexBuffer = GpuBuffer();
GpuBuffer elementBuffer = GpuBuffer();
BarinkEngine::Renderable* renderable;
BarinkEngine::SceneObject* object;
Entity cube;
/*
* Runs once at startup
* - USe to initialize the game/sandbox/demo
*/
void Start() {
// shader = new Shader(vertexShaderSource, fragmentShaderSource);
auto cube = scene.AddEntity((std::string&)"cube");
auto transform = cube.AddComponent<BarinkEngine::TransformComponent>();
auto render3DComponent = cube.AddComponent<BarinkEngine::Render3DComponent>();
cube = scene.AddEntity((std::string&)"cube");
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");
auto Transform2 = cube3.AddComponent<BarinkEngine::TransformComponent>();
auto render3DComponent2 = cube3.AddComponent<BarinkEngine::Render3DComponent>();
object = importer.Import("build/Debug/Models/Cube.obj");
renderable = object->renderable;
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
auto view = scene.getReg().view<BarinkEngine::TransformComponent, BarinkEngine::Render3DComponent>();
view.each([](auto entity, auto& transform) {
std::cout << "Found a transform !" << std::endl;
});
elementBuffer.createBuffer();
elementBuffer.Bind(true);
elementBuffer.setBufferData((void*)&renderable->mesh->elements[0], renderable->mesh->elements.size() * sizeof(unsigned int), true);
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
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()
{
renderer.Render(scene);
}