65 lines
2.8 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|