clean up blaze buffer uniform creation
This commit is contained in:
+7
-30
@@ -26,21 +26,16 @@ public class BlazeDebugWireframeRenderer {}
|
|||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.platform.PolygonMode;
|
|
||||||
import com.mojang.blaze3d.shaders.UniformType;
|
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
@@ -51,13 +46,10 @@ import com.seibel.distanthorizons.core.util.math.Vec3d;
|
|||||||
import com.seibel.distanthorizons.core.util.math.Vec3f;
|
import com.seibel.distanthorizons.core.util.math.Vec3f;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
||||||
import net.minecraft.resources.Identifier;
|
|
||||||
import org.lwjgl.system.MemoryUtil;
|
import org.lwjgl.system.MemoryUtil;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles rendering the wireframe particles
|
* Handles rendering the wireframe particles
|
||||||
@@ -119,7 +111,7 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer
|
|||||||
private GpuBuffer boxVertexBuffer;
|
private GpuBuffer boxVertexBuffer;
|
||||||
private GpuBuffer boxIndexBuffer;
|
private GpuBuffer boxIndexBuffer;
|
||||||
|
|
||||||
private GpuBuffer uniformBuffer;
|
private final BlazeUniformBufferWrapper uniformBufferWrapper = new BlazeUniformBufferWrapper("debugWireframeUniformBlock");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -263,14 +255,7 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer
|
|||||||
|
|
||||||
// uniforms
|
// uniforms
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putMat4f() // uTransform
|
|
||||||
.putVec4() // uColor
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
Vec3d camPos = MC_RENDER.getCameraExactPosition();
|
Vec3d camPos = MC_RENDER.getCameraExactPosition();
|
||||||
Vec3f camPosFloatThisFrame = new Vec3f((float) camPos.x, (float) camPos.y, (float) camPos.z);
|
Vec3f camPosFloatThisFrame = new Vec3f((float) camPos.x, (float) camPos.y, (float) camPos.z);
|
||||||
|
|
||||||
@@ -288,23 +273,15 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer
|
|||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
this.uniformBufferWrapper
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
.putMat4f(transformMatrix) // uTransform
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
.putVec4f(
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putMat4f(transformMatrix.createJomlMatrix()) // uTransform
|
|
||||||
.putVec4(
|
|
||||||
box.color.getRed() / 255.0f,
|
box.color.getRed() / 255.0f,
|
||||||
box.color.getGreen() / 255.0f,
|
box.color.getGreen() / 255.0f,
|
||||||
box.color.getBlue() / 255.0f,
|
box.color.getBlue() / 255.0f,
|
||||||
box.color.getAlpha() / 255.0f) // uColor
|
box.color.getAlpha() / 255.0f) // uColor
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.uniformBuffer = BlazeUniformUtil.createBuffer("uniformBlock", uniformBufferSize, this.uniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.uniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
commandEncoder.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -317,7 +294,7 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer
|
|||||||
BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper))
|
BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper))
|
||||||
{
|
{
|
||||||
// Bind instance data //
|
// Bind instance data //
|
||||||
renderPassWrapper.setUniform("uniformBlock", this.uniformBuffer);
|
renderPassWrapper.setUniform("uniformBlock", this.uniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setPipeline(this.pipeline);
|
renderPassWrapper.setPipeline(this.pipeline);
|
||||||
renderPassWrapper.setIndexBuffer(this.boxIndexBuffer);
|
renderPassWrapper.setIndexBuffer(this.boxIndexBuffer);
|
||||||
|
|||||||
+12
-53
@@ -24,17 +24,10 @@ public class BlazeDhGenericObjectRenderer {}
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.BlendFunction;
|
import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.platform.PolygonMode;
|
|
||||||
import com.mojang.blaze3d.shaders.UniformType;
|
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial;
|
import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial;
|
||||||
@@ -52,7 +45,7 @@ import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormat
|
|||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
|
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
@@ -73,15 +66,10 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IProfilerWrap
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhGenericRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhGenericRenderer;
|
||||||
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
|
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
|
||||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
import net.minecraft.resources.Identifier;
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,7 +104,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
|
|
||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
|
|
||||||
private GpuBuffer vertUniformBuffer;
|
private final BlazeUniformBufferWrapper vertUniformBufferWrapper = new BlazeUniformBufferWrapper("vertUniformBlock");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -427,28 +415,6 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
|
|
||||||
// uniforms
|
// uniforms
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putIVec3() // uOffsetChunk
|
|
||||||
.putVec3() // uOffsetSubChunk
|
|
||||||
.putIVec3() // uCameraPosChunk
|
|
||||||
.putVec3() // uCameraPosSubChunk
|
|
||||||
|
|
||||||
.putVec3() // aTranslateChunk
|
|
||||||
.putVec3() // aTranslateSubChunk
|
|
||||||
|
|
||||||
.putMat4f() // uProjectionMvm
|
|
||||||
.putInt() // uSkyLight
|
|
||||||
.putInt() // uBlockLight
|
|
||||||
|
|
||||||
.putFloat() // uNorthShading
|
|
||||||
.putFloat() // uSouthShading
|
|
||||||
.putFloat() // uEastShading
|
|
||||||
.putFloat() // uWestShading
|
|
||||||
.putFloat() // uTopShading
|
|
||||||
.putFloat() // uBottomShading
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
Mat4f projectionMvmMatrix = new Mat4f(renderEventParam.dhProjectionMatrix);
|
Mat4f projectionMvmMatrix = new Mat4f(renderEventParam.dhProjectionMatrix);
|
||||||
@@ -457,31 +423,29 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
this.vertUniformBufferWrapper
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
.putVec3i(
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putIVec3(
|
|
||||||
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().x),
|
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().x),
|
||||||
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().y),
|
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().y),
|
||||||
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().z)
|
LodUtil.getChunkPosFromDouble(boxGroup.getOriginBlockPos().z)
|
||||||
) // uOffsetChunk
|
) // uOffsetChunk
|
||||||
.putVec3(
|
.putVec3f(
|
||||||
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().x),
|
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().x),
|
||||||
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().y),
|
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().y),
|
||||||
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().z)
|
LodUtil.getSubChunkPosFromDouble(boxGroup.getOriginBlockPos().z)
|
||||||
) // uOffsetSubChunk
|
) // uOffsetSubChunk
|
||||||
.putIVec3(
|
.putVec3i(
|
||||||
LodUtil.getChunkPosFromDouble(camPos.x),
|
LodUtil.getChunkPosFromDouble(camPos.x),
|
||||||
LodUtil.getChunkPosFromDouble(camPos.y),
|
LodUtil.getChunkPosFromDouble(camPos.y),
|
||||||
LodUtil.getChunkPosFromDouble(camPos.z)
|
LodUtil.getChunkPosFromDouble(camPos.z)
|
||||||
) // uCameraPosChunk
|
) // uCameraPosChunk
|
||||||
.putVec3(
|
.putVec3f(
|
||||||
LodUtil.getSubChunkPosFromDouble(camPos.x),
|
LodUtil.getSubChunkPosFromDouble(camPos.x),
|
||||||
LodUtil.getSubChunkPosFromDouble(camPos.y),
|
LodUtil.getSubChunkPosFromDouble(camPos.y),
|
||||||
LodUtil.getSubChunkPosFromDouble(camPos.z)
|
LodUtil.getSubChunkPosFromDouble(camPos.z)
|
||||||
) // uCameraPosSubChunk
|
) // uCameraPosSubChunk
|
||||||
|
|
||||||
.putMat4f(projectionMvmMatrix.createJomlMatrix()) // uProjectionMvm
|
.putMat4f(projectionMvmMatrix) // uProjectionMvm
|
||||||
.putInt(boxGroup.getSkyLight()) // uSkyLight
|
.putInt(boxGroup.getSkyLight()) // uSkyLight
|
||||||
.putInt(boxGroup.getBlockLight()) // uBlockLight
|
.putInt(boxGroup.getBlockLight()) // uBlockLight
|
||||||
|
|
||||||
@@ -492,13 +456,8 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
.putFloat(shading.top)
|
.putFloat(shading.top)
|
||||||
.putFloat(shading.bottom)
|
.putFloat(shading.bottom)
|
||||||
|
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.vertUniformBuffer = BlazeUniformUtil.createBuffer("vertUniformBlock", uniformBufferSize, this.vertUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vertUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -567,7 +526,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
// Bind instance data //
|
// Bind instance data //
|
||||||
|
|
||||||
|
|
||||||
renderPassWrapper.setUniform("vertUniformBlock", this.vertUniformBuffer);
|
renderPassWrapper.setUniform("vertUniformBlock", this.vertUniformBufferWrapper);
|
||||||
|
|
||||||
// set pipeline
|
// set pipeline
|
||||||
renderPassWrapper.setPipeline(this.pipeline);
|
renderPassWrapper.setPipeline(this.pipeline);
|
||||||
@@ -633,9 +592,9 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer
|
|||||||
// close is called outside the render thread and buffer closing must be done on the render thread
|
// close is called outside the render thread and buffer closing must be done on the render thread
|
||||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("Generic Obj Cleanup", () ->
|
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("Generic Obj Cleanup", () ->
|
||||||
{
|
{
|
||||||
if (this.vertUniformBuffer != null)
|
if (this.vertUniformBufferWrapper != null)
|
||||||
{
|
{
|
||||||
this.vertUniformBuffer.close();
|
this.vertUniformBufferWrapper.close();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-66
@@ -5,29 +5,22 @@ public class BlazeDhTerrainRenderer {}
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.BlendFunction;
|
import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.platform.PolygonMode;
|
|
||||||
import com.mojang.blaze3d.shaders.UniformType;
|
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeBufferRenderEvent;
|
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeBufferRenderEvent;
|
||||||
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeRenderPassEvent;
|
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeRenderPassEvent;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeLodUniformBufferWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeLodUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.buffer.BlazeVertexBufferWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.buffer.BlazeVertexBufferWrapper;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
|
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
|
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
|
||||||
@@ -47,13 +40,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRender
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhTerrainRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhTerrainRenderer;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IVertexBufferWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IVertexBufferWrapper;
|
||||||
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
|
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
|
||||||
import net.minecraft.resources.Identifier;
|
|
||||||
import org.lwjgl.system.MemoryUtil;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
/** Renders rendering DH's LOD terrain. */
|
/** Renders rendering DH's LOD terrain. */
|
||||||
public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
||||||
@@ -72,8 +58,8 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
private RenderPipeline transparentPipeline;
|
private RenderPipeline transparentPipeline;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("fragUniformBlock");
|
||||||
private GpuBuffer vertSharedUniformBuffer;
|
private final BlazeUniformBufferWrapper vertSharedUniformBufferWrapper = new BlazeUniformBufferWrapper("vertSharedUniformBlock");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -184,7 +170,7 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
for (int lodIndex = 0; lodIndex < bufferContainers.size(); lodIndex++)
|
for (int lodIndex = 0; lodIndex < bufferContainers.size(); lodIndex++)
|
||||||
{
|
{
|
||||||
LodBufferContainer bufferContainer = bufferContainers.get(lodIndex);
|
LodBufferContainer bufferContainer = bufferContainers.get(lodIndex);
|
||||||
bufferContainer.uniformContainer.tryUpload();
|
bufferContainer.uniformContainer.tryUpload(bufferContainer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,55 +193,25 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putInt() // uIsWhiteWorld
|
|
||||||
|
|
||||||
.putFloat() // uWorldYOffset
|
|
||||||
.putFloat() // uMircoOffset
|
|
||||||
.putFloat() // uEarthRadius
|
|
||||||
|
|
||||||
.putVec3() // uCameraPos
|
|
||||||
.putMat4f() // uCombinedMatrix
|
|
||||||
.get();
|
|
||||||
|
|
||||||
int i = Config.Client.Advanced.Debugging.enableWhiteWorld.get() ? 1 : 0;
|
int i = Config.Client.Advanced.Debugging.enableWhiteWorld.get() ? 1 : 0;
|
||||||
|
|
||||||
ByteBuffer buffer = MemoryUtil.memAlloc(uniformBufferSize);
|
this.vertSharedUniformBufferWrapper
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
Std140Builder.intoBuffer(buffer)
|
|
||||||
.putInt(i) // uIsWhiteWorld
|
.putInt(i) // uIsWhiteWorld
|
||||||
|
|
||||||
.putFloat((float) renderEventParam.worldYOffset) // uWorldYOffset
|
.putFloat((float) renderEventParam.worldYOffset) // uWorldYOffset
|
||||||
.putFloat(0.01f) // uMircoOffset // 0.01 block offset
|
.putFloat(0.01f) // uMircoOffset // 0.01 block offset
|
||||||
.putFloat(earthCurveRatio) // uEarthRadius
|
.putFloat(earthCurveRatio) // uEarthRadius
|
||||||
|
|
||||||
.putVec3(
|
.putVec3f(
|
||||||
(float) renderEventParam.exactCameraPosition.x,
|
(float) renderEventParam.exactCameraPosition.x,
|
||||||
(float) renderEventParam.exactCameraPosition.y,
|
(float) renderEventParam.exactCameraPosition.y,
|
||||||
(float) renderEventParam.exactCameraPosition.z) // uCameraPos
|
(float) renderEventParam.exactCameraPosition.z) // uCameraPos
|
||||||
.putMat4f(combinedMatrix.createJomlMatrix()) // uCombinedMatrix
|
.putMat4f(combinedMatrix) // uCombinedMatrix
|
||||||
.get();
|
.finishAndUpload();
|
||||||
|
|
||||||
this.vertSharedUniformBuffer = BlazeUniformUtil.createBuffer("vertSharedUniformBlock", uniformBufferSize, this.vertSharedUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vertSharedUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
|
|
||||||
MemoryUtil.memFree(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
profiler.popPush("set frag uniforms");
|
profiler.popPush("set frag uniforms");
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putFloat() // uClipDistance
|
|
||||||
.putFloat() // uNoiseIntensity
|
|
||||||
.putInt() // uNoiseSteps
|
|
||||||
.putInt() // uNoiseDropoff
|
|
||||||
.putInt() // uDitherDhRendering
|
|
||||||
.putInt() // uNoiseEnabled
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
float dhNearClipDistance = RenderUtil.getNearClipPlaneInBlocks();
|
float dhNearClipDistance = RenderUtil.getNearClipPlaneInBlocks();
|
||||||
@@ -267,24 +223,15 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
this.fragUniformBufferWrapper
|
||||||
ByteBuffer buffer = MemoryUtil.memAlloc(uniformBufferSize);
|
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putFloat(dhNearClipDistance) // uClipDistance
|
.putFloat(dhNearClipDistance) // uClipDistance
|
||||||
.putFloat(Config.Client.Advanced.Graphics.NoiseTexture.noiseIntensity.get()) // uNoiseIntensity
|
.putFloat(Config.Client.Advanced.Graphics.NoiseTexture.noiseIntensity.get()) // uNoiseIntensity
|
||||||
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.noiseSteps.get()) // uNoiseSteps
|
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.noiseSteps.get()) // uNoiseSteps
|
||||||
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.noiseDropoff.get()) // uNoiseDropoff
|
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.noiseDropoff.get()) // uNoiseDropoff
|
||||||
.putInt(Config.Client.Advanced.Graphics.Quality.ditherDhFade.get() ? 1 : 0) // uDitherDhRendering
|
.putInt(Config.Client.Advanced.Graphics.Quality.ditherDhFade.get() ? 1 : 0) // uDitherDhRendering
|
||||||
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.enableNoiseTexture.get() ? 1 : 0) // uNoiseEnabled
|
.putInt(Config.Client.Advanced.Graphics.NoiseTexture.enableNoiseTexture.get() ? 1 : 0) // uNoiseEnabled
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("fragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
MemoryUtil.memFree(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -310,8 +257,8 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
renderPassWrapper.setPipeline(opaquePass ? this.opaquePipeline : this.transparentPipeline);
|
renderPassWrapper.setPipeline(opaquePass ? this.opaquePipeline : this.transparentPipeline);
|
||||||
|
|
||||||
// shared uniforms
|
// shared uniforms
|
||||||
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
renderPassWrapper.setUniform("vertSharedUniformBlock", this.vertSharedUniformBuffer);
|
renderPassWrapper.setUniform("vertSharedUniformBlock", this.vertSharedUniformBufferWrapper);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -335,7 +282,7 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderPassWrapper.setUniform("vertUniqueUniformBlock", uniformWrapper.gpuBuffer);
|
renderPassWrapper.setUniform("vertUniqueUniformBlock", uniformWrapper);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+13
-31
@@ -25,9 +25,6 @@ public class BlazeDhApplyRenderer {}
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.BlendFunction;
|
import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
@@ -36,13 +33,13 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||||||
import com.mojang.blaze3d.textures.*;
|
import com.mojang.blaze3d.textures.*;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
@@ -51,8 +48,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRender
|
|||||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,7 +69,7 @@ public class BlazeDhApplyRenderer
|
|||||||
|
|
||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("baseFragUniformBlock");
|
||||||
|
|
||||||
protected GpuBuffer vboGpuBuffer;
|
protected GpuBuffer vboGpuBuffer;
|
||||||
|
|
||||||
@@ -104,7 +99,7 @@ public class BlazeDhApplyRenderer
|
|||||||
*/
|
*/
|
||||||
private final String[] uniformNames;
|
private final String[] uniformNames;
|
||||||
/** will be an empty array if unneeded */
|
/** will be an empty array if unneeded */
|
||||||
private final GpuBuffer[] uniformBuffers;
|
private final BlazeUniformBufferWrapper[] uniformBufferWrappers;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -140,7 +135,7 @@ public class BlazeDhApplyRenderer
|
|||||||
this.fragmentShaderPath = fragmentShaderPath;
|
this.fragmentShaderPath = fragmentShaderPath;
|
||||||
|
|
||||||
this.uniformNames = uniformNames;
|
this.uniformNames = uniformNames;
|
||||||
this.uniformBuffers = new GpuBuffer[this.uniformNames.length];
|
this.uniformBufferWrappers = new BlazeUniformBufferWrapper[this.uniformNames.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryInit(
|
private void tryInit(
|
||||||
@@ -214,7 +209,7 @@ public class BlazeDhApplyRenderer
|
|||||||
//========//
|
//========//
|
||||||
//region
|
//region
|
||||||
|
|
||||||
public void setUniform(String uniformName, GpuBuffer uniformBuffer)
|
public void setUniform(String uniformName, BlazeUniformBufferWrapper uniformBufferWrapper)
|
||||||
{
|
{
|
||||||
// the uniform array should be short enough (less than 10 items)
|
// the uniform array should be short enough (less than 10 items)
|
||||||
// where a sequential search should be plenty fast
|
// where a sequential search should be plenty fast
|
||||||
@@ -223,7 +218,7 @@ public class BlazeDhApplyRenderer
|
|||||||
String nameAtIndex = this.uniformNames[i];
|
String nameAtIndex = this.uniformNames[i];
|
||||||
if (nameAtIndex.equals(uniformName))
|
if (nameAtIndex.equals(uniformName))
|
||||||
{
|
{
|
||||||
this.uniformBuffers[i] = uniformBuffer;
|
this.uniformBufferWrappers[i] = uniformBufferWrapper;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -239,23 +234,10 @@ public class BlazeDhApplyRenderer
|
|||||||
this.dummyDepthTextureWrapper.tryCreateOrResize();
|
this.dummyDepthTextureWrapper.tryCreateOrResize();
|
||||||
|
|
||||||
|
|
||||||
{
|
this.fragUniformBufferWrapper
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
||||||
.putInt() // uIsReverseZDepth
|
.finishAndUpload();
|
||||||
.get();
|
;
|
||||||
|
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
|
||||||
.get()
|
|
||||||
;
|
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("baseFragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
try (RenderPassWrapper renderPassWrapper = new RenderPassWrapper(
|
try (RenderPassWrapper renderPassWrapper = new RenderPassWrapper(
|
||||||
this::getIdentifierName,
|
this::getIdentifierName,
|
||||||
@@ -268,7 +250,7 @@ public class BlazeDhApplyRenderer
|
|||||||
for (int i = 0; i < this.uniformNames.length; i++)
|
for (int i = 0; i < this.uniformNames.length; i++)
|
||||||
{
|
{
|
||||||
String uniformName = this.uniformNames[i];
|
String uniformName = this.uniformNames[i];
|
||||||
GpuBuffer uniformBuffer = this.uniformBuffers[i];
|
BlazeUniformBufferWrapper uniformBuffer = this.uniformBufferWrappers[i];
|
||||||
if (uniformBuffer == null)
|
if (uniformBuffer == null)
|
||||||
{
|
{
|
||||||
throw new IllegalStateException("Missing uniform ["+uniformName+"], please set the uniform before rendering.");
|
throw new IllegalStateException("Missing uniform ["+uniformName+"], please set the uniform before rendering.");
|
||||||
@@ -277,7 +259,7 @@ public class BlazeDhApplyRenderer
|
|||||||
renderPassWrapper.setUniform(uniformName, uniformBuffer);
|
renderPassWrapper.setUniform(uniformName, uniformBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderPassWrapper.setUniform("baseFragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("baseFragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
||||||
renderPassWrapper.setPipeline(this.pipeline);
|
renderPassWrapper.setPipeline(this.pipeline);
|
||||||
@@ -290,7 +272,7 @@ public class BlazeDhApplyRenderer
|
|||||||
// so we can check if they're missing during next frame's rendering
|
// so we can check if they're missing during next frame's rendering
|
||||||
if (ModInfo.IS_DEV_BUILD)
|
if (ModInfo.IS_DEV_BUILD)
|
||||||
{
|
{
|
||||||
Arrays.fill(this.uniformBuffers, null);
|
Arrays.fill(this.uniformBufferWrappers, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-32
@@ -25,22 +25,18 @@ public class BlazeDhFarFadeRenderer {}
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.BlazeDhMetaRenderer;
|
import com.seibel.distanthorizons.common.render.blaze.BlazeDhMetaRenderer;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhCopyRenderer;
|
import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhCopyRenderer;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
@@ -51,12 +47,6 @@ import com.seibel.distanthorizons.core.util.RenderUtil;
|
|||||||
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhFarFadeRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhFarFadeRenderer;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fades out DH's far clip plane
|
* Fades out DH's far clip plane
|
||||||
@@ -74,7 +64,7 @@ public class BlazeDhFarFadeRenderer implements IDhFarFadeRenderer
|
|||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("fragUniformBlock");
|
||||||
|
|
||||||
private GpuBuffer vboGpuBuffer;
|
private GpuBuffer vboGpuBuffer;
|
||||||
|
|
||||||
@@ -162,14 +152,6 @@ public class BlazeDhFarFadeRenderer implements IDhFarFadeRenderer
|
|||||||
this.dhFadeDepthTextureWrapper.tryCreateOrResize();
|
this.dhFadeDepthTextureWrapper.tryCreateOrResize();
|
||||||
|
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putFloat() // uStartFadeBlockDistance
|
|
||||||
.putFloat() // uEndFadeBlockDistance
|
|
||||||
.putMat4f() // uDhInvMvmProj
|
|
||||||
.putInt() // uIsReverseZDepth
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
float dhFarClipDistance = RenderUtil.getFarClipPlaneDistanceInBlocks();
|
float dhFarClipDistance = RenderUtil.getFarClipPlaneDistanceInBlocks();
|
||||||
@@ -187,21 +169,13 @@ public class BlazeDhFarFadeRenderer implements IDhFarFadeRenderer
|
|||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
fragUniformBufferWrapper
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putFloat(fadeStartDistance) // uStartFadeBlockDistance
|
.putFloat(fadeStartDistance) // uStartFadeBlockDistance
|
||||||
.putFloat(fadeEndDistance) // uEndFadeBlockDistance
|
.putFloat(fadeEndDistance) // uEndFadeBlockDistance
|
||||||
.putMat4f(inverseDhMvmProjMatrix.createJomlMatrix()) // uDhInvMvmProj
|
.putMat4f(inverseDhMvmProjMatrix) // uDhInvMvmProj
|
||||||
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("fragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -224,7 +198,7 @@ public class BlazeDhFarFadeRenderer implements IDhFarFadeRenderer
|
|||||||
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
||||||
renderPassWrapper.bindTexture("uDhColorTexture", BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper);
|
renderPassWrapper.bindTexture("uDhColorTexture", BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
||||||
renderPassWrapper.setPipeline(this.pipeline);
|
renderPassWrapper.setPipeline(this.pipeline);
|
||||||
|
|||||||
+7
-62
@@ -32,7 +32,7 @@ import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper
|
|||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
@@ -47,13 +47,8 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRender
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhFogRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhFogRenderer;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.BlendFunction;
|
import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
@@ -89,7 +84,7 @@ public class BlazeDhFogRenderer implements IDhFogRenderer
|
|||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("dh_fog_frag_uniform");
|
||||||
|
|
||||||
private GpuBuffer vboGpuBuffer;
|
private GpuBuffer vboGpuBuffer;
|
||||||
|
|
||||||
@@ -181,48 +176,6 @@ public class BlazeDhFogRenderer implements IDhFogRenderer
|
|||||||
this.fogDepthTextureWrapper.tryCreateOrResize();
|
this.fogDepthTextureWrapper.tryCreateOrResize();
|
||||||
|
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
|
|
||||||
// fog uniforms
|
|
||||||
.putVec4() // uFogColor
|
|
||||||
.putFloat() //uFogScale
|
|
||||||
.putFloat() //uFogVerticalScale
|
|
||||||
// only used for debugging
|
|
||||||
.putInt() //uFogDebugMode // 1 = render everything with fog color // 7 = use debug rendering
|
|
||||||
.putInt() //uFogFalloffType
|
|
||||||
|
|
||||||
// fog config
|
|
||||||
.putFloat() // uFarFogStart
|
|
||||||
.putFloat() // uFarFogLength
|
|
||||||
.putFloat() // uFarFogMin
|
|
||||||
.putFloat() // uFarFogRange
|
|
||||||
.putFloat() // uFarFogDensity
|
|
||||||
|
|
||||||
// height fog config
|
|
||||||
.putFloat() // uHeightFogStart
|
|
||||||
.putFloat() // uHeightFogLength
|
|
||||||
.putFloat() // uHeightFogMin
|
|
||||||
.putFloat() // uHeightFogRange
|
|
||||||
.putFloat() // uHeightFogDensity
|
|
||||||
|
|
||||||
// ??
|
|
||||||
.putInt() // uHeightFogEnabled
|
|
||||||
.putInt() // uHeightFogFalloffType
|
|
||||||
.putInt() // uHeightBasedOnCamera
|
|
||||||
.putFloat() // uHeightFogBaseHeight
|
|
||||||
.putInt() // uHeightFogAppliesUp
|
|
||||||
.putInt() // uHeightFogAppliesDown
|
|
||||||
.putInt() // uUseSphericalFog
|
|
||||||
.putInt() // uHeightFogMixingMode
|
|
||||||
.putFloat() // uCameraBlockYPos
|
|
||||||
|
|
||||||
.putMat4f() // uInvMvmProj
|
|
||||||
|
|
||||||
.putInt() // uIsReverseZDepth
|
|
||||||
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
int lodDrawDistance = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get() * LodUtil.CHUNK_WIDTH;
|
int lodDrawDistance = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get() * LodUtil.CHUNK_WIDTH;
|
||||||
@@ -242,12 +195,9 @@ public class BlazeDhFogRenderer implements IDhFogRenderer
|
|||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
this.fragUniformBufferWrapper
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
|
|
||||||
// fog uniforms
|
// fog uniforms
|
||||||
.putVec4(
|
.putVec4f(
|
||||||
fogColor.getRed() / 255.0f,
|
fogColor.getRed() / 255.0f,
|
||||||
fogColor.getGreen() / 255.0f,
|
fogColor.getGreen() / 255.0f,
|
||||||
fogColor.getBlue() / 255.0f,
|
fogColor.getBlue() / 255.0f,
|
||||||
@@ -282,17 +232,12 @@ public class BlazeDhFogRenderer implements IDhFogRenderer
|
|||||||
.putInt(heightFogMixingMode.value) // uHeightFogMixingMode
|
.putInt(heightFogMixingMode.value) // uHeightFogMixingMode
|
||||||
.putFloat((float)MC_RENDER.getCameraExactPosition().y) // uCameraBlockYPos
|
.putFloat((float)MC_RENDER.getCameraExactPosition().y) // uCameraBlockYPos
|
||||||
|
|
||||||
.putMat4f(inverseMvmProjMatrix.createJomlMatrix()) // uInvMvmProj
|
.putMat4f(inverseMvmProjMatrix) // uInvMvmProj
|
||||||
|
|
||||||
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
||||||
|
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("fragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -312,7 +257,7 @@ public class BlazeDhFogRenderer implements IDhFogRenderer
|
|||||||
{
|
{
|
||||||
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer); // vertex buffer can only be "0" lol
|
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer); // vertex buffer can only be "0" lol
|
||||||
renderPassWrapper.setPipeline(this.pipeline);
|
renderPassWrapper.setPipeline(this.pipeline);
|
||||||
|
|||||||
+12
-62
@@ -30,7 +30,7 @@ import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper
|
|||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
@@ -42,20 +42,11 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRen
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhSsaoRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhSsaoRenderer;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.BlendFunction;
|
import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
#if MC_VER <= MC_26_1_2
|
#if MC_VER <= MC_26_1_2
|
||||||
@@ -84,8 +75,8 @@ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer
|
|||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("fragUniformBlock");
|
||||||
private GpuBuffer applyFragUniformBuffer;
|
private final BlazeUniformBufferWrapper applyFragUniformBufferWrapper = new BlazeUniformBufferWrapper("applyFragUniformBlock");
|
||||||
|
|
||||||
private GpuBuffer vboGpuBuffer;
|
private GpuBuffer vboGpuBuffer;
|
||||||
|
|
||||||
@@ -181,34 +172,14 @@ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer
|
|||||||
|
|
||||||
// frag uniforms
|
// frag uniforms
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putInt() // uSampleCount\
|
|
||||||
|
|
||||||
.putFloat() // uRadius
|
|
||||||
.putFloat() // uStrength
|
|
||||||
.putFloat() // uMinLight
|
|
||||||
.putFloat() // uBias
|
|
||||||
.putFloat() // uFadeDistanceInBlocks
|
|
||||||
|
|
||||||
.putMat4f() // uInvProj
|
|
||||||
.putMat4f() // uProj
|
|
||||||
|
|
||||||
.putInt() // uIsReverseZDepth
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
Mat4f projMatrix = new Mat4f(renderParams.dhProjectionMatrix);
|
Mat4f projMatrix = new Mat4f(renderParams.dhProjectionMatrix);
|
||||||
Mat4f invertedProjMatrix = new Mat4f(renderParams.dhProjectionMatrix);
|
Mat4f invertedProjMatrix = new Mat4f(renderParams.dhProjectionMatrix);
|
||||||
invertedProjMatrix.invert();
|
invertedProjMatrix.invert();
|
||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
this.fragUniformBufferWrapper
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putInt(6) // uSampleCount
|
.putInt(6) // uSampleCount
|
||||||
|
|
||||||
.putFloat(4.0f) // uRadius
|
.putFloat(4.0f) // uRadius
|
||||||
@@ -217,29 +188,16 @@ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer
|
|||||||
.putFloat(0.02f) // uBias
|
.putFloat(0.02f) // uBias
|
||||||
.putFloat(1_600.0f) // uFadeDistanceInBlocks
|
.putFloat(1_600.0f) // uFadeDistanceInBlocks
|
||||||
|
|
||||||
.putMat4f(invertedProjMatrix.createJomlMatrix())
|
.putMat4f(invertedProjMatrix)
|
||||||
.putMat4f(projMatrix.createJomlMatrix())
|
.putMat4f(projMatrix)
|
||||||
|
|
||||||
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("fragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply frag uniforms
|
// apply frag uniforms
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putVec2() // uViewSize
|
|
||||||
.putInt() // uBlurRadius
|
|
||||||
.putFloat() // uNearClipPlane
|
|
||||||
.putFloat() // uFarClipPlane
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
float viewWidth = (float)MC_RENDER.getTargetFramebufferViewportWidth();
|
float viewWidth = (float)MC_RENDER.getTargetFramebufferViewportWidth();
|
||||||
@@ -250,27 +208,19 @@ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer
|
|||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
this.applyFragUniformBufferWrapper
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
.putVec2f(viewWidth, viewHeight) // uViewSize
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putVec2(viewWidth, viewHeight) // uViewSize
|
|
||||||
.putInt(2) // uBlurRadius
|
.putInt(2) // uBlurRadius
|
||||||
.putFloat(nearClipPlane) // uNearClipPlane
|
.putFloat(nearClipPlane) // uNearClipPlane
|
||||||
.putFloat(farClipPlane) // uFarClipPlane
|
.putFloat(farClipPlane) // uFarClipPlane
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.applyFragUniformBuffer = BlazeUniformUtil.createBuffer("applyFragUniformBlock", uniformBufferSize, this.applyFragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.applyFragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this.renderSsaoToTexture();
|
this.renderSsaoToTexture();
|
||||||
|
|
||||||
this.applyRenderer.setUniform("applyFragUniformBlock", this.applyFragUniformBuffer);
|
this.applyRenderer.setUniform("applyFragUniformBlock", this.applyFragUniformBufferWrapper);
|
||||||
this.applyRenderer.render(this.ssaoColorTextureWrapper.texture, BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper.texture, BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper.texture);
|
this.applyRenderer.render(this.ssaoColorTextureWrapper.texture, BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper.texture, BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper.texture);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -284,7 +234,7 @@ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer
|
|||||||
{
|
{
|
||||||
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
||||||
|
|
||||||
|
|||||||
+7
-40
@@ -25,25 +25,18 @@ public class BlazeVanillaFadeRenderer {}
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
import com.mojang.blaze3d.platform.PolygonMode;
|
|
||||||
import com.mojang.blaze3d.shaders.UniformType;
|
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderPass;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.BlazeDhMetaRenderer;
|
import com.seibel.distanthorizons.common.render.blaze.BlazeDhMetaRenderer;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhCopyRenderer;
|
import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhCopyRenderer;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazePostProcessUtil;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPipelineBuilderWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureViewWrapper;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
@@ -56,13 +49,6 @@ import com.seibel.distanthorizons.core.util.math.Mat4f;
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhVanillaFadeRenderer;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhVanillaFadeRenderer;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.resources.Identifier;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.OptionalDouble;
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fades the vanilla chunks
|
* Fades the vanilla chunks
|
||||||
@@ -84,7 +70,7 @@ public class BlazeVanillaFadeRenderer implements IDhVanillaFadeRenderer
|
|||||||
private RenderPipeline pipeline;
|
private RenderPipeline pipeline;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
private GpuBuffer fragUniformBuffer;
|
private final BlazeUniformBufferWrapper fragUniformBufferWrapper = new BlazeUniformBufferWrapper("fragUniformBlock");
|
||||||
|
|
||||||
private GpuBuffer vboGpuBuffer;
|
private GpuBuffer vboGpuBuffer;
|
||||||
|
|
||||||
@@ -175,17 +161,6 @@ public class BlazeVanillaFadeRenderer implements IDhVanillaFadeRenderer
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putInt() // uOnlyRenderLods
|
|
||||||
.putFloat() // uStartFadeBlockDistance
|
|
||||||
.putFloat() // uEndFadeBlockDistance
|
|
||||||
.putFloat() // uMaxLevelHeight
|
|
||||||
.putMat4f() // uDhInvMvmProj
|
|
||||||
.putMat4f() // uMcInvMvmProj
|
|
||||||
.putInt() // uIsReverseZDepth
|
|
||||||
.get();
|
|
||||||
|
|
||||||
|
|
||||||
// create data //
|
// create data //
|
||||||
|
|
||||||
float dhNearClipDistance = RenderUtil.getNearClipPlaneInBlocks();
|
float dhNearClipDistance = RenderUtil.getNearClipPlaneInBlocks();
|
||||||
@@ -213,24 +188,16 @@ public class BlazeVanillaFadeRenderer implements IDhVanillaFadeRenderer
|
|||||||
|
|
||||||
|
|
||||||
// upload data //
|
// upload data //
|
||||||
|
this.fragUniformBufferWrapper
|
||||||
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
|
|
||||||
buffer.order(ByteOrder.nativeOrder());
|
|
||||||
buffer = Std140Builder.intoBuffer(buffer)
|
|
||||||
.putInt(Config.Client.Advanced.Debugging.lodOnlyMode.get() ? 1 : 0) // uOnlyRenderLods
|
.putInt(Config.Client.Advanced.Debugging.lodOnlyMode.get() ? 1 : 0) // uOnlyRenderLods
|
||||||
.putFloat(fadeStartDistance) // uStartFadeBlockDistance
|
.putFloat(fadeStartDistance) // uStartFadeBlockDistance
|
||||||
.putFloat(fadeEndDistance) // uEndFadeBlockDistance
|
.putFloat(fadeEndDistance) // uEndFadeBlockDistance
|
||||||
.putFloat(renderParams.clientLevelWrapper.getMaxHeight()) // uMaxLevelHeight
|
.putFloat(renderParams.clientLevelWrapper.getMaxHeight()) // uMaxLevelHeight
|
||||||
.putMat4f(inverseDhMvmProjMatrix.createJomlMatrix()) // uDhInvMvmProj
|
.putMat4f(inverseDhMvmProjMatrix) // uDhInvMvmProj
|
||||||
.putMat4f(inverseMcMvmProjMatrix.createJomlMatrix()) // uMcInvMvmProj
|
.putMat4f(inverseMcMvmProjMatrix) // uMcInvMvmProj
|
||||||
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
.putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth
|
||||||
.get()
|
.finishAndUpload()
|
||||||
;
|
;
|
||||||
|
|
||||||
this.fragUniformBuffer = BlazeUniformUtil.createBuffer("fragUniformBlock", uniformBufferSize, this.fragUniformBuffer);
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.fragUniformBuffer, 0, uniformBufferSize);
|
|
||||||
|
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -252,7 +219,7 @@ public class BlazeVanillaFadeRenderer implements IDhVanillaFadeRenderer
|
|||||||
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
renderPassWrapper.bindTexture("uDhDepthTexture", BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper);
|
||||||
renderPassWrapper.bindTexture("uDhColorTexture", BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper);
|
renderPassWrapper.bindTexture("uDhColorTexture", BlazeDhMetaRenderer.INSTANCE.dhColorTextureWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBuffer);
|
renderPassWrapper.setUniform("fragUniformBlock", this.fragUniformBufferWrapper);
|
||||||
|
|
||||||
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
renderPassWrapper.setVertexBuffer(this.vboGpuBuffer);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -12,10 +12,10 @@ import com.mojang.blaze3d.systems.RenderPass;
|
|||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.IDhBlazeTexture;
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.IDhBlazeTexture;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeUniformBufferWrapper;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.OptionalDouble;
|
import java.util.OptionalDouble;
|
||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
@@ -101,7 +101,7 @@ public class RenderPassWrapper implements AutoCloseable
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUniform(String uniformName, GpuBuffer uniformBuffer) { this.renderPass.setUniform(uniformName, uniformBuffer); }
|
public void setUniform(String uniformName, BlazeUniformBufferWrapper uniformBuffer) { this.renderPass.setUniform(uniformName, uniformBuffer.getGpuBuffer()); }
|
||||||
|
|
||||||
public void setPipeline(RenderPipeline pipeline) { this.renderPass.setPipeline(pipeline); }
|
public void setPipeline(RenderPipeline pipeline) { this.renderPass.setPipeline(pipeline); }
|
||||||
|
|
||||||
|
|||||||
+10
-27
@@ -5,14 +5,10 @@ public class BlazeLodUniformBufferWrapper {}
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.Std140Builder;
|
|
||||||
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
|
||||||
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
|
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
|
||||||
import com.seibel.distanthorizons.core.util.math.Vec3f;
|
import com.seibel.distanthorizons.core.util.math.Vec3f;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.ILodContainerUniformBufferWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.ILodContainerUniformBufferWrapper;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
|
|
||||||
public class BlazeLodUniformBufferWrapper extends BlazeUniformBufferWrapper implements ILodContainerUniformBufferWrapper
|
public class BlazeLodUniformBufferWrapper extends BlazeUniformBufferWrapper implements ILodContainerUniformBufferWrapper
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -37,35 +33,22 @@ public class BlazeLodUniformBufferWrapper extends BlazeUniformBufferWrapper impl
|
|||||||
//region
|
//region
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createUniformData(LodBufferContainer bufferContainer)
|
public void tryUpload(LodBufferContainer bufferContainer)
|
||||||
{
|
|
||||||
Vec3f modelOffset = new Vec3f(
|
|
||||||
(float) (bufferContainer.minCornerBlockPos.getX()),
|
|
||||||
(float) (bufferContainer.minCornerBlockPos.getY()),
|
|
||||||
(float) (bufferContainer.minCornerBlockPos.getZ()));
|
|
||||||
|
|
||||||
// upload data //
|
|
||||||
|
|
||||||
int uniformBufferSize = new Std140SizeCalculator()
|
|
||||||
.putVec3() // uModelOffset
|
|
||||||
.get();
|
|
||||||
|
|
||||||
ByteBuffer buffer = this.getOrCreateBuffer(uniformBufferSize);
|
|
||||||
Std140Builder.intoBuffer(buffer)
|
|
||||||
.putVec3(modelOffset.x, modelOffset.y, modelOffset.z) // uModelOffset
|
|
||||||
.get();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tryUpload()
|
|
||||||
{
|
{
|
||||||
if (this.uploaded)
|
if (this.uploaded)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.upload();
|
Vec3f modelOffset = new Vec3f(
|
||||||
|
(float) (bufferContainer.minCornerBlockPos.getX()),
|
||||||
|
(float) (bufferContainer.minCornerBlockPos.getY()),
|
||||||
|
(float) (bufferContainer.minCornerBlockPos.getZ()));
|
||||||
|
|
||||||
|
// upload data //
|
||||||
|
this
|
||||||
|
.putVec3f(modelOffset.x, modelOffset.y, modelOffset.z) // uModelOffset
|
||||||
|
.finishAndUpload();
|
||||||
|
|
||||||
this.uploaded = true;
|
this.uploaded = true;
|
||||||
}
|
}
|
||||||
|
|||||||
+162
-49
@@ -1,23 +1,28 @@
|
|||||||
package com.seibel.distanthorizons.common.render.blaze.wrappers.uniform;
|
package com.seibel.distanthorizons.common.render.blaze.wrappers.uniform;
|
||||||
|
|
||||||
#if MC_VER <= MC_1_21_10
|
#if MC_VER <= MC_1_21_10
|
||||||
public class BlazeUniformBufferWrapper {}
|
public class BlazeNewUniformBufferWrapper {}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
import com.mojang.blaze3d.buffers.GpuBuffer;
|
import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
||||||
|
import com.mojang.blaze3d.buffers.Std140Builder;
|
||||||
|
import com.mojang.blaze3d.buffers.Std140SizeCalculator;
|
||||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||||
import com.mojang.blaze3d.systems.GpuDevice;
|
import com.mojang.blaze3d.systems.GpuDevice;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IUniformBufferWrapper;
|
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||||
|
import org.lwjgl.system.MemoryUtil;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class BlazeUniformBufferWrapper implements IUniformBufferWrapper
|
public class BlazeUniformBufferWrapper implements AutoCloseable
|
||||||
{
|
{
|
||||||
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
@@ -27,11 +32,22 @@ public class BlazeUniformBufferWrapper implements IUniformBufferWrapper
|
|||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
private int cpuBufferSize = 0;
|
/** measured in bytes */
|
||||||
private int gpuBufferSize = 0;
|
private int bufferSize = 0;
|
||||||
|
|
||||||
private ByteBuffer cpuBuffer = null;
|
private ByteBuffer cpuBuffer = null;
|
||||||
public GpuBuffer gpuBuffer = null;
|
|
||||||
|
private GpuBuffer gpuBuffer = null;
|
||||||
|
public GpuBuffer getGpuBuffer() { return this.gpuBuffer; }
|
||||||
|
private GpuBufferSlice bufferSlice = null;
|
||||||
|
|
||||||
|
/** the element count the current CPU Buffer is sized for */
|
||||||
|
private int previousElementCount = 0;
|
||||||
|
/** how many elements are currently in flight (ie being added to the buffer right now) */
|
||||||
|
private int elementCount = 0;
|
||||||
|
/** used to resize the buffers dur first-time setup */
|
||||||
|
private final ArrayList<EUniformElement> uniformElementTypes = new ArrayList<>(0);
|
||||||
|
private Std140Builder uniformBufferBuilder = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -46,63 +62,136 @@ public class BlazeUniformBufferWrapper implements IUniformBufferWrapper
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//========//
|
//=================//
|
||||||
// render //
|
// element builder //
|
||||||
//========//
|
//=================//
|
||||||
//region
|
//region
|
||||||
|
|
||||||
protected ByteBuffer getOrCreateBuffer(int size)
|
public BlazeUniformBufferWrapper putVec2f(float x, float y)
|
||||||
{
|
{
|
||||||
if (this.cpuBuffer == null
|
this.putElement(EUniformElement.VEC2f);
|
||||||
|| this.cpuBufferSize != size)
|
this.uniformBufferBuilder.putVec2(x,y);
|
||||||
{
|
return this;
|
||||||
this.cpuBuffer = ByteBuffer.allocateDirect(size);
|
|
||||||
this.cpuBuffer.order(ByteOrder.nativeOrder());
|
|
||||||
|
|
||||||
this.cpuBufferSize = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.cpuBuffer;
|
|
||||||
}
|
}
|
||||||
|
public BlazeUniformBufferWrapper putVec3i(int x, int y, int z)
|
||||||
@Override
|
|
||||||
public void upload() throws IllegalStateException
|
|
||||||
{
|
{
|
||||||
if (this.cpuBuffer == null)
|
this.putElement(EUniformElement.VEC3i);
|
||||||
|
this.uniformBufferBuilder.putIVec3(x,y,z);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public BlazeUniformBufferWrapper putVec3f(float x, float y, float z)
|
||||||
|
{
|
||||||
|
this.putElement(EUniformElement.VEC3f);
|
||||||
|
this.uniformBufferBuilder.putVec3(x,y,z);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public BlazeUniformBufferWrapper putVec4f(float x, float y, float z, float w)
|
||||||
|
{
|
||||||
|
this.putElement(EUniformElement.VEC4f);
|
||||||
|
this.uniformBufferBuilder.putVec4(x,y,z,w);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public BlazeUniformBufferWrapper putMat4f(Mat4f matrix)
|
||||||
|
{
|
||||||
|
this.putElement(EUniformElement.MAT4f);
|
||||||
|
this.uniformBufferBuilder.putMat4f(matrix.createJomlMatrix());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public BlazeUniformBufferWrapper putFloat(float f)
|
||||||
|
{
|
||||||
|
this.putElement(EUniformElement.FLOAT);
|
||||||
|
this.uniformBufferBuilder.putFloat(f);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public BlazeUniformBufferWrapper putInt(int i)
|
||||||
|
{
|
||||||
|
this.putElement(EUniformElement.INT);
|
||||||
|
this.uniformBufferBuilder.putInt(i);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
private void putElement(EUniformElement elementTypeEnum)
|
||||||
|
{
|
||||||
|
this.uniformElementTypes.add(elementTypeEnum);
|
||||||
|
|
||||||
|
boolean createNewBuilder = (this.elementCount == 0);
|
||||||
|
this.elementCount++;
|
||||||
|
if (this.elementCount > this.previousElementCount)
|
||||||
{
|
{
|
||||||
throw new IllegalStateException("Upload called before buffer was created");
|
this.recreateCpuBuffer();
|
||||||
|
createNewBuilder = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.gpuBuffer == null
|
if (createNewBuilder)
|
||||||
|| this.gpuBufferSize != this.cpuBufferSize)
|
|
||||||
{
|
{
|
||||||
if (this.gpuBuffer != null)
|
this.uniformBufferBuilder = Std140Builder.intoBuffer(this.cpuBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void recreateCpuBuffer()
|
||||||
|
{
|
||||||
|
ByteBuffer oldBuffer = this.cpuBuffer;
|
||||||
|
|
||||||
|
int size = calcBufferSize(this.uniformElementTypes);
|
||||||
|
this.cpuBuffer = MemoryUtil.memAlloc(size);
|
||||||
|
this.cpuBuffer.order(ByteOrder.nativeOrder());
|
||||||
|
|
||||||
|
if (oldBuffer != null)
|
||||||
|
{
|
||||||
|
oldBuffer.position(0);
|
||||||
|
this.cpuBuffer.put(oldBuffer);
|
||||||
|
MemoryUtil.memFree(oldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.bufferSize = size;
|
||||||
|
this.previousElementCount = this.elementCount;
|
||||||
|
}
|
||||||
|
private static int calcBufferSize(ArrayList<EUniformElement> uniformElements)
|
||||||
|
{
|
||||||
|
Std140SizeCalculator calculator = new Std140SizeCalculator();
|
||||||
|
|
||||||
|
for (int i = 0; i < uniformElements.size(); i++)
|
||||||
|
{
|
||||||
|
EUniformElement element = uniformElements.get(i);
|
||||||
|
switch (element)
|
||||||
{
|
{
|
||||||
this.gpuBuffer.close();
|
case VEC2f -> calculator.putVec2();
|
||||||
|
case VEC3i -> calculator.putIVec3();
|
||||||
|
case VEC3f -> calculator.putVec3();
|
||||||
|
case VEC4f -> calculator.putVec4();
|
||||||
|
case MAT4f -> calculator.putMat4f();
|
||||||
|
case INT -> calculator.putInt();
|
||||||
|
case FLOAT -> calculator.putFloat();
|
||||||
|
|
||||||
|
default -> throw new UnsupportedOperationException("No definition for element type ["+element.name()+"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
int usage = GpuBuffer.USAGE_COPY_DST
|
|
||||||
| GpuBuffer.USAGE_VERTEX
|
|
||||||
| GpuBuffer.USAGE_UNIFORM;
|
|
||||||
this.gpuBuffer = GPU_DEVICE.createBuffer(this::getBufferName, usage, this.cpuBufferSize);
|
|
||||||
|
|
||||||
this.gpuBufferSize = this.cpuBufferSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return calculator.get();
|
||||||
|
}
|
||||||
int byteSize = (this.cpuBuffer.limit() - this.cpuBuffer.position());
|
|
||||||
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.gpuBuffer, /*offset*/0, byteSize);
|
|
||||||
if (!bufferSlice.buffer().isClosed())
|
|
||||||
{
|
public void finishAndUpload()
|
||||||
COMMAND_ENCODER.writeToBuffer(bufferSlice, this.cpuBuffer);
|
{
|
||||||
}
|
// re-create the GPU buffer if needed
|
||||||
else
|
GpuBuffer oldGpuBuffer = this.gpuBuffer;
|
||||||
{
|
this.gpuBuffer = BlazeUniformUtil.createBuffer(this.name, this.bufferSize, this.gpuBuffer);
|
||||||
LOGGER.warn("Uploading to buffer ["+this.name+"] failed due to already being closed");
|
|
||||||
}
|
boolean createNewBufferSlice = (this.bufferSlice == null || this.gpuBuffer != oldGpuBuffer);
|
||||||
|
if (createNewBufferSlice)
|
||||||
|
{
|
||||||
|
this.bufferSlice = new GpuBufferSlice(this.gpuBuffer, 0, this.bufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// upload to GPU
|
||||||
|
this.cpuBuffer.position(0);
|
||||||
|
COMMAND_ENCODER.writeToBuffer(this.bufferSlice, this.cpuBuffer);
|
||||||
|
|
||||||
|
|
||||||
|
// clear the element tracking for next time
|
||||||
|
this.elementCount = 0;
|
||||||
|
this.uniformElementTypes.clear();
|
||||||
|
this.uniformBufferBuilder = null;
|
||||||
}
|
}
|
||||||
private String getBufferName() { return this.name; }
|
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
@@ -120,11 +209,35 @@ public class BlazeUniformBufferWrapper implements IUniformBufferWrapper
|
|||||||
{
|
{
|
||||||
this.gpuBuffer.close();
|
this.gpuBuffer.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.cpuBuffer != null)
|
||||||
|
{
|
||||||
|
MemoryUtil.memFree(this.cpuBuffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//================//
|
||||||
|
// helper classes //
|
||||||
|
//================//
|
||||||
|
//region
|
||||||
|
|
||||||
|
private enum EUniformElement
|
||||||
|
{
|
||||||
|
VEC2f,
|
||||||
|
VEC3f,
|
||||||
|
VEC3i,
|
||||||
|
VEC4f,
|
||||||
|
MAT4f,
|
||||||
|
INT,
|
||||||
|
FLOAT,
|
||||||
|
}
|
||||||
|
|
||||||
|
//endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
+1
-3
@@ -9,9 +9,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.ILodCont
|
|||||||
*/
|
*/
|
||||||
public class GlDummyUniformData implements ILodContainerUniformBufferWrapper
|
public class GlDummyUniformData implements ILodContainerUniformBufferWrapper
|
||||||
{
|
{
|
||||||
@Override public void createUniformData(LodBufferContainer bufferContainer) { }
|
@Override public void tryUpload(LodBufferContainer bufferContainer) { }
|
||||||
@Override public void tryUpload() { }
|
|
||||||
@Override public void upload() { }
|
|
||||||
@Override public void close() { }
|
@Override public void close() { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
Submodule coreSubProjects updated: 7239b51073...8cd926f4ac
Reference in New Issue
Block a user