diff --git a/BarinkEngine/src/Graphics/GUI/GUIManager.cpp b/BarinkEngine/src/Graphics/GUI/GUIManager.cpp index 5f407e8..3b45b87 100644 --- a/BarinkEngine/src/Graphics/GUI/GUIManager.cpp +++ b/BarinkEngine/src/Graphics/GUI/GUIManager.cpp @@ -35,28 +35,7 @@ void GUIManager::Render() ImGui::NewFrame(); - - ImGui::DockSpaceOverViewport(ImGui::GetMainViewport()); - ImGui::Begin("##App"); - // Show a menu bar - ImGui::BeginMainMenuBar(); - - if (ImGui::BeginMenu("Application")) { - - - if (ImGui::MenuItem("Exit")) { - // TODO: Exit application - } - - - - ImGui::EndMenu(); - } - - ImGui::EndMainMenuBar(); - - ImmediateGraphicsDraw(); ImGui::End(); diff --git a/BarinkEngine/src/Graphics/Renderer.cpp b/BarinkEngine/src/Graphics/Renderer.cpp index b37f3ef..333a3e9 100644 --- a/BarinkEngine/src/Graphics/Renderer.cpp +++ b/BarinkEngine/src/Graphics/Renderer.cpp @@ -22,6 +22,49 @@ BarinkEngine::Renderer::~Renderer() // glDeleteBuffers(1, &UV_id); } + +void BarinkEngine::Renderer::Render() +{ + Angle += 0.0001f; + + for (auto model : models) { + // Push matrices etc .... + model->vertexarray.Bind(); + + model->elementBuffer.Bind(true); + + if (model->material == nullptr) { + std::cout << "No material attached!" << std::endl; + // continue; //NOTE: Or use some default Material + } + else { + model->material->shader.Use(); + model->material->Apply(); + + model->material->shader.setUniformVec3("Color", model->material->Color); + + + model->material->shader.setUniformMat4("M", glm::rotate(glm::mat4(), Angle, glm::vec3(0.5f, 0.5f, 0.0f))); + model->material->shader.setUniformMat4("V", cam.GetViewMatrix()); + model->material->shader.setUniformMat4("P", projection); + // Update perf counters + ES.verts = model->mesh->vertices.size(); + ES.DC++; + + glDrawElements(GL_TRIANGLES, + static_cast(model->mesh->elements.size()), + GL_UNSIGNED_INT, + NULL + ); + } + + + model->vertexarray.Unbind(); + + } +} + + void BarinkEngine::Renderer::Render(Framebuffer& framebuffer) { glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.GetId()); diff --git a/BarinkEngine/src/Graphics/Renderer.h b/BarinkEngine/src/Graphics/Renderer.h index 74c1da8..58e4c03 100644 --- a/BarinkEngine/src/Graphics/Renderer.h +++ b/BarinkEngine/src/Graphics/Renderer.h @@ -19,6 +19,8 @@ namespace BarinkEngine { Renderer(); ~Renderer(); + + void Render(); void Render(Framebuffer& framebuffer); void Submit(Renderable* model); diff --git a/Editor/src/main.cpp b/Editor/src/main.cpp index 3d876d9..681775a 100644 --- a/Editor/src/main.cpp +++ b/Editor/src/main.cpp @@ -1,8 +1,138 @@ -#include +#include "../../BarinkEngine/src/BarinkEngine.h" +#include "../../BarinkEngine/src/Scene/SceneManager.h" +#include "../../BarinkEngine/src/Scene/SceneNodeTypes.h" +#include "../../BarinkEngine/src/AssetManager/ModelImporter.h" +#include "../../BarinkEngine/src/Graphics/Framebuffer.h" +#include +/* +* Define globals +*/ +Shader* shader; -int main() +char* code = new char[254]; + +const std::string vertexShaderSource = "build/Debug/test.vs"; +const std::string fragmentShaderSource = "build/Debug/test.fs"; + +BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter(); +Framebuffer* framebuffer; +Scene* Level1; +BarinkEngine::SceneObject* cube; +/* +* Runs once at startup +* - USe to initialize the game/sandbox/demo +*/ +void Start() { + // Build a basic test scene + // NOTE: This will later be done through an editor + + // Create a level and load it as the current level + std::string levelName("Test Level"); + Level1 = SceneManager::CreateScene(levelName); + SceneManager::LoadScene(*Level1); + + shader = new Shader(vertexShaderSource, fragmentShaderSource); + + // Create a cube node + + cube = MI->Import("build/Debug/Models/cube.obj"); + cube->renderable->material = new Material(*shader); + cube->renderable->material->Color = glm::vec3(1.0f, 0.0f, 0.0f); + + // What is in cube now ?? + std::cout << "mesh vertices: " << cube->renderable->mesh->vertices.size() << std::endl; + std::cout << "mesh elements: " << cube->renderable->mesh->elements.size() << std::endl; + + Level1->GetRoot().addChild(*cube); + + memset(code, '\0', 254); + framebuffer = new Framebuffer(); + + std::cout << "Colour attachment id; " << framebuffer->GetColourAttachment() << std::endl; + // TODO: Move to runtime/ Engine + // NOTE: Submits should later be done through walking the sceneTree + + renderer.Submit(cube->renderable); + +} + +/* +* Runs every frame +* - Use to draw Immediate mode graphics (Not meant for HUD's ) +*/ +void ImmediateGraphicsDraw() { - std::cout << "Welcome to the Editor!" << std::endl; + ImGui::DockSpaceOverViewport(ImGui::GetMainViewport()); + + // Show a menu bar + ImGui::BeginMainMenuBar(); + + if (ImGui::BeginMenu("Application")) { + + + if (ImGui::MenuItem("Exit")) { + // TODO: Exit application + } + + + + ImGui::EndMenu(); + } + + ImGui::EndMainMenuBar(); + + + // Show internal BarinkEngine stats + ShowStats(); + + ImGui::Begin("Viewport"); + ImGui::Image((void*)(intptr_t)framebuffer->GetColourAttachment(), ImVec2{ 800,600 }); + ImGui::End(); + + static float Zoom = 90; + static glm::vec3 Position = glm::vec3(0.0f, 0.0f, 0.0f); + static glm::vec3 Rotation = glm::vec3(0.0f, 0.0f, 0.0f); + + ImGui::Begin("Camera"); + ImGui::SliderFloat("Zoom", &Zoom, 10, 190); + ImGui::InputFloat3("Position:", &Position[0]); + + ImGui::InputFloat3("Rotation:", &Rotation[0]); + ImGui::End(); + + ImGui::Begin("Scripting"); + ImGui::Text("Lua Code"); + ImGui::InputTextMultiline("##", code, 255); + bool runCode = ImGui::Button("Run"); + ImGui::End(); + + ImGui::Begin("Scene Explorer"); + ImGui::End(); + +} + +/* +* Runs every frame +* - Meant for game logic ( non-physics related) +*/ +void Update() +{ + // glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId()); + + renderer.Render(*framebuffer); + + // glBindFramebuffer(GL_FRAMEBUFFER, 0); +} + +/* +* Runs at the end of the program +* - Meant for cleanup +*/ +void Stop() +{ + delete framebuffer; + delete MI; + delete shader; } \ No newline at end of file diff --git a/SandboxApp/src/Sandbox.cpp b/SandboxApp/src/Sandbox.cpp index 324a717..cf1c8cc 100644 --- a/SandboxApp/src/Sandbox.cpp +++ b/SandboxApp/src/Sandbox.cpp @@ -18,7 +18,6 @@ const std::string vertexShaderSource = "build/Debug/test.vs"; const std::string fragmentShaderSource = "build/Debug/test.fs"; BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter(); -Framebuffer* framebuffer; Scene* Level1; BarinkEngine::SceneObject* cube; /* @@ -26,8 +25,6 @@ BarinkEngine::SceneObject* cube; * - USe to initialize the game/sandbox/demo */ void Start() { - // Build a basic test scene - // NOTE: This will later be done through an editor // Create a level and load it as the current level std::string levelName("Test Level"); @@ -49,9 +46,7 @@ void Start() { Level1->GetRoot().addChild(*cube); memset(code, '\0', 254); - framebuffer = new Framebuffer(); - - std::cout << "Colour attachment id; "<< framebuffer->GetColourAttachment() << std::endl; + // TODO: Move to runtime/ Engine // NOTE: Submits should later be done through walking the sceneTree @@ -67,14 +62,6 @@ void ImmediateGraphicsDraw() { // Show internal BarinkEngine stats ShowStats(); - SceneView(*framebuffer); - - // Show different tooling for this specific sandbox - CameraTool(); - ScriptingTool(code); - - SceneExplorer( "Scene Explorer"); - } /* @@ -83,11 +70,9 @@ void ImmediateGraphicsDraw() */ void Update() { - // glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId()); - renderer.Render(*framebuffer); + renderer.Render(); - // glBindFramebuffer(GL_FRAMEBUFFER, 0); } /* @@ -96,7 +81,6 @@ void Update() */ void Stop() { - delete framebuffer; delete MI; delete shader; } \ No newline at end of file