fix leak in LOD renderer and start separating uniforms

This commit is contained in:
James Seibel
2026-03-05 17:32:43 -06:00
parent 05d573c847
commit 3b5728692d
7 changed files with 319 additions and 125 deletions
@@ -0,0 +1,83 @@
package com.seibel.distanthorizons.common.renderTest;
import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.buffers.GpuBufferSlice;
import com.mojang.blaze3d.systems.CommandEncoder;
import com.mojang.blaze3d.systems.GpuDevice;
import com.mojang.blaze3d.systems.RenderSystem;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IUniformBufferWrapper;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.function.Supplier;
public abstract class AbstractUniformBufferWrapper implements IUniformBufferWrapper
{
private final String name;
private ByteBuffer buffer = null;
public GpuBuffer gpuBuffer = null;
//========//
// render //
//========//
//region
public AbstractUniformBufferWrapper() { this.name = this.getClass().getSimpleName(); }
public AbstractUniformBufferWrapper(String name) { this.name = name; }
protected ByteBuffer getOrCreateBuffer(int size)
{
GpuDevice gpuDevice = RenderSystem.getDevice();
if (this.buffer == null
|| this.buffer.capacity() != size)
{
this.buffer = ByteBuffer.allocateDirect(size);
this.buffer.order(ByteOrder.LITTLE_ENDIAN);
// GpuBuffer.USAGE_UNIFORM = 128
// GpuBuffer.USAGE_INDEX = 64
int usage = 8 | 32 | 128; // is this just using OpenGL VBO flags?, if so I can't find it, supposedly GlDevice on Mojang's side
int byteSize = (this.buffer.limit() - this.buffer.position());
this.gpuBuffer = gpuDevice.createBuffer(this::getName, usage, byteSize);
}
return this.buffer;
}
@Override
public void upload() throws IllegalStateException
{
if (this.buffer == null)
{
throw new IllegalStateException("Upload called before buffer was created");
}
GpuDevice gpuDevice = RenderSystem.getDevice();
CommandEncoder commandEncoder = gpuDevice.createCommandEncoder();
int byteSize = (this.buffer.limit() - this.buffer.position());
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.gpuBuffer, /*offset*/0, byteSize);
commandEncoder.writeToBuffer(bufferSlice, this.buffer);
}
private String getName() { return this.name; }
@Override
public void close()
{
if (this.gpuBuffer != null)
{
this.gpuBuffer.close();
}
}
//endregion
}
@@ -0,0 +1,63 @@
package com.seibel.distanthorizons.common.renderTest;
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.systems.CommandEncoder;
import com.mojang.blaze3d.systems.GpuDevice;
import com.mojang.blaze3d.systems.RenderSystem;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
import com.seibel.distanthorizons.core.pos.DhSectionPos;
import com.seibel.distanthorizons.core.render.renderer.RenderParams;
import com.seibel.distanthorizons.core.util.math.Mat4f;
import com.seibel.distanthorizons.core.util.math.Vec3d;
import com.seibel.distanthorizons.core.util.math.Vec3f;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.ILodContainerUniformBufferWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IUniformBufferWrapper;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.function.Supplier;
public class LodContainerUniformBufferWrapper extends AbstractUniformBufferWrapper implements ILodContainerUniformBufferWrapper
{
//========//
// ??? //
//========//
//region
public void createBufferData(RenderParams renderEventParam, LodBufferContainer bufferContainer)
{
Vec3d camPos = renderEventParam.exactCameraPosition;
Vec3f modelOffset = new Vec3f(
(float) (bufferContainer.minCornerBlockPos.getX() - camPos.x),
(float) (bufferContainer.minCornerBlockPos.getY() - camPos.y),
(float) (bufferContainer.minCornerBlockPos.getZ() - camPos.z));
Mat4f combinedMatrix = new Mat4f(renderEventParam.dhProjectionMatrix);
combinedMatrix.multiply(renderEventParam.dhModelViewMatrix);
// 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();
}
//endregion
}
@@ -24,7 +24,6 @@ import com.mojang.blaze3d.buffers.GpuBufferSlice;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.platform.DepthTestFunction;
import com.mojang.blaze3d.platform.PolygonMode;
import com.mojang.blaze3d.shaders.UniformType;
import com.mojang.blaze3d.systems.CommandEncoder;
import com.mojang.blaze3d.systems.GpuDevice;
import com.mojang.blaze3d.systems.RenderPass;
@@ -36,7 +35,6 @@ import com.seibel.distanthorizons.core.logging.DhLogger;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IMcTestRenderer;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.Identifier;
@@ -64,6 +62,14 @@ public class McApplyRenderer
private GpuBuffer vboGpuBuffer;
private GpuTextureView dhColorTextureView;
private GpuSampler dhColorTextureSampler;
private GpuTextureView dhDepthTextureView;
private GpuSampler dhDepthTextureSampler;
private GpuTextureView mcColorTextureView;
//=============//
// constructor //
@@ -179,18 +185,45 @@ public class McApplyRenderer
CommandEncoder commandEncoder = gpuDevice.createCommandEncoder();
{
GpuTexture mcColorTexture = Minecraft.getInstance().getMainRenderTarget().getColorTexture();
if (this.mcColorTextureView == null
|| this.mcColorTextureView.texture() != mcColorTexture)
{
this.mcColorTextureView = gpuDevice.createTextureView(mcColorTexture);
}
if (this.dhColorTextureSampler == null)
{
this.dhColorTextureSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
this.dhDepthTextureSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
}
}
// create a render pass
{
Supplier<String> debugLabelSupplier = () -> "distantHorizons:McApplyRenderer";
GpuTextureView colorTexture = gpuDevice.createTextureView(Minecraft.getInstance().getMainRenderTarget().getColorTexture());
OptionalInt optionalClearColorAsInt = OptionalInt.empty();
GpuTextureView depthTexture = null;
OptionalDouble optionalDepthValueAsDouble = OptionalDouble.empty();
try (RenderPass renderPass = commandEncoder.createRenderPass(
debugLabelSupplier,
colorTexture,
this.mcColorTextureView,
optionalClearColorAsInt,
depthTexture, optionalDepthValueAsDouble))
{
@@ -200,29 +233,8 @@ public class McApplyRenderer
// render pass setup
{
// bind color texture
{
GpuTextureView textureView = gpuDevice.createTextureView(McLodRenderer.INSTANCE.dhColorTexture);
GpuSampler gpuSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
renderPass.bindTexture("uDhColorTexture", textureView, gpuSampler);
}
// bind depth texture
{
GpuTextureView textureView = gpuDevice.createTextureView(McLodRenderer.INSTANCE.dhDepthTexture);
GpuSampler gpuSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
renderPass.bindTexture("uDhDepthTexture", textureView, gpuSampler);
}
renderPass.bindTexture("uDhDepthTexture", McLodRenderer.INSTANCE.dhDepthTextureView, this.dhColorTextureSampler);
renderPass.bindTexture("uDhColorTexture", McLodRenderer.INSTANCE.dhColorTextureView, this.dhDepthTextureSampler);
// bind VBO
renderPass.setVertexBuffer(0, this.vboGpuBuffer); // vertex buffer can only be "0" lol
@@ -16,19 +16,20 @@ import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.*;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.seibel.distanthorizons.api.objects.math.DhApiVec3f;
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.LodBufferContainer;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.logging.DhLogger;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhSectionPos;
import com.seibel.distanthorizons.core.render.glObject.GLEnums;
import com.seibel.distanthorizons.core.render.glObject.buffer.QuadElementBuffer;
import com.seibel.distanthorizons.core.render.renderer.RenderParams;
import com.seibel.distanthorizons.core.util.ColorUtil;
import com.seibel.distanthorizons.core.util.RenderUtil;
import com.seibel.distanthorizons.core.util.math.Mat4f;
import com.seibel.distanthorizons.core.util.objects.SortedArraySet;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IProfilerWrapper;
@@ -64,10 +65,17 @@ public class McLodRenderer implements IMcLodRenderer
private GpuBuffer indexBuffer;
private GpuBuffer fragUniformBuffer;
private GpuBuffer vertUniformBuffer;
private GpuBuffer vertSharedUniformBuffer;
public GpuTexture dhDepthTexture;
public GpuTextureView dhDepthTextureView;
public GpuTexture dhColorTexture;
public GpuTextureView dhColorTextureView;
private GpuTexture mcLightTexture;
private GpuTextureView mcLightTextureView;
private GpuSampler mcLightGpuSampler;
@@ -117,7 +125,8 @@ public class McLodRenderer implements IMcLodRenderer
pipelineBuilder.withSampler("uLightMap");
pipelineBuilder.withUniform("vertUniformBlock", UniformType.UNIFORM_BUFFER);
pipelineBuilder.withUniform("vertUniqueUniformBlock", UniformType.UNIFORM_BUFFER);
pipelineBuilder.withUniform("vertSharedUniformBlock", UniformType.UNIFORM_BUFFER);
pipelineBuilder.withUniform("fragUniformBlock", UniformType.UNIFORM_BUFFER);
pipelineBuilder.withVertexFormat(this.vertexFormat, VertexFormat.Mode.TRIANGLES);
@@ -134,9 +143,6 @@ public class McLodRenderer implements IMcLodRenderer
pipelineBuilder.withBlend(BlendFunction.TRANSLUCENT);
this.transparentPipeline = pipelineBuilder.build();
}
}
//endregion
@@ -155,8 +161,7 @@ public class McLodRenderer implements IMcLodRenderer
public void render(
RenderParams renderEventParam,
boolean opaquePass,
DhApiVec3f modelOffset,
IVertexBufferWrapper[] bufferList,
SortedArraySet<LodBufferContainer> bufferContainers,
IProfilerWrapper profiler)
{
this.tryInit();
@@ -168,10 +173,20 @@ public class McLodRenderer implements IMcLodRenderer
profiler.push("set vert uniforms");
profiler.push("vert unique uniforms");
{
// create data //
for (int lodIndex = 0; lodIndex < bufferContainers.size(); lodIndex++)
{
LodBufferContainer bufferContainer = bufferContainers.get(lodIndex);
bufferContainer.uniforms.createBufferData(renderEventParam, bufferContainer);
bufferContainer.uniforms.upload();
}
}
profiler.popPush("vert share uniforms");
{
Mat4f combinedMatrix = new Mat4f(renderEventParam.dhProjectionMatrix);
combinedMatrix.multiply(renderEventParam.dhModelViewMatrix);
@@ -196,33 +211,27 @@ public class McLodRenderer implements IMcLodRenderer
.putFloat() // uMircoOffset
.putFloat() // uEarthRadius
.putVec3() // uModelOffset
.putMat4f() // uCombinedMatrix
.get();
ByteBuffer buffer = ByteBuffer.allocateDirect(uniformBufferSize);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer = Std140Builder.intoBuffer(buffer)
Std140Builder.intoBuffer(buffer)
.putInt(0) // uIsWhiteWorld
.putFloat((float)renderEventParam.worldYOffset) // uWorldYOffset
.putFloat((float) renderEventParam.worldYOffset) // uWorldYOffset
.putFloat(0.01f) // uMircoOffset // 0.01 block offset
.putFloat(earthCurveRatio) // uEarthRadius
.putVec3(modelOffset.x, modelOffset.y, modelOffset.z) // uModelOffset
.putMat4f(combinedMatrix.createJomlMatrix()) // uCombinedMatrix
.get();
this.vertUniformBuffer = UniformHandler.createBuffer("vertUniformBlock", uniformBufferSize, this.vertUniformBuffer);
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vertUniformBuffer, 0, uniformBufferSize);
this.vertSharedUniformBuffer = UniformHandler.createBuffer("vertSharedUniformBlock", uniformBufferSize, this.vertSharedUniformBuffer);
GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vertSharedUniformBuffer, 0, uniformBufferSize);
commandEncoder.writeToBuffer(bufferSlice, buffer);
}
profiler.popPush("set frag uniforms");
{
int uniformBufferSize = new Std140SizeCalculator()
@@ -297,7 +306,10 @@ public class McLodRenderer implements IMcLodRenderer
if (this.dhDepthTexture != null)
{
this.dhDepthTexture.close();
this.dhDepthTextureView.close();
this.dhColorTexture.close();
this.dhDepthTextureView.close();
}
// TODO USAGE_TEXTURE_BINDING = 4
@@ -308,97 +320,124 @@ public class McLodRenderer implements IMcLodRenderer
MC_RENDER.getTargetFramebufferViewportWidth(), MC_RENDER.getTargetFramebufferViewportHeight(),
1, 1
);
this.dhDepthTextureView = gpuDevice.createTextureView(this.dhDepthTexture);
this.dhColorTexture = gpuDevice.createTexture("DhColorTexture",
usage,
TextureFormat.RGBA8,
MC_RENDER.getTargetFramebufferViewportWidth(), MC_RENDER.getTargetFramebufferViewportHeight(),
1, 1
);
this.dhColorTextureView = gpuDevice.createTextureView(this.dhColorTexture);
}
profiler.popPush("create render pass");
// create a render pass
Supplier<String> debugLabelSupplier = () -> "distantHorizons:McLodRenderer";
OptionalInt optionalClearColorAsInt = OptionalInt.empty();
OptionalDouble optionalDepthValueAsDouble = OptionalDouble.empty();
try (
GpuTextureView colorTextureView = gpuDevice.createTextureView(this.dhColorTexture);
GpuTextureView depthTextureView = gpuDevice.createTextureView(this.dhDepthTexture);
RenderPass renderPass = commandEncoder.createRenderPass(
debugLabelSupplier,
colorTextureView,
optionalClearColorAsInt,
depthTextureView, optionalDepthValueAsDouble))
LightMapWrapper lightMapWrapper = (LightMapWrapper) renderEventParam.lightmap;
if (this.mcLightTexture != lightMapWrapper.gpuTexture)
{
//renderPass.pushDebugGroup();
//renderPass.popDebugGroup();
// bind MC Lightmap
this.mcLightTexture = lightMapWrapper.gpuTexture;
if (this.mcLightTextureView != null)
{
LightMapWrapper lightMapWrapper = (LightMapWrapper) renderEventParam.lightmap;
GpuTextureView textureView = gpuDevice.createTextureView(lightMapWrapper.gpuTexture);
GpuSampler gpuSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
renderPass.bindTexture("uLightMap", textureView, gpuSampler);
this.mcLightTextureView.close();
}
renderPass.setUniform("vertUniformBlock", this.vertUniformBuffer);
renderPass.setUniform("fragUniformBlock", this.fragUniformBuffer);
this.mcLightTextureView = gpuDevice.createTextureView(this.mcLightTexture);
this.mcLightGpuSampler = gpuDevice.createSampler(
AddressMode.CLAMP_TO_EDGE, AddressMode.CLAMP_TO_EDGE, // U,V
FilterMode.NEAREST, FilterMode.NEAREST, // minFilter, magFilter
1, // maxAnisotropy
OptionalDouble.empty() // maxLod
);
}
{
profiler.popPush("setup");
// create a render pass
Supplier<String> debugLabelSupplier = () -> "distantHorizons:McLodRenderer";
OptionalInt optionalClearColorAsInt = OptionalInt.empty();
OptionalDouble optionalDepthValueAsDouble = OptionalDouble.empty();
profiler.popPush("set pipeline");
renderPass.setPipeline(opaquePass ? this.opaquePipeline : this.transparentPipeline);
renderPass.setIndexBuffer(this.indexBuffer, VertexFormat.IndexType.INT);
// render pass setup
for (int i = 0; i < bufferList.length; i++)
try(RenderPass renderPass = commandEncoder.createRenderPass(
debugLabelSupplier,
this.dhColorTextureView,
optionalClearColorAsInt,
this.dhDepthTextureView, optionalDepthValueAsDouble)
)
{
VertexBufferWrapper bufferWrapper = (VertexBufferWrapper)bufferList[i];
if (!bufferWrapper.uploaded
|| bufferWrapper.vertexCount == 0)
//renderPass.pushDebugGroup();
//renderPass.popDebugGroup();
// bind MC Lightmap
renderPass.bindTexture("uLightMap", this.mcLightTextureView, this.mcLightGpuSampler);
// set pipeline
renderPass.setPipeline(opaquePass ? this.opaquePipeline : this.transparentPipeline);
renderPass.setIndexBuffer(this.indexBuffer, VertexFormat.IndexType.INT);
// shared uniforms
renderPass.setUniform("fragUniformBlock", this.fragUniformBuffer);
renderPass.setUniform("vertSharedUniformBlock", this.vertSharedUniformBuffer);
for (int lodIndex = 0; lodIndex < bufferContainers.size(); lodIndex++)
{
continue;
}
profiler.popPush("set VBO");
renderPass.setVertexBuffer(0, bufferWrapper.vboGpuBuffer); // vertex buffer can only be "0" lol
profiler.popPush("render");
try
{
renderPass.drawIndexed(
/*indexStart*/ 0,
/*firstIndex*/0,
/*indexCount*/bufferWrapper.indexCount,
/*instanceCount*/1);
}
catch (IllegalStateException e)
{
if (!e.getMessage().contains("Vertex buffer at slot 0 has been closed"))
profiler.popPush("binding");
LodBufferContainer bufferContainer = bufferContainers.get(lodIndex);
LodContainerUniformBufferWrapper uniformWrapper = (LodContainerUniformBufferWrapper)bufferContainer.uniforms;
boolean columnBuilderDebugEnabled = Config.Client.Advanced.Debugging.ColumnBuilderDebugging.columnBuilderDebugEnable.get();
if (columnBuilderDebugEnabled)
{
throw new RuntimeException(e);
if (DhSectionPos.getDetailLevel(bufferContainer.pos) == Config.Client.Advanced.Debugging.ColumnBuilderDebugging.columnBuilderDebugDetailLevel.get()
&& DhSectionPos.getX(bufferContainer.pos) == Config.Client.Advanced.Debugging.ColumnBuilderDebugging.columnBuilderDebugXPos.get()
&& DhSectionPos.getZ(bufferContainer.pos) == Config.Client.Advanced.Debugging.ColumnBuilderDebugging.columnBuilderDebugZPos.get())
{
int breakpoint = 0;
}
else
{
continue;
}
}
renderPass.setUniform("vertUniqueUniformBlock", uniformWrapper.gpuBuffer);
profiler.popPush("rendering");
// render each buffer
IVertexBufferWrapper[] bufferWrapperList = opaquePass ? bufferContainer.vbos : bufferContainer.vbosTransparent;
for (int i = 0; i < bufferWrapperList.length; i++)
{
VertexBufferWrapper bufferWrapper = (VertexBufferWrapper) bufferWrapperList[i];
if (!bufferWrapper.uploaded
|| bufferWrapper.vertexCount == 0)
{
continue;
}
//ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, new DhApiBeforeBufferRenderEvent.EventParam(renderEventParam, modelPos));
renderPass.setVertexBuffer(0, bufferWrapper.vboGpuBuffer); // vertex buffer can only be "0" lol
renderPass.drawIndexed(
/*indexStart*/ 0,
/*firstIndex*/0,
/*indexCount*/bufferWrapper.indexCount,
/*instanceCount*/1);
}
}
}
}
profiler.pop();
}
@@ -4,6 +4,7 @@ import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.systems.GpuDevice;
import com.mojang.blaze3d.systems.RenderSystem;
@Deprecated // TODO use Uniform Wrapper instead
public class UniformHandler
{
@@ -24,6 +24,7 @@ import com.seibel.distanthorizons.api.interfaces.block.IDhApiBlockStateWrapper;
import com.seibel.distanthorizons.api.interfaces.override.worldGenerator.IDhApiWorldGenerator;
import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper;
import com.seibel.distanthorizons.api.interfaces.factories.IDhApiWrapperFactory;
import com.seibel.distanthorizons.common.renderTest.LodContainerUniformBufferWrapper;
import com.seibel.distanthorizons.common.renderTest.McGenericObjectRenderer;
import com.seibel.distanthorizons.common.renderTest.McInstancedVboContainer;
import com.seibel.distanthorizons.common.renderTest.VertexBufferWrapper;
@@ -40,7 +41,9 @@ import com.seibel.distanthorizons.core.util.LodUtil;
import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory;
import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.ILodContainerUniformBufferWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IMcGenericRenderer;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IUniformBufferWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IVertexBufferWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
@@ -363,22 +366,15 @@ public class WrapperFactory implements IWrapperFactory
@Override
public IVertexBufferWrapper createVboWrapper()
{
return new VertexBufferWrapper();
}
public IVertexBufferWrapper createVboWrapper() { return new VertexBufferWrapper(); }
@Override
public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return new LodContainerUniformBufferWrapper(); }
@Override
public IInstancedVboContainer createInstancedVboContainer()
{
return new McInstancedVboContainer();
}
public IInstancedVboContainer createInstancedVboContainer() { return new McInstancedVboContainer(); }
@Override
public IMcGenericRenderer createGenericRenderer()
{
return new McGenericObjectRenderer();
}
public IMcGenericRenderer createGenericRenderer() { return new McGenericObjectRenderer(); }