202 lines
5.7 KiB
Java
202 lines
5.7 KiB
Java
package electrosphere.renderer;
|
|
|
|
import org.joml.FrustumIntersection;
|
|
import org.joml.Matrix4d;
|
|
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(Matrix4d 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;
|
|
}
|
|
|
|
}
|