201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
package electrosphere.renderer;
 | 
						|
 | 
						|
import org.joml.FrustumIntersection;
 | 
						|
import org.joml.Matrix4f;
 | 
						|
 | 
						|
import electrosphere.renderer.actor.instance.InstanceData;
 | 
						|
 | 
						|
/**
 | 
						|
 * Contains all the currently up to date state of how the render pipeline is configured.
 | 
						|
 * Used in lots of different places to pass information up/down the render pipeline call stack and configure variables for passes.
 | 
						|
 */
 | 
						|
public class RenderPipelineState {
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Enum of different phases of the pipeline
 | 
						|
     */
 | 
						|
    public static enum RenderPipelineStateEnum {
 | 
						|
        SHADOW_MAP,
 | 
						|
        MAIN_OIT,
 | 
						|
        MAIN_NON_TRANSPARENT,
 | 
						|
        NORMALS,
 | 
						|
        COMPOSITE,
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enum of different categories of shaders that can be selected
 | 
						|
     */
 | 
						|
    public static enum SelectedShaderEnum {
 | 
						|
        PRIMARY,
 | 
						|
        OIT,
 | 
						|
    }
 | 
						|
 | 
						|
    //The current phase of the render pipeline
 | 
						|
    RenderPipelineStateEnum state = RenderPipelineStateEnum.SHADOW_MAP;
 | 
						|
    //The currently selected category of shader for the current render pipeline phase
 | 
						|
    SelectedShaderEnum selectedShader = SelectedShaderEnum.PRIMARY;
 | 
						|
 | 
						|
    //Whether to use a mesh's default shader
 | 
						|
    boolean useMeshShader = false;
 | 
						|
    //Whether to buffer standard uniforms (model matrix, view matrix, etc)
 | 
						|
    boolean bufferStandardUniforms = false;
 | 
						|
    //Whether to buffer any nonstandard uniforms that may be in the mesh uniform map
 | 
						|
    boolean bufferNonStandardUniforms = false;
 | 
						|
    //Whether to use the material attached to the mesh or not
 | 
						|
    boolean useMaterial = false;
 | 
						|
    //Whether to use the shadow map or not
 | 
						|
    boolean useShadowMap = false;
 | 
						|
    //Whether to update and use bones
 | 
						|
    boolean useBones = false;
 | 
						|
    //Whether to use the light buffer or not
 | 
						|
    boolean useLight = false;
 | 
						|
    //Whether the current rendering call is of an instanced object
 | 
						|
    boolean instanced = false;
 | 
						|
    //The instance data for rendering an instanced object
 | 
						|
    InstanceData instanceData;
 | 
						|
    //the number of instances to draw
 | 
						|
    int instanceCount = 0;
 | 
						|
 | 
						|
    //The pointer to the current shader program bound
 | 
						|
    int currentShaderPointer;
 | 
						|
 | 
						|
    //Should actors frustum check (should be turned off in instancing for instance)
 | 
						|
    boolean frustumCheck = true;
 | 
						|
 | 
						|
    //JOML-provided object to perform frustum culling
 | 
						|
    FrustumIntersection frustumInt = new FrustumIntersection();
 | 
						|
 | 
						|
    public boolean getUseMeshShader(){
 | 
						|
        return this.useMeshShader;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUseMeshShader(boolean useMeshShader){
 | 
						|
        this.useMeshShader = useMeshShader;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getBufferStandardUniforms(){
 | 
						|
        return this.bufferStandardUniforms;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setBufferStandardUniforms(boolean bufferStandardUniforms){
 | 
						|
        this.bufferStandardUniforms = bufferStandardUniforms;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getBufferNonStandardUniforms(){
 | 
						|
        return this.bufferNonStandardUniforms;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setBufferNonStandardUniforms(boolean bufferNonStandardUniforms){
 | 
						|
        this.bufferNonStandardUniforms = bufferNonStandardUniforms;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getUseMaterial(){
 | 
						|
        return this.useMaterial;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUseMaterial(boolean useMaterial){
 | 
						|
        this.useMaterial = useMaterial;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getUseShadowMap(){
 | 
						|
        return this.useShadowMap;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUseShadowMap(boolean useShadowMap){
 | 
						|
        this.useShadowMap = useShadowMap;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getUseBones(){
 | 
						|
        return useBones;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUseBones(boolean useBones){
 | 
						|
        this.useBones = useBones;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getUseLight(){
 | 
						|
        return this.useLight;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUseLight(boolean useLight){
 | 
						|
        this.useLight = useLight;
 | 
						|
    }
 | 
						|
 | 
						|
    public SelectedShaderEnum getSelectedShader(){
 | 
						|
        return selectedShader;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setSelectedShader(SelectedShaderEnum selectedShader){
 | 
						|
        this.selectedShader = selectedShader;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean getInstanced(){
 | 
						|
        return this.instanced;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setInstanced(boolean instanced){
 | 
						|
        this.instanced = instanced;
 | 
						|
    }
 | 
						|
 | 
						|
    public InstanceData getInstanceData(){
 | 
						|
        return this.instanceData;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setInstanceData(InstanceData instanceData){
 | 
						|
        this.instanceData = instanceData;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setInstanceCount(int count){
 | 
						|
        this.instanceCount = count;
 | 
						|
    }
 | 
						|
 | 
						|
    public int getInstanceCount(){
 | 
						|
        return this.instanceCount;
 | 
						|
    }
 | 
						|
 | 
						|
    public int getCurrentShaderPointer(){
 | 
						|
        return currentShaderPointer;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setCurrentShaderPointer(int currentShaderPointer){
 | 
						|
        this.currentShaderPointer = currentShaderPointer;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Updates the frustum intersection with the provided projection and view matrices
 | 
						|
     * @param projectionMatrix the projection matrix
 | 
						|
     * @param viewMatrix the view matrix
 | 
						|
     */
 | 
						|
    public void updateFrustumIntersection(Matrix4f projectionMatrix, Matrix4f viewMatrix){
 | 
						|
        Matrix4f projectionViewMatrix = new Matrix4f();
 | 
						|
        projectionViewMatrix.set(projectionMatrix);
 | 
						|
        projectionViewMatrix.mul(viewMatrix);
 | 
						|
        this.frustumInt.set(projectionViewMatrix);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the current render pipeline's frustum intersection object
 | 
						|
     * @return The frustum intersection object
 | 
						|
     */
 | 
						|
    public FrustumIntersection getFrustumIntersection(){
 | 
						|
        return frustumInt;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets whether actors should frustum check or not
 | 
						|
     * @param frustumCheck if true, will frustum check, otherwise will not
 | 
						|
     */
 | 
						|
    public void setFrustumCheck(boolean frustumCheck){
 | 
						|
        this.frustumCheck = frustumCheck;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns whether actors should frustum check or not
 | 
						|
     * @return If true, frustum check, otherwise do not
 | 
						|
     */
 | 
						|
    public boolean shouldFrustumCheck(){
 | 
						|
        return this.frustumCheck;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |