imgui work
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-03-06 22:04:39 -05:00
parent 7a8f40a1b7
commit 62e727cdea
6 changed files with 89 additions and 12 deletions

View File

@ -14,7 +14,12 @@ Size=775,335
Collapsed=0
[Window][Frametime Graph]
Pos=1345,20
Pos=1308,4
Size=566,324
Collapsed=0
[Window][Debug]
Pos=10,9
Size=178,77
Collapsed=0

View File

@ -96,6 +96,9 @@ public class Globals {
//Core Engine signals
//
public static boolean ENGINE_SHUTDOWN_FLAG = false;
//main debug flag
//current enables imgui debug menu or not
public static boolean ENGINE_DEBUG = true;
//

View File

@ -181,7 +181,7 @@ public class Main {
//init imgui debug windows
if(Globals.RUN_CLIENT && !Globals.HEADLESS){
ImGuiWindowMacros.createFramerateGraph();
ImGuiWindowMacros.initImGuiWindows();
}
//fire off a loading thread for the title menus/screen
@ -244,7 +244,7 @@ public class Main {
// track total frametiime in debug graph
//
if(captureFramerate){
ImGuiWindowMacros.addFramerateDatapoint("totalframerate",deltaTime);
ImGuiWindowMacros.addFramerateDatapoint("totalframerate",deltaTime * 1000);
}
@ -303,7 +303,7 @@ public class Main {
ClientFunctions.runClientFunctions();
}
if(!Globals.HEADLESS && captureFramerate){
ImGuiWindowMacros.addFramerateDatapoint("clientsim",glfwGetTime()-functionTrackTimeStart);
ImGuiWindowMacros.addFramerateDatapoint("clientsim",(glfwGetTime()-functionTrackTimeStart)*1000);
}
@ -333,7 +333,7 @@ public class Main {
Globals.macroSimulation.simulate();
}
if(!Globals.HEADLESS && captureFramerate){
ImGuiWindowMacros.addFramerateDatapoint("serversim",glfwGetTime()-functionTrackTimeStart);
ImGuiWindowMacros.addFramerateDatapoint("serversim",(glfwGetTime()-functionTrackTimeStart)*1000);
}
@ -349,7 +349,7 @@ public class Main {
Globals.renderingEngine.drawScreen();
}
if(!Globals.HEADLESS && captureFramerate){
ImGuiWindowMacros.addFramerateDatapoint("render",glfwGetTime()-functionTrackTimeStart);
ImGuiWindowMacros.addFramerateDatapoint("render",(glfwGetTime()-functionTrackTimeStart)*1000);
}

View File

@ -62,6 +62,7 @@ import static org.lwjgl.system.MemoryUtil.NULL;
import java.nio.IntBuffer;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.joml.Matrix4d;
import org.joml.Matrix4f;
@ -143,7 +144,7 @@ public class RenderingEngine {
//if set to true, will render imgui windows
private static boolean imGuiShouldRender = true;
//All imgui windows that should be displayed
private static List<ImGuiWindow> imGuiWindows = new LinkedList<ImGuiWindow>();
private static List<ImGuiWindow> imGuiWindows = new CopyOnWriteArrayList<ImGuiWindow>();

View File

@ -16,6 +16,9 @@ public class ImGuiWindow {
//The elements housed within this window
List<ImGuiElement> elements = new LinkedList<ImGuiElement>();
//Optional callback for the window
ImGuiWindowCallback callback = null;
/**
* Creates the window
*/
@ -38,6 +41,14 @@ public class ImGuiWindow {
this.elements.remove(element);
}
/**
* Sets the callback for the window
* @param callback The callback
*/
public void setCallback(ImGuiWindowCallback callback){
this.callback = callback;
}
/**
* Draws this window
*/
@ -48,7 +59,22 @@ public class ImGuiWindow {
element.draw();
}
if(callback != null){
callback.exec();
}
ImGui.end();
}
/**
* An optional callback for the window that lets you directly call imgui functions
*/
public static interface ImGuiWindowCallback {
/**
* The actual callback function
*/
public void exec();
}
}

View File

@ -5,6 +5,8 @@ import java.util.Map;
import electrosphere.renderer.RenderingEngine;
import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import imgui.ImGui;
/**
* Various methods for creating specific imgui windows in engine
@ -12,23 +14,41 @@ import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
public class ImGuiWindowMacros {
//Framerate graph
private static ImGuiWindow imGuiWindow;
private static ImGuiWindow framerateWindow;
private static ImGuiLinePlot plot;
private static Map<String,ImGuiLinePlotDataset> dataSetMap;
//main debug menu
private static ImGuiWindow mainDebugWindow;
/**
* Initializes imgui windows
*/
public static void initImGuiWindows(){
createMainDebugMenu();
createFramerateGraph();
}
/**
* Creates a framerate graph
*/
public static void createFramerateGraph(){
imGuiWindow = new ImGuiWindow("Frametime Graph");
private static void createFramerateGraph(){
framerateWindow = new ImGuiWindow("Frametime Graph");
plot = new ImGuiLinePlot("Frametime plot");
dataSetMap = new HashMap<String,ImGuiLinePlotDataset>();
initFramerateGraphSeries("totalframerate");
initFramerateGraphSeries("serversim");
initFramerateGraphSeries("clientsim");
initFramerateGraphSeries("render");
imGuiWindow.addElement(plot);
RenderingEngine.addImGuiWindow(imGuiWindow);
framerateWindow.addElement(plot);
framerateWindow.setCallback(new ImGuiWindowCallback() {
@Override
public void exec() {
if(ImGui.button("Close")){
RenderingEngine.removeImGuiWindow(framerateWindow);
}
}
});
}
/**
@ -55,4 +75,26 @@ public class ImGuiWindowMacros {
}
}
/**
* Inits the main debug menu
*/
private static void createMainDebugMenu(){
mainDebugWindow = new ImGuiWindow("Debug");
mainDebugWindow.callback = new ImGuiWindowCallback() {
@Override
public void exec() {
//show framerate graph
if(ImGui.button("Show Overall Frametime")){
RenderingEngine.addImGuiWindow(framerateWindow);
}
//close button
if(ImGui.button("Close")){
RenderingEngine.removeImGuiWindow(mainDebugWindow);
}
}
};
RenderingEngine.addImGuiWindow(mainDebugWindow);
}
}