wip defered translucency

This commit is contained in:
mcrcortex
2025-12-18 10:38:07 +10:00
parent 86ce0c0f98
commit bc995f9c0f
5 changed files with 22 additions and 5 deletions

View File

@@ -58,17 +58,20 @@ public abstract class AbstractRenderPipeline extends TrackedObject {
public final DepthFramebuffer fb = new DepthFramebuffer(GL_DEPTH24_STENCIL8);
protected final boolean deferTranslucency;
private static final int DEPTH_SAMPLER = glGenSamplers();
static {
glSamplerParameteri(DEPTH_SAMPLER, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glSamplerParameteri(DEPTH_SAMPLER, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
protected AbstractRenderPipeline(AsyncNodeManager nodeManager, NodeCleaner nodeCleaner, HierarchicalOcclusionTraverser traversal, BooleanSupplier frexSupplier) {
protected AbstractRenderPipeline(AsyncNodeManager nodeManager, NodeCleaner nodeCleaner, HierarchicalOcclusionTraverser traversal, BooleanSupplier frexSupplier, boolean deferTranslucency) {
this.frexStillHasWork = frexSupplier;
this.nodeManager = nodeManager;
this.nodeCleaner = nodeCleaner;
this.traversal = traversal;
this.deferTranslucency = deferTranslucency;
}
//Allows pipelines to configure model baking system
@@ -107,7 +110,9 @@ public abstract class AbstractRenderPipeline extends TrackedObject {
this.postOpaquePreTranslucent(viewport);
rs.renderTranslucent(viewport);
if (!this.deferTranslucency) {
rs.renderTranslucent(viewport);
}
this.finish(viewport, sourceFrameBuffer, srcWidth, srcHeight);
glBindFramebuffer(GL_FRAMEBUFFER, sourceFrameBuffer);

View File

@@ -31,7 +31,7 @@ public class IrisVoxyRenderPipeline extends AbstractRenderPipeline {
private final GlBuffer shaderUniforms;
public IrisVoxyRenderPipeline(IrisVoxyRenderPipelineData data, AsyncNodeManager nodeManager, NodeCleaner nodeCleaner, HierarchicalOcclusionTraverser traversal, BooleanSupplier frexSupplier) {
super(nodeManager, nodeCleaner, traversal, frexSupplier);
super(nodeManager, nodeCleaner, traversal, frexSupplier, data.shouldDeferTranslucency());
this.data = data;
if (this.data.thePipeline != null) {
throw new IllegalStateException("Pipeline data already bound");

View File

@@ -46,7 +46,7 @@ public class NormalRenderPipeline extends AbstractRenderPipeline {
.compile();
protected NormalRenderPipeline(AsyncNodeManager nodeManager, NodeCleaner nodeCleaner, HierarchicalOcclusionTraverser traversal, BooleanSupplier frexSupplier) {
super(nodeManager, nodeCleaner, traversal, frexSupplier);
super(nodeManager, nodeCleaner, traversal, frexSupplier, false);
this.useEnvFog = VoxyConfig.CONFIG.useEnvironmentalFog;
this.finalBlit = new FullscreenBlit("voxy:post/blit_texture_depth_cutout.frag",
a->a.defineIf("USE_ENV_FOG", this.useEnvFog).define("EMIT_COLOUR"));

View File

@@ -26,7 +26,6 @@ public class IrisShaderPatch {
public static final boolean IMPERSONATE_DISTANT_HORIZONS = System.getProperty("voxy.impersonateDHShader", "false").equalsIgnoreCase("true");
private static final class SSBODeserializer implements JsonDeserializer<Int2ObjectOpenHashMap<String>> {
@Override
public Int2ObjectOpenHashMap<String> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@@ -176,6 +175,7 @@ public class IrisShaderPatch {
public boolean excludeLodsFromVanillaDepth;
public float[] renderScale;
public boolean useViewportDims;
//public boolean deferTranslucentRendering;
public String checkValid() {
if (this.blending != null) {
int i = 0;
@@ -268,6 +268,10 @@ public class IrisShaderPatch {
return new float[]{Math.max(0.01f,this.patchData.renderScale[0]),Math.max(0.01f,this.patchData.renderScale[1])};
}
public boolean deferedTranslucentRendering() {
return false;//this.patchData.deferTranslucentRendering;
}
public Runnable createBlendSetup() {
if (this.patchData.blending == null || this.patchData.blending.isEmpty()) {
return ()->{};//No blending change

View File

@@ -51,6 +51,7 @@ public class IrisVoxyRenderPipelineData {
public final float[] resolutionScale;
public final String TAA;
public final boolean useViewportDims;
public final boolean deferTranslucency;
private IrisVoxyRenderPipelineData(IrisShaderPatch patch, int[] opaqueDrawTargets, int[] translucentDrawTargets, StructLayout uniformSet, Runnable blendingSetup, ImageSet imageSet, SSBOSet ssboSet) {
this.opaqueDrawTargets = opaqueDrawTargets;
@@ -65,6 +66,7 @@ public class IrisVoxyRenderPipelineData {
this.TAA = patch.getTAAShift();
this.resolutionScale = patch.getRenderScale();
this.useViewportDims = patch.useViewportDims();
this.deferTranslucency = patch.deferedTranslucentRendering();
}
public SSBOSet getSsboSet() {
@@ -92,6 +94,7 @@ public class IrisVoxyRenderPipelineData {
public static IrisVoxyRenderPipelineData buildPipeline(IrisRenderingPipeline ipipe, IrisShaderPatch patch, CustomUniforms cu, ShaderStorageBufferHolder ssboHolder) {
var uniforms = createUniformLayoutStructAndUpdater(createUniformSet(cu, patch));
var imageSet = createImageSet(ipipe, patch);
var ssboSet = createSSBOLayouts(patch.getSSBOs(), ssboHolder);
@@ -130,6 +133,11 @@ public class IrisVoxyRenderPipelineData {
case VEC4I -> "ivec4";
};
}
public boolean shouldDeferTranslucency() {
return false;
}
public record StructLayout(int size, String layout, LongConsumer updater) {}
private static StructLayout createUniformLayoutStructAndUpdater(List<UniformWritingHolder> uniforms) {
if (uniforms.size() == 0) {