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);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |