Renderer/src/main/java/electrosphere/renderer/ui/UIUtils.java
austin 3c64166798
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
ui work, entity packet fix
2024-09-16 17:05:53 -04:00

65 lines
2.8 KiB
Java

package electrosphere.renderer.ui;
import org.joml.Vector3f;
import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface;
import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderPipelineState;
import electrosphere.renderer.RenderingEngine;
import electrosphere.renderer.model.Material;
import electrosphere.renderer.model.Model;
import electrosphere.renderer.ui.elementtypes.ContainerElement;
import electrosphere.renderer.ui.elementtypes.Element;
/**
* Utilities for working with the ui
*/
public class UIUtils {
//the material that links the texture to draw
static Material customMat = new Material("Textures/ui/uiOutline1.png");
/**
* Renders the outline of the provided element and all child elements of the rootEl
* @param rootEl The top level element to parse downwards from
*/
public static void renderOutlineTree(OpenGLState openGLState, RenderPipelineState renderPipelineState, Element rootEl){
//draw this element
float ndcWidth = (float)rootEl.getWidth()/Globals.WINDOW_WIDTH;
float ndcHeight = (float)rootEl.getHeight()/Globals.WINDOW_HEIGHT;
float ndcX = (float)(rootEl.getAbsoluteX())/Globals.WINDOW_WIDTH;
float ndcY = (float)(rootEl.getAbsoluteY())/Globals.WINDOW_HEIGHT;
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
Vector3f texPosition = new Vector3f(1,1,0);
Vector3f texScale = new Vector3f(ndcWidth,ndcHeight,0);
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
openGLState.setActiveShader(renderPipelineState, RenderingEngine.screenTextureShaders);
openGLState.glViewport(Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
renderPipelineState.setUseMaterial(true);
renderPipelineState.setBufferNonStandardUniforms(true);
if(planeModel != null){
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
planeModel.getMeshes().get(0).setMaterial(customMat);
planeModel.drawUI();
} else {
LoggerInterface.loggerRenderer.ERROR("Image Panel unable to find plane model!!", new Exception());
}
//draw children
if(rootEl instanceof ContainerElement){
ContainerElement containerView = (ContainerElement)rootEl;
for(Element child : containerView.getChildren()){
renderOutlineTree(openGLState, renderPipelineState, child);
}
}
}
}