Multiple changes to prepare for the basic render engine.

* Rendering 2 cubes
* per cube transform panels
* Updated TODO.md
* Updated README.md
This commit is contained in:
2022-05-28 21:19:16 +02:00
parent 76c051e407
commit 8cc6ed1f15
12 changed files with 265 additions and 115 deletions

View File

@ -1,106 +1,53 @@
#include "BarinkEngine.h"
#include <imgui.h>
extern void Start(int argc, char* argv[]);
extern void Start();
extern void Update();
extern void ImmediateGraphicsDraw();
extern void Stop();
using namespace BarinkEngine;
void DrawMyGUI();
BarinkWindow* MainWindow;
int main(int argc, char* argv[]) {
// Startup services
MainWindow = new BarinkWindow(800, 600);
BarinkWindow MainWindow = BarinkWindow(800, 600);
Renderer renderer = Renderer();
InputManager InputSystem = InputManager();
InputSystem.attach(&MainWindow);
InputSystem.attach(MainWindow);
GUIManager GUISystem = GUIManager(MainWindow);
GUIManager GUISystem = GUIManager(&MainWindow);
// First call to setup game
Start(argc, argv);
Start();
// Runtime loop
while (!MainWindow->WindowShouldClose()) {
while (!MainWindow.WindowShouldClose()) {
InputSystem.PollEvents();
Update();
renderer.Render();
DrawMyGUI();
ImmediateGraphicsDraw();
GUISystem.Render();
MainWindow->SwapBuffers();
MainWindow.SwapBuffers();
}
// Shutdown game
Stop();
// Shutdown Services
delete MainWindow;
return 0;
}
void WARN(std::string message) {
spdlog::warn(message);
}
void DrawMyGUI() {
ImGui::NewFrame();
ImGui::Begin("Transform");
ImGui::Text("Cube");
/*
ImGui::InputFloat3("Position:", (float*)nullptr);
ImGui::InputFloat3("Rotation:", (float*)nullptr);
ImGui::InputFloat3("Scale:", (float*)nullptr);
*/
ImGui::End();
ImGui::Begin("Camera");
//ImGui::SliderFloat("Zoom:", &NULL, 10, 190);
ImGui::End();
ImGui::Begin("Scripting!!");
//ImGui::InputTextMultiline("Lua Script", nullptr, 255);
//runCode = ImGui::Button("Run");
ImGui::End();
ImGui::ShowDemoWindow();
}

View File

@ -14,6 +14,7 @@
#include "Input/InputManager.h"
#include "Graphics/Renderer.h"
#include "Graphics/GUI/GUIManager.h"
#include "Scene.h"
void WARN(std::string message);

View File

@ -1,26 +1,18 @@
#pragma once
#include <vector>
#include "Mesh.h"
#include "Transform.h"
#include "Buffer.h"
#include "VertexArray.h"
#include "Scene.h"
/*
#include <MyGraphicsEngine/AssetManager/ModelImporter.h>
#include <MyGraphicsEngine/MyGraphicsEngine/Buffer.h>
#include <MyGraphicsEngine/MyGraphicsEngine/VertexArray.h>
*/
class Renderable {
class Renderable : public SceneNode {
public:
Buffer vertexBuffer;
Buffer elementBuffer;
VertexArray VAO;
Transform transform;
~Renderable();
static Renderable Load();
static Renderable* Load();
void Draw();
private:

View File

@ -1,8 +0,0 @@
#pragma once
#include <glm/glm.hpp>
struct Transform {
glm::vec3 Position;
glm::vec3 Rotation;
glm::vec3 Scale;
};

View File

@ -0,0 +1,47 @@
#pragma once
#include <string>
#include <vector>
#include "glm/glm.hpp"
/*
* Scene should be a description of a game world
*/
struct Transform {
glm::vec3 Position;
glm::vec3 Rotation;
glm::vec3 Scale;
glm::mat4 ModelMatrix;
};
class SceneNode {
public:
std::string name;
Transform transform;
SceneNode* parent;
std::vector<SceneNode*> children;
void addChild(SceneNode& node);
};
class Scene {
public:
SceneNode& GetSceneNode(std::string);
SceneNode& GetRoot();
Scene(std::string SceneName = "Default Scene");
~Scene();
private:
SceneNode* root;
};

52
BarinkEngine/Scene.cpp Normal file
View File

@ -0,0 +1,52 @@
#include "Scene.h"
SceneNode* SearchInChildren(SceneNode* root, std::string name ) {
if (root->name == name)
return root;
SceneNode* found = nullptr;
for (auto child : root->children) {
found = SearchInChildren(child, name);
}
return found;
}
SceneNode& Scene::GetSceneNode(std::string name)
{
return *SearchInChildren(root, name);
}
SceneNode& Scene::GetRoot()
{
return *root;
}
Scene::Scene(std::string sceneName)
{
// Create a root node
root = new SceneNode();
root->name = sceneName;
root->transform = Transform();
root->transform.Position = glm::vec3(0);
root->transform.Rotation = glm::vec3(0);
root->transform.Scale = glm::vec3(0);
root->transform.ModelMatrix = glm::mat4(0);
}
Scene::~Scene()
{
// Destruct scene!
}
void SceneNode::addChild(SceneNode& node)
{
children.push_back(&node);
}

View File

@ -94,8 +94,6 @@ BarinkEngine::Mesh ModelImporter::processMesh(aiMesh* mesh, const aiScene* scene
vertices.push_back(vector);
}
//spdlog::info("{} == {}", mesh->mNumVertices, vertices.size());
// Process Indices
for (unsigned int i = 0; i < mesh->mNumFaces; i++) {
aiFace face = mesh->mFaces[i];

View File

@ -3,9 +3,9 @@
Renderable Renderable::Load()
Renderable* Renderable::Load()
{
return Renderable();
return new Renderable();
}
Renderable::Renderable()