Redering cube in editor
This commit is contained in:
		| @ -1,83 +1,79 @@ | ||||
| #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 "../../BarinkEngine/src/Graphics/Memory/Framebuffer.h" | ||||
| #include <imgui.h> | ||||
|  | ||||
| #include "../../BarinkEngine/src/PerfCounter.cpp" | ||||
| #include "../../BarinkEngine/src/Scene/Entity.h" | ||||
| #include "stb_image.h" | ||||
| #include "../../libs/guizmo/ImGuizmo.h" | ||||
| #include "../../libs/glm/glm/gtc/type_ptr.hpp" | ||||
| #include <glm/gtc/matrix_transform.hpp> | ||||
| #include "widgets/widgets.h" | ||||
| /* | ||||
| * Define globals | ||||
| */ | ||||
| Shader* shader; | ||||
|  | ||||
| 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; | ||||
| Scene Level1; | ||||
| BarinkEngine::SceneObject* Model; | ||||
| Entity cube; | ||||
|  | ||||
| /* | ||||
| * Runs once at startup | ||||
| * - USe to initialize the game/sandbox/demo | ||||
| */ | ||||
| void Start() { | ||||
|  | ||||
|  | ||||
|     auto io = ImGui::GetIO(); | ||||
|     io.Fonts->AddFontFromFileTTF("build/Debug/Fonts/Roboto-Regular.ttf", 18); | ||||
|     framebuffer = new Framebuffer(); | ||||
|     // 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); | ||||
|     auto importer = BarinkEngine::ModelImporter(); | ||||
|      | ||||
|     // Create a cube  | ||||
|     Model = importer.Import("build/Debug/Models/Cube.obj"); | ||||
|     cube = Level1.AddEntity("cube"); | ||||
|     auto& render3DComponent = cube.AddComponent<BarinkEngine::Render3DComponent>(); | ||||
|     render3DComponent.mesh = *(Model->renderable->mesh); | ||||
|  | ||||
|     shader = new Shader(vertexShaderSource, fragmentShaderSource); | ||||
|     cube.GetComponent<BarinkEngine::TransformComponent>().transform = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f, 0.0f, 5.0f)); | ||||
|     renderer.Prepare(Level1); | ||||
|      | ||||
|  | ||||
|     // Create a cube node | ||||
|     // create an ambient light source | ||||
|     auto AmbientLight = Level1.AddEntity("AmbientLight"); | ||||
|     AmbientLight.AddComponent<BarinkEngine::LightComponent>(); | ||||
|  | ||||
|     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); | ||||
|     std::cout << "Colour attachment id; " << framebuffer->GetColourAttachment() << std::endl;    | ||||
|  | ||||
|     // 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; | ||||
|     renderer.Prepare(Level1); | ||||
|  | ||||
|     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() | ||||
| { | ||||
|  | ||||
|     ImGui::DockSpaceOverViewport(ImGui::GetMainViewport()); | ||||
| {   ImGui::DockSpaceOverViewport(ImGui::GetMainViewport()); | ||||
|       | ||||
|     // Show a menu bar | ||||
|     ImGui::BeginMainMenuBar(); | ||||
|  | ||||
|     if (ImGui::BeginMenu("Application")) { | ||||
|  | ||||
|         if (ImGui::MenuItem("Preferences")) { | ||||
|  | ||||
|         } | ||||
|  | ||||
|         if (ImGui::MenuItem("Exit")) { | ||||
|             // TODO: Exit application | ||||
|         } | ||||
|  | ||||
|  | ||||
|  | ||||
|         ImGui::EndMenu(); | ||||
|     } | ||||
|  | ||||
| @ -85,45 +81,43 @@ void ImmediateGraphicsDraw() | ||||
|  | ||||
|  | ||||
|     // Show internal BarinkEngine stats | ||||
|     ShowStats(); | ||||
|     //ShowStats(); | ||||
|     Viewport(*framebuffer , Level1); | ||||
|     Inspector(); | ||||
|     SceneExplorer(Level1); | ||||
|     Settings(); | ||||
|     AssetsFinder(); | ||||
|     Console(); | ||||
|  | ||||
|     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(); | ||||
|    ImGui::ShowMetricsWindow(); | ||||
|     | ||||
|  | ||||
| } | ||||
|  | ||||
| void Render()  | ||||
| { | ||||
|     renderer.Render( *framebuffer, Level1); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
| * 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 every physics update | ||||
| */ | ||||
| void fixed_update()  | ||||
| { | ||||
|      | ||||
| } | ||||
|  | ||||
| /* | ||||
| @ -133,6 +127,4 @@ void Update() | ||||
| void Stop() | ||||
| { | ||||
|     delete framebuffer; | ||||
|     delete MI; | ||||
|     delete shader; | ||||
| } | ||||
							
								
								
									
										79
									
								
								Editor/src/widgets/widgets.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Editor/src/widgets/widgets.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | ||||
| #pragma once | ||||
| #include <glm/glm.hpp> | ||||
| #include <imgui.h> | ||||
|  | ||||
| inline void Inspector ()  { | ||||
|     ImGui::Begin("Inspector"); | ||||
|     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::BeginChild("Camera"); | ||||
|  | ||||
|     ImGui::SliderFloat("Zoom", &Zoom, 10, 190); | ||||
|     ImGui::InputFloat3("Position:", &Position[0]); | ||||
|  | ||||
|     ImGui::InputFloat3("Rotation:", &Rotation[0]); | ||||
|     ImGui::EndChild(); | ||||
|  | ||||
|  | ||||
|     ImGui::BeginChild("Scripting"); | ||||
|     ImGui::Text("Hello world!"); | ||||
|     ImGui::EndChild(); | ||||
|     ImGui::End(); | ||||
| } | ||||
|  | ||||
| inline void SceneExplorer(Scene& scene)  | ||||
| { | ||||
|  | ||||
|     ImGui::Begin("Scene Explorer"); | ||||
|  | ||||
|     scene.getReg().each([&](auto entity) { | ||||
|         auto id = scene.getReg().get<BarinkEngine::IdentifierComponent>(entity); | ||||
|         ImGui::LabelText("##myObject", "%s", id.name.c_str()); | ||||
|         }); | ||||
|  | ||||
|  | ||||
|     ImGui::End(); | ||||
| } | ||||
|  | ||||
| inline void Viewport(Framebuffer& framebuffer , Scene& scene ) { | ||||
|  | ||||
|     unsigned int viewportWindowFlags = ImGuiWindowFlags_NoTitleBar  | ||||
|         | ImGuiWindowFlags_NoDecoration  | ||||
|         | ImGuiWindowFlags_NoScrollbar | ||||
|         | ImGuiWindowFlags_NoMove | ||||
|         | ImGuiWindowFlags_NoCollapse; | ||||
|  | ||||
|     ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 }); | ||||
|     ImGui::Begin("Viewport", false, viewportWindowFlags ); | ||||
|     ImGui::Image((void*)(intptr_t)framebuffer.GetColourAttachment(), ImVec2{ (float)800,(float)600 }); | ||||
|  | ||||
|     ImGuizmo::SetDrawlist(); | ||||
|     ImGuizmo::SetRect(ImGui::GetWindowPos().x, ImGui::GetWindowPos().y, ImGui::GetWindowWidth(), ImGui::GetWindowHeight()); | ||||
|     ImGuizmo::Enable(true); | ||||
|     auto cam = glm::mat4(1.0f); | ||||
|     //ImGuizmo::Manipulate(glm::value_ptr(static_cam), glm::value_ptr(static_projection), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(trans)); | ||||
|     ImGuizmo::ViewManipulate(glm::value_ptr(cam), 8.0f, ImVec2{ 0.0f,0.0f }, ImVec2{ 128.0f,128.0f }, 0x10101010); | ||||
|     ImGui::End(); | ||||
|     ImGui::PopStyleVar(); | ||||
|  | ||||
| } | ||||
|  | ||||
| inline void Settings() { | ||||
|     ImGui::Begin("Settings"); | ||||
|     ImGui::LabelText("##title-settings", "Fine grain control over your engine... "); | ||||
|     ImGui::End(); | ||||
| } | ||||
|  | ||||
| inline void Console() { | ||||
|     ImGui::Begin("Console", false ); | ||||
|     ImGui::Dummy(ImVec2{ 128, 128 }); | ||||
|     ImGui::End(); | ||||
| } | ||||
|  | ||||
| inline void AssetsFinder() { | ||||
|     ImGui::Begin("Asset-Finder", false ); | ||||
|     ImGui::Dummy(ImVec2{ 128, 128 }); | ||||
|     ImGui::End(); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user