Improving the editor, ImGuizmo is now rendering guizmo's
- Added Guzimo's to the sceneview - Added new menu to the menubar - Improved multiple widgets (ImGui windows) - Added a new RuntimeControl widget (ImGui window) - New Screenshots
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#include "../../YoggieEngine/src/EntryPoint.h"
|
||||
#include "../../YoggieEngine/src/AssetManager/ModelImporter.h"
|
||||
#include "../../YoggieEngine/src/Physics/Physics.h"
|
||||
|
||||
#include <nfd.h>
|
||||
|
||||
@ -18,105 +19,64 @@
|
||||
const unsigned int MS_PER_UPDATE = 2;
|
||||
void CreateTestProject(std::unique_ptr<Project>& project, Scene& scene);
|
||||
|
||||
RendererConfig EditorSceneRendererConfig{
|
||||
1200, // Screen Width
|
||||
700, // Screen Height
|
||||
glm::vec3{0,0,0}, // Clear Color
|
||||
true // Depth testing
|
||||
};
|
||||
|
||||
class Editor : public Application {
|
||||
public:
|
||||
Editor() : Application("Editor"){
|
||||
}
|
||||
|
||||
void Run() override
|
||||
Editor()
|
||||
: Application("Editor"),
|
||||
AppWindow(1200,700),
|
||||
framebuffer(new Framebuffer(1200,700)),
|
||||
viewportRenderer(EditorSceneRendererConfig),
|
||||
EditorGUIRenderer(AppWindow),
|
||||
Selected((entt::entity)-1)
|
||||
{
|
||||
|
||||
auto NativeEditorWindow = NativeWindow(1200, 700);
|
||||
|
||||
framebuffer = new Framebuffer(800, 600);
|
||||
auto renderer = Renderer(RendererConfig{
|
||||
1200, // Screen Width
|
||||
700, // Screen Height
|
||||
glm::vec3{0,0,0}, // Clear Color
|
||||
true // Depth testing
|
||||
});
|
||||
|
||||
auto GuiRenderer = GUIRenderer(NativeEditorWindow);
|
||||
|
||||
Selected = (entt::entity)-1;
|
||||
|
||||
CreateTestProject(CurrentProject, ActiveScene);
|
||||
|
||||
ActiveScene.Start();
|
||||
|
||||
renderer.setCurrentFrameBuffer(*framebuffer);
|
||||
|
||||
|
||||
double previous = glfwGetTime();
|
||||
double lag = 0.0;
|
||||
while (!NativeEditorWindow.WindowShouldClose())
|
||||
{
|
||||
|
||||
double current = glfwGetTime();
|
||||
double elapsed = current - previous;
|
||||
previous = current;
|
||||
lag += elapsed;
|
||||
|
||||
NativeEditorWindow.Poll();
|
||||
|
||||
while (lag >= MS_PER_UPDATE)
|
||||
{
|
||||
ActiveScene.Update();
|
||||
lag -= MS_PER_UPDATE;
|
||||
}
|
||||
|
||||
// submit DrawCommands for all render3DComponents
|
||||
|
||||
auto group = ActiveScene.getReg().view<TransformComponent, Render3DComponent>();
|
||||
group.each([&renderer](auto enity, TransformComponent& t, Render3DComponent& renderComponent) {
|
||||
renderer.Submit(renderComponent, t);
|
||||
});
|
||||
|
||||
|
||||
|
||||
renderer.Render();
|
||||
|
||||
GuiRenderer.Begin();
|
||||
RenderGUI();
|
||||
GuiRenderer.End();
|
||||
|
||||
NativeEditorWindow.SwapBuffers();
|
||||
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
delete framebuffer;
|
||||
ActiveScene.Stop();
|
||||
|
||||
viewportRenderer.setCurrentFrameBuffer(*framebuffer);
|
||||
}
|
||||
|
||||
|
||||
void RenderGUI() {
|
||||
void RenderScene() {
|
||||
// submit DrawCommands for all render3DComponents
|
||||
auto group = ActiveScene.getReg().view<TransformComponent, Render3DComponent>();
|
||||
group.each([&](auto enity, TransformComponent& t, Render3DComponent& renderComponent) {
|
||||
viewportRenderer.Submit(renderComponent, t);
|
||||
});
|
||||
|
||||
viewportRenderer.Render();
|
||||
}
|
||||
|
||||
void RenderEditorGUI() {
|
||||
EditorGUIRenderer.Begin();
|
||||
ImGui::DockSpaceOverViewport(ImGui::GetMainViewport());
|
||||
|
||||
// Show a menu bar
|
||||
{
|
||||
MainMenuBar menuBar= MainMenuBar();
|
||||
MainMenuBar menuBar = MainMenuBar();
|
||||
menuBar.ApplicationMenu(CurrentProject);
|
||||
menuBar.SceneMenu(CurrentProject, ActiveScene);
|
||||
/*menuBar.SelectMenu();
|
||||
menuBar.SelectMenu();
|
||||
menuBar.WindowMenu();
|
||||
menuBar.DebugMenu();
|
||||
menuBar.Help();
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
ProjectInfo projectInfo(*(CurrentProject.get()));
|
||||
ProjectInfo projectInfo(*(CurrentProject.get()));
|
||||
}
|
||||
|
||||
{
|
||||
Viewport sceneview = Viewport(*framebuffer);
|
||||
Viewport sceneview = Viewport(*framebuffer, viewportRenderer.getCamera());
|
||||
}
|
||||
|
||||
{
|
||||
RuntimeControls rc = RuntimeControls();
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
SceneExplorer explorer(Selected, ActiveScene);
|
||||
}
|
||||
@ -132,14 +92,14 @@ public:
|
||||
}
|
||||
|
||||
{
|
||||
Settings settings();
|
||||
Settings settings = Settings();
|
||||
}
|
||||
|
||||
{
|
||||
// AssetFinder assetsView = AssetFinder();
|
||||
// AssetFinder assetsView = AssetFinder();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
Console console = Console();
|
||||
console.Show();
|
||||
@ -147,15 +107,74 @@ public:
|
||||
|
||||
ImGui::ShowDemoWindow();
|
||||
ImGui::ShowMetricsWindow();
|
||||
EditorGUIRenderer.End();
|
||||
}
|
||||
|
||||
void Run() override
|
||||
{
|
||||
CreateTestProject(CurrentProject, ActiveScene);
|
||||
ActiveScene.Start();
|
||||
|
||||
|
||||
// Create the physics engine demo!
|
||||
Physics Physics;
|
||||
//Physics.Demo();
|
||||
|
||||
|
||||
double previous = glfwGetTime();
|
||||
double lag = 0.0;
|
||||
while (!AppWindow.WindowShouldClose())
|
||||
{
|
||||
|
||||
double current = glfwGetTime();
|
||||
double elapsed = current - previous;
|
||||
previous = current;
|
||||
lag += elapsed;
|
||||
|
||||
AppWindow.Poll();
|
||||
|
||||
if (SimulatePhysics)
|
||||
{
|
||||
Physics.Step(1.0f / 60.0f);
|
||||
}
|
||||
|
||||
|
||||
while (lag >= MS_PER_UPDATE)
|
||||
{
|
||||
ActiveScene.Update();
|
||||
lag -= MS_PER_UPDATE;
|
||||
}
|
||||
|
||||
RenderScene();
|
||||
|
||||
RenderEditorGUI();
|
||||
|
||||
AppWindow.SwapBuffers();
|
||||
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
|
||||
}
|
||||
|
||||
delete framebuffer;
|
||||
ActiveScene.Stop();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
NativeWindow AppWindow;
|
||||
|
||||
Framebuffer* framebuffer;
|
||||
Renderer viewportRenderer;
|
||||
|
||||
GUIRenderer EditorGUIRenderer;
|
||||
|
||||
// Editor State
|
||||
bool SimulatePhysics = false;
|
||||
entt::entity Selected;
|
||||
|
||||
std::unique_ptr<Project> CurrentProject;
|
||||
Scene ActiveScene;
|
||||
entt::entity Selected;
|
||||
Framebuffer* framebuffer ;
|
||||
|
||||
|
||||
};
|
||||
@ -180,7 +199,7 @@ void CreateTestProject(std::unique_ptr<Project>& project, Scene& scene ) {
|
||||
|
||||
// Create a cube
|
||||
auto model = importer.Import("build/Debug/Models/Cube.obj");
|
||||
auto cube = scene.AddEntity("cube");
|
||||
auto cube = scene.AddEntity("Cube");
|
||||
|
||||
auto& render3DComponent = cube.AddComponent<Render3DComponent>();
|
||||
render3DComponent.mesh = *(model->renderable->mesh);
|
||||
|
Reference in New Issue
Block a user