Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private SdfAtlasTexture() {
}

/**
* Upload a single atlas page to the GPU, returning its texture identifier.
* Upload a single atlas page to the GPU, returning its texture location.
*/
public static Identifier uploadPage(SdfGlyphAtlas atlas, int pageIndex) {
SdfGlyphPage page = atlas.page(pageIndex);
Expand Down
1 change: 1 addition & 0 deletions module.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ neoForge {
systemProperty 'anvillib.rendering.debugMode', 'true'
systemProperty('neoforge.rendernurse.renderdoc.library', rootProject.file("libs/renderdoc.dll").absolutePath)
taskBefore(rootProject.project('renderdoc-loader-internal').tasks.getByName('jar'))
programArgument("--renderDebugLabels")
jvmArgument("-javaagent:" + rootProject.project('renderdoc-loader-internal').tasks.getByName('jar').archiveFile.get().asFile.absolutePath)
}
}
Expand Down
17 changes: 16 additions & 1 deletion module.rendering/build.gradle
Original file line number Diff line number Diff line change
@@ -1,2 +1,17 @@
dependencies {
}
}

tasks.register('runStd140LayoutRulesTest', JavaExec) {
group = 'verification'
description = 'Runs lightweight std140 layout rule checks.'
classpath = sourceSets.test.runtimeClasspath + sourceSets.main.compileClasspath
mainClass = 'dev.anvilcraft.lib.v2.rendering.foundation.buffers.layout.Std140LayoutRulesTest'
}

tasks.named('test') {
failOnNoDiscoveredTests = false
}

tasks.named('check') {
dependsOn tasks.named('runStd140LayoutRulesTest')
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,38 +36,38 @@ public class ALRPipelines {
.build();

public static final RenderPipeline DOWNSAMPLE = RenderPipeline.builder(POST_PASS)
.withLocation(AnvilLibRendering.location("down_sample"))
.withFragmentShader(AnvilLibRendering.location("core/down_sample"))
.withSampler("DiffuseSampler")
.withUniform("BloomParameters", UniformType.UNIFORM_BUFFER)
.build();
.withLocation(AnvilLibRendering.location("down_sample"))
.withFragmentShader(AnvilLibRendering.location("core/down_sample"))
.withSampler("DiffuseSampler")
.withUniform("BloomParameters", UniformType.UNIFORM_BUFFER)
.build();

public static final RenderPipeline UPSAMPLE = RenderPipeline.builder(POST_PASS)
.withLocation(AnvilLibRendering.location("up_sample"))
.withFragmentShader(AnvilLibRendering.location("core/up_sample"))
.withSampler("DiffuseSampler")
.withSampler("PreviousSampler")
.withUniform("BloomParameters", UniformType.UNIFORM_BUFFER)
.build();
.withLocation(AnvilLibRendering.location("up_sample"))
.withFragmentShader(AnvilLibRendering.location("core/up_sample"))
.withSampler("DiffuseSampler")
.withSampler("PreviousSampler")
.withUniform("BloomParameters", UniformType.UNIFORM_BUFFER)
.build();

public static final VertexFormat SDF_GRAPHICS_FORMAT = VertexFormat.builder()
.add("Position", VertexFormatElement.POSITION)
.add("Color", VertexFormatElement.COLOR)
.add("UV0", VertexFormatElement.UV)
.add("UV1", VertexFormatElement.UV1)
.build();
public static final VertexFormat SDF_GRAPHICS_FORMAT = VertexFormat.builder()
.add("Position", VertexFormatElement.POSITION)
.add("Color", VertexFormatElement.COLOR)
.add("UV0", VertexFormatElement.UV)
.add("UV1", VertexFormatElement.UV1)
.build();

public static final RenderPipeline SDF_GRAPHICS = RenderPipeline.builder()
.withLocation(AnvilLibRendering.location("sdf_graphics"))
.withVertexShader(AnvilLibRendering.location("core/sdf_graphics"))
.withFragmentShader(AnvilLibRendering.location("core/sdf_graphics"))
.withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT))
.withVertexFormat(SDF_GRAPHICS_FORMAT, VertexFormat.Mode.QUADS)
.withUniform("DynamicTransforms", UniformType.UNIFORM_BUFFER)
.withUniform("Projection", UniformType.UNIFORM_BUFFER)
.withUniform("SDFParameters", UniformType.UNIFORM_BUFFER)
.withCull(false)
.build();
.withLocation(AnvilLibRendering.location("sdf_graphics"))
.withVertexShader(AnvilLibRendering.location("core/sdf_graphics"))
.withFragmentShader(AnvilLibRendering.location("core/sdf_graphics"))
.withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT))
.withVertexFormat(SDF_GRAPHICS_FORMAT, VertexFormat.Mode.QUADS)
.withUniform("DynamicTransforms", UniformType.UNIFORM_BUFFER)
.withUniform("Projection", UniformType.UNIFORM_BUFFER)
.withUniform("SDFParameters", UniformType.UNIFORM_BUFFER)
.withCull(false)
.build();


@SubscribeEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package dev.anvilcraft.lib.v2.rendering;

import dev.anvilcraft.lib.v2.rendering.bloom.BloomPostEffect;
import dev.anvilcraft.lib.v2.rendering.event.MainTargetResizeEvent;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBuffers;
import net.minecraft.client.renderer.feature.FeatureRenderDispatcher;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import org.joml.Matrix4fc;

@EventBusSubscriber
public class ALRPostEffects {
@Getter
private static BloomPostEffect bloomPostEffect;
Expand All @@ -15,7 +19,7 @@ public static void createPostEffects() {
bloomPostEffect = new BloomPostEffect();
}

public static void runBloomDraws(Matrix4fc mvMat){
public static void runBloomDraws(Matrix4fc mvMat) {
Minecraft minecraft = Minecraft.getInstance();
RenderBuffers renderBuffers = minecraft.renderBuffers();
FeatureRenderDispatcher frd = new FeatureRenderDispatcher(
Expand All @@ -30,4 +34,15 @@ public static void runBloomDraws(Matrix4fc mvMat){
);
bloomPostEffect.runBloomDraws(mvMat, frd);
}

@SubscribeEvent
public static void on(MainTargetResizeEvent event) {
BloomPostEffect bloomPostEffect = ALRPostEffects.getBloomPostEffect();
if (bloomPostEffect != null) {
bloomPostEffect.resize(
event.getNewWidth(),
event.getNewHeight()
);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.anvilcraft.lib.v2.rendering;

import dev.anvilcraft.lib.v2.rendering.cachedber.pipeline.CachedBlockEntityRenderingPipeline;
import dev.anvilcraft.lib.v2.rendering.extension.blaze3d.compute.shader.ALRComputeShaderManager;
import dev.anvilcraft.lib.v2.rendering.gui.renderer.BlockStatePipRenderer;
import dev.anvilcraft.lib.v2.rendering.gui.renderer.StructurePipRenderer;
import dev.anvilcraft.lib.v2.rendering.gui.state.BlockStatePipRenderingState;
Expand All @@ -11,6 +12,7 @@
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.AddClientReloadListenersEvent;
import net.neoforged.neoforge.client.event.RegisterPictureInPictureRenderersEvent;
import net.neoforged.neoforge.client.event.RenderFrameEvent;
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
Expand All @@ -37,10 +39,32 @@ public static void on(RenderFrameEvent.Pre event) {
}

@SubscribeEvent
public static void on(RenderLevelStageEvent.AfterTranslucentParticles event) {
public static void on(AddClientReloadListenersEvent event) {
event.addListener(AnvilLibRendering.location("compute_shader_manager"), ALRComputeShaderManager.INSTANCE);
}

@SubscribeEvent
public static void on(RenderLevelStageEvent.AfterOpaqueBlocks event) {
if (CachedBlockEntityRenderingPipeline.getInstance() != null) {
CachedBlockEntityRenderingPipeline.getInstance().render(event.getLevelRenderState().cameraRenderState.cullFrustum);
CachedBlockEntityRenderingPipeline.getInstance().render(
event.getLevelRenderState().cameraRenderState.cullFrustum,
false
);
}
}

@SubscribeEvent
public static void on(RenderLevelStageEvent.AfterTranslucentFeatures event) {
if (CachedBlockEntityRenderingPipeline.getInstance() != null) {
CachedBlockEntityRenderingPipeline.getInstance().render(
event.getLevelRenderState().cameraRenderState.cullFrustum,
true
);
}
}

@SubscribeEvent
public static void on(RenderLevelStageEvent.AfterTranslucentParticles event) {
ALRPostEffects.runBloomDraws(event.getModelViewMatrix());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
package dev.anvilcraft.lib.v2.rendering.bloom;

import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.layout.BufferLayout;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.ShaderBufferObjectUsage;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class BloomParametersUbo extends UboObject<BloomParametersUbo> {
public class BloomParametersUbo extends BufferObject<BloomParametersUbo> {

public static final UboLayoutDefinition<BloomParametersUbo> DEFINITION = UboLayoutDefinition.create(
UboLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getBloomIntensity).build(),
UboLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getBloomBlendThreshold).build(),
UboLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getLuminanceSensitivity).build()
public static final BufferObjectLayoutDefinition<BloomParametersUbo> DEFINITION = BufferObjectLayoutDefinition.create(
BufferObjectLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getBloomIntensity).build(),
BufferObjectLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getBloomBlendThreshold).build(),
BufferObjectLayoutEntry.<BloomParametersUbo>ofFloat().forGetter(BloomParametersUbo::getLuminanceSensitivity).build()
);

private float bloomIntensity;
private float bloomBlendThreshold;
private float luminanceSensitivity;

public BloomParametersUbo(float bloomIntensity, float bloomBlendThreshold, float luminanceSensitivity) {
super(BufferLayout.STD140, ShaderBufferObjectUsage.UBO);
this.bloomIntensity = bloomIntensity;
this.bloomBlendThreshold = bloomBlendThreshold;
this.luminanceSensitivity = luminanceSensitivity;
}

@Override
protected UboLayoutDefinition<BloomParametersUbo> getDefinition() {
protected BufferObjectLayoutDefinition<BloomParametersUbo> getDefinition() {
return DEFINITION;
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,30 @@
package dev.anvilcraft.lib.v2.rendering.bloom;

import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.layout.BufferLayout;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.ShaderBufferObjectUsage;
import lombok.Getter;
import lombok.Setter;
import org.joml.Vector2f;

@Getter
@Setter
public class BloomPipelineParametersUbo extends UboObject<BloomPipelineParametersUbo> {
public class BloomPipelineParametersUbo extends BufferObject<BloomPipelineParametersUbo> {

public static final UboLayoutDefinition<BloomPipelineParametersUbo> DEFINITION = UboLayoutDefinition.create(
UboLayoutEntry.<BloomPipelineParametersUbo>ofVec2f().forGetter(BloomPipelineParametersUbo::getResolution).build(),
UboLayoutEntry.<BloomPipelineParametersUbo>ofInt().forGetter(BloomPipelineParametersUbo::getFrameIndex).build()
public static final BufferObjectLayoutDefinition<BloomPipelineParametersUbo> DEFINITION = BufferObjectLayoutDefinition.create(
BufferObjectLayoutEntry.<BloomPipelineParametersUbo>ofVec2f().forGetter(BloomPipelineParametersUbo::getResolution).build(),
BufferObjectLayoutEntry.<BloomPipelineParametersUbo>ofInt().forGetter(BloomPipelineParametersUbo::getFrameIndex).build()
);

private final Vector2f resolution = new Vector2f();
private int frameIndex;

protected BloomPipelineParametersUbo() {
super(BufferLayout.STD140, ShaderBufferObjectUsage.UBO);
}

public void setResolution(int width, int height) {
this.resolution.set(
1.0f / Math.max(width, 1.0f),
Expand All @@ -27,7 +33,7 @@ public void setResolution(int width, int height) {
}

@Override
protected UboLayoutDefinition<BloomPipelineParametersUbo> getDefinition() {
protected BufferObjectLayoutDefinition<BloomPipelineParametersUbo> getDefinition() {
return DEFINITION;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.anvilcraft.lib.v2.rendering.ALRPipelines;
import dev.anvilcraft.lib.v2.rendering.AnvilLibRendering;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.layout.BufferLayout;
import dev.anvilcraft.lib.v2.rendering.foundation.compound.CompoundSubmitNodeStorage;
import dev.anvilcraft.lib.v2.rendering.foundation.compound.DirtyTracked;
import lombok.Getter;
Expand All @@ -43,9 +44,9 @@

@SuppressWarnings({"FieldMayBeFinal", "SameParameterValue"})
public class BloomPostEffect implements DirtyTracked {
public static final int UNIFORM_TRANSFORM_SIZE = TransformsUbo.DEFINITION.size();
public static final int UNIFORM_BLOOM_SIZE = BloomParametersUbo.DEFINITION.size();
public static final int UNIFORM_ENHANCED_BLOOM_SIZE = BloomPipelineParametersUbo.DEFINITION.size();
public static final int UNIFORM_TRANSFORM_SIZE = TransformsUbo.DEFINITION.size(BufferLayout.STD140);
public static final int UNIFORM_BLOOM_SIZE = BloomParametersUbo.DEFINITION.size(BufferLayout.STD140);
public static final int UNIFORM_ENHANCED_BLOOM_SIZE = BloomPipelineParametersUbo.DEFINITION.size(BufferLayout.STD140);

// todo: uses config or options
private static final int PASSES_AMOUNT = 5;
Expand Down Expand Up @@ -268,8 +269,6 @@ private void applyBloom(
bloomPass.close();
}



private void doDownSample(
CommandEncoder commandEncoder,
RenderTarget inputTarget
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
package dev.anvilcraft.lib.v2.rendering.bloom;

import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.ubo.UboObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.layout.BufferLayout;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutDefinition;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObjectLayoutEntry;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.BufferObject;
import dev.anvilcraft.lib.v2.rendering.foundation.buffers.object.ShaderBufferObjectUsage;
import lombok.Getter;
import lombok.Setter;
import org.joml.Matrix4f;

@Setter
@Getter
public class TransformsUbo extends UboObject<TransformsUbo> {
public class TransformsUbo extends BufferObject<TransformsUbo> {

public static final UboLayoutDefinition<TransformsUbo> DEFINITION = UboLayoutDefinition.create(
UboLayoutEntry.<TransformsUbo>ofMat4f().forGetter(TransformsUbo::getProjMat).build()
public static final BufferObjectLayoutDefinition<TransformsUbo> DEFINITION = BufferObjectLayoutDefinition.create(
BufferObjectLayoutEntry.<TransformsUbo>ofMat4f().forGetter(TransformsUbo::getProjMat).build()
);

private Matrix4f projMat;

public TransformsUbo(Matrix4f projMat) {
super(BufferLayout.STD140, ShaderBufferObjectUsage.UBO);
this.projMat = projMat;
}

@Override
protected UboLayoutDefinition<TransformsUbo> getDefinition() {
protected BufferObjectLayoutDefinition<TransformsUbo> getDefinition() {
return DEFINITION;
}
}
Loading
Loading