Work on debugging tools for ui
This commit is contained in:
parent
2049692634
commit
9da0215d29
@ -337,6 +337,7 @@ public class Globals {
|
||||
public static boolean RENDER_FLAG_RENDER_BLACK_BACKGROUND = true;
|
||||
public static boolean RENDER_FLAG_RENDER_WHITE_BACKGROUND = false;
|
||||
public static boolean RENDER_FLAG_RENDER_UI = true;
|
||||
public static boolean RENDER_FLAG_RENDER_UI_BOUNDS = true;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@ import electrosphere.main.Globals;
|
||||
import static electrosphere.renderer.RenderUtils.createScreenTextureVAO;
|
||||
|
||||
import electrosphere.renderer.actor.Actor;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.framebuffer.Renderbuffer;
|
||||
@ -514,7 +515,12 @@ public class RenderingEngine {
|
||||
renderUI();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Render boundaries of ui elements
|
||||
*/
|
||||
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS){
|
||||
DebugRendering.drawUIBounds();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
162
src/main/java/electrosphere/renderer/debug/DebugRendering.java
Normal file
162
src/main/java/electrosphere/renderer/debug/DebugRendering.java
Normal file
@ -0,0 +1,162 @@
|
||||
package electrosphere.renderer.debug;
|
||||
|
||||
import electrosphere.engine.assetmanager.AssetDataStrings;
|
||||
import electrosphere.logger.LoggerInterface;
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.Model;
|
||||
import electrosphere.renderer.RenderingEngine;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MINOR;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_CURSOR;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_CURSOR_DISABLED;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_CORE_PROFILE;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_PROFILE;
|
||||
import static org.lwjgl.glfw.GLFW.glfwCreateWindow;
|
||||
import static org.lwjgl.glfw.GLFW.glfwInit;
|
||||
import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent;
|
||||
import static org.lwjgl.glfw.GLFW.glfwMaximizeWindow;
|
||||
import static org.lwjgl.glfw.GLFW.glfwPollEvents;
|
||||
import static org.lwjgl.glfw.GLFW.glfwSetInputMode;
|
||||
import static org.lwjgl.glfw.GLFW.glfwSwapBuffers;
|
||||
import static org.lwjgl.glfw.GLFW.glfwTerminate;
|
||||
import static org.lwjgl.glfw.GLFW.glfwWindowHint;
|
||||
import static org.lwjgl.glfw.GLFW.glfwGetPrimaryMonitor;
|
||||
import org.lwjgl.glfw.GLFWWindowSizeCallbackI;
|
||||
import org.lwjgl.opengl.GL;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
import org.lwjgl.opengl.GL20;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_BLEND;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST;
|
||||
import static org.lwjgl.opengl.GL11.GL_EXP2;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG_COLOR;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG_DENSITY;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG_END;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG_MODE;
|
||||
import static org.lwjgl.opengl.GL11.GL_FOG_START;
|
||||
import static org.lwjgl.opengl.GL11.GL_LINEAR;
|
||||
import static org.lwjgl.opengl.GL11.GL_NEAREST;
|
||||
import static org.lwjgl.opengl.GL11.GL_LESS;
|
||||
import static org.lwjgl.opengl.GL11.GL_LEQUAL;
|
||||
import static org.lwjgl.opengl.GL11.GL_EQUAL;
|
||||
import static org.lwjgl.opengl.GL11.GL_GREATER;
|
||||
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
|
||||
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
|
||||
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
|
||||
import static org.lwjgl.opengl.GL11.GL_TRIANGLES;
|
||||
import static org.lwjgl.opengl.GL11.GL_FALSE;
|
||||
import static org.lwjgl.opengl.GL11.GL_ONE;
|
||||
import static org.lwjgl.opengl.GL11.GL_ZERO;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR;
|
||||
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_COLOR;
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
import static org.lwjgl.opengl.GL11.GL_FRONT;
|
||||
import static org.lwjgl.opengl.GL11.GL_FRONT_AND_BACK;
|
||||
import static org.lwjgl.opengl.GL11.GL_LINE;
|
||||
import static org.lwjgl.opengl.GL11.GL_FILL;
|
||||
import static org.lwjgl.opengl.GL11.glDepthFunc;
|
||||
import static org.lwjgl.opengl.GL11.glDepthMask;
|
||||
import static org.lwjgl.opengl.GL11.glBindTexture;
|
||||
import static org.lwjgl.opengl.GL11.glBlendFunc;
|
||||
import static org.lwjgl.opengl.GL11.glClear;
|
||||
import static org.lwjgl.opengl.GL11.glClearColor;
|
||||
import static org.lwjgl.opengl.GL11.glDisable;
|
||||
import static org.lwjgl.opengl.GL11.glDrawArrays;
|
||||
import static org.lwjgl.opengl.GL11.glEnable;
|
||||
import static org.lwjgl.opengl.GL11.glFogf;
|
||||
import static org.lwjgl.opengl.GL11.glViewport;
|
||||
import static org.lwjgl.opengl.GL11.glCullFace;
|
||||
import static org.lwjgl.opengl.GL11.glPolygonMode;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE0;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE1;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE2;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE3;
|
||||
import static org.lwjgl.opengl.GL13.glActiveTexture;
|
||||
import static org.lwjgl.opengl.GL14.GL_FUNC_ADD;
|
||||
import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
import static org.lwjgl.opengl.GL20.glUniformMatrix4fv;
|
||||
import static org.lwjgl.opengl.GL20.glUseProgram;
|
||||
import static org.lwjgl.opengl.GL20.glUniform1f;
|
||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
||||
import static org.lwjgl.opengl.GL30.GL_RENDERBUFFER;
|
||||
import static org.lwjgl.opengl.GL30.GL_COLOR_ATTACHMENT0;
|
||||
import static org.lwjgl.opengl.GL30.GL_COLOR_ATTACHMENT1;
|
||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
||||
import static org.lwjgl.opengl.GL30.glBindRenderbuffer;
|
||||
import static org.lwjgl.opengl.GL30.glBindVertexArray;
|
||||
import static org.lwjgl.opengl.GL30.glBlitFramebuffer;
|
||||
import static org.lwjgl.opengl.GL30.glClearBufferfv;
|
||||
import static org.lwjgl.opengl.GL40.glBlendFunci;
|
||||
import static org.lwjgl.opengl.GL40.glBlendEquation;
|
||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||
|
||||
import org.joml.Vector3f;
|
||||
|
||||
|
||||
public class DebugRendering {
|
||||
|
||||
public static void drawUIBounds(){
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
for(Element currentElement : Globals.elementManager.getWindowList()){
|
||||
if(currentElement instanceof DrawableElement){
|
||||
DrawableElement drawable = (DrawableElement) currentElement;
|
||||
if(drawable.getVisible()){
|
||||
drawable.draw(RenderingEngine.GL_DEFAULT_FRAMEBUFFER, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
drawRect(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
||||
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
}
|
||||
|
||||
static void drawRect(int posX, int posY, int width, int height, int parentWidth, int parentHeight){
|
||||
float ndcX = (float)posX/parentWidth;
|
||||
float ndcY = (float)posY/parentHeight;
|
||||
float ndcWidth = (float)width/parentWidth;
|
||||
float ndcHeight = (float)height/parentHeight;
|
||||
|
||||
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||
|
||||
Model planeModel = Globals.assetManager.fetchModel(ImagePanel.imagePanelModelPath);
|
||||
if(planeModel != null){
|
||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||
planeModel.drawUI();
|
||||
} else {
|
||||
LoggerInterface.loggerRenderer.ERROR("DebugRendering.drawRect unable to find plane model!!", new Exception());
|
||||
}
|
||||
}
|
||||
|
||||
public static void dumpUITree(){
|
||||
for(Element currentElement : Globals.elementManager.getWindowList()){
|
||||
dumpUITree(currentElement, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void dumpUITree(Element currentElement, int increment){
|
||||
for(int i = 0; i < increment; i++){
|
||||
System.out.print(" ");
|
||||
}
|
||||
System.out.println(currentElement.getClass() + " pos:(" + currentElement.getPositionX() + "," + currentElement.getPositionY() + ") dims:(" + currentElement.getWidth() + "," + currentElement.getHeight() + ")");
|
||||
if(currentElement instanceof ContainerElement){
|
||||
ContainerElement container = (ContainerElement)currentElement;
|
||||
for(Element child : container.getChildren()){
|
||||
dumpUITree(child,increment+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user