Rendering a cube basics through ENTT
This commit is contained in:
		@ -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);
 | 
			
		||||
   
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user