Renderer/src/main/java/electrosphere/renderer/pipelines/MainContentNoOITPipeline.java
austin 8408d84055
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
massive entity spawning refactor
2024-09-12 18:51:51 -04:00

85 lines
3.4 KiB
Java

package electrosphere.renderer.pipelines;
import org.joml.Vector3d;
import org.joml.Vector3f;
import org.lwjgl.opengl.GL40;
import electrosphere.client.entity.camera.CameraEntityUtils;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityTags;
import electrosphere.entity.EntityUtils;
import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderPipelineState;
import electrosphere.renderer.RenderingEngine;
import electrosphere.renderer.actor.Actor;
/**
* The main content render pipeline without oit passes
*/
public class MainContentNoOITPipeline implements RenderPipeline {
@Override
public void render(OpenGLState openGLState, RenderPipelineState renderPipelineState) {
Globals.profiler.beginCpuSample("MainContentNoOITPipeline.render");
//bind screen fbo
RenderingEngine.screenFramebuffer.bind(openGLState);
openGLState.glDepthTest(true);
openGLState.glDepthFunc(GL40.GL_LESS);
GL40.glDepthMask(true);
openGLState.glViewport(Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY());
openGLState.glBlend(true);
openGLState.glBlendFunci(0, GL40.GL_ONE, GL40.GL_ONE);
openGLState.glBlendFunci(1, GL40.GL_ZERO, GL40.GL_ONE_MINUS_SRC_COLOR);
GL40.glBlendEquation(GL40.GL_FUNC_ADD);
///
/// R E N D E R I N G S T U F F
///
//Sets the background color.
GL40.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL40.glClear(GL40.GL_COLOR_BUFFER_BIT | GL40.GL_DEPTH_BUFFER_BIT);
//
// Set render pipeline state
//
renderPipelineState.setUseMeshShader(true);
renderPipelineState.setBufferStandardUniforms(true);
renderPipelineState.setBufferNonStandardUniforms(false);
renderPipelineState.setUseMaterial(true);
renderPipelineState.setUseShadowMap(true);
renderPipelineState.setUseBones(true);
renderPipelineState.setUseLight(true);
//
// D R A W A L L E N T I T I E S
//
for(Entity currentEntity : Globals.clientScene.getEntitiesWithTag(EntityTags.DRAWABLE)){
Vector3d position = EntityUtils.getPosition(currentEntity);
if(
(boolean)currentEntity.getData(EntityDataStrings.DATA_STRING_DRAW)
){
//fetch actor
Actor currentActor = EntityUtils.getActor(currentEntity);
//calculate camera-modified vector3f
Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
//calculate and apply model transform
RenderingEngine.modelTransformMatrix.identity();
RenderingEngine.modelTransformMatrix.translate(cameraModifiedPosition);
RenderingEngine.modelTransformMatrix.rotate(EntityUtils.getRotation(currentEntity));
RenderingEngine.modelTransformMatrix.scale(new Vector3d(EntityUtils.getScale(currentEntity)));
currentActor.applySpatialData(RenderingEngine.modelTransformMatrix,position);
//draw
currentActor.draw(renderPipelineState,openGLState);
}
}
Globals.profiler.endCpuSample();
}
}