diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/McGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/McGenericObjectRenderer.java index 748102a0d..35176e0b0 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/McGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/McGenericObjectRenderer.java @@ -53,7 +53,8 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.logging.f3.F3Screen; import com.seibel.distanthorizons.core.render.renderer.RenderParams; import com.seibel.distanthorizons.core.render.renderer.generic.GenericRenderObjectFactory; -import com.seibel.distanthorizons.core.render.renderer.generic.InstancedVboContainer; +import com.seibel.distanthorizons.core.render.renderer.generic.IGenericObjectVertexBufferContainer; +import com.seibel.distanthorizons.core.render.renderer.generic.NativeGlGenericObjectVertexContainer; import com.seibel.distanthorizons.core.render.renderer.generic.RenderableBoxGroup; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.math.Mat4f; @@ -397,7 +398,7 @@ public class McGenericObjectRenderer implements IMcGenericRenderer boxGroup.tryUpdateInstancedDataAsync(); // skip groups that haven't been uploaded yet - if (boxGroup.instancedVbos.getState() != InstancedVboContainer.EState.RENDER) + if (boxGroup.instancedVbos.getState() != IGenericObjectVertexBufferContainer.EState.RENDER) { continue; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/McInstancedVboContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/McInstancedVboContainer.java index d6e204c93..c479f632f 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/McInstancedVboContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/McInstancedVboContainer.java @@ -11,7 +11,7 @@ import com.seibel.distanthorizons.core.logging.DhLogger; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.render.glObject.GLEnums; import com.seibel.distanthorizons.core.render.glObject.GLProxy; -import com.seibel.distanthorizons.core.render.renderer.generic.IInstancedVboContainer; +import com.seibel.distanthorizons.core.render.renderer.generic.IGenericObjectVertexBufferContainer; import com.seibel.distanthorizons.core.render.renderer.generic.RenderableBoxGroup; import com.seibel.distanthorizons.core.util.ColorUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper; @@ -28,7 +28,7 @@ import java.util.function.Supplier; * * @see RenderableBoxGroup */ -public class McInstancedVboContainer implements IInstancedVboContainer +public class McInstancedVboContainer implements IGenericObjectVertexBufferContainer { private static final DhLogger LOGGER = new DhLoggerBuilder().build(); @@ -170,9 +170,9 @@ public class McInstancedVboContainer implements IInstancedVboContainer private EState state = EState.NEW; @Override - public IInstancedVboContainer.EState getState() { return this.state; } + public IGenericObjectVertexBufferContainer.EState getState() { return this.state; } @Override - public void setState(IInstancedVboContainer.EState state) { this.state = state; } + public void setState(IGenericObjectVertexBufferContainer.EState state) { this.state = state; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/VertexBufferWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/VertexBufferWrapper.java index a180419ca..0972e4b58 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/VertexBufferWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/helpers/VertexBufferWrapper.java @@ -12,6 +12,12 @@ import java.util.function.Supplier; public class VertexBufferWrapper implements IVertexBufferWrapper { + private static final GpuDevice GPU_DEVICE = RenderSystem.getDevice(); + private static final CommandEncoder COMMAND_ENCODER = GPU_DEVICE.createCommandEncoder(); + + + public final String name; + public String getName() { return this.name; } public GpuBuffer vboGpuBuffer = null; public int vertexCount = -1; @@ -19,13 +25,20 @@ public class VertexBufferWrapper implements IVertexBufferWrapper public boolean uploaded = false; - @Override - public int getVertexCount() { return this.vertexCount ;} + + //=============// + // constructor // + //=============// + //region + + public VertexBufferWrapper(String name) { this.name = name; } + + //endregion //========// - // render // + // upload // //========// //region @@ -37,20 +50,24 @@ public class VertexBufferWrapper implements IVertexBufferWrapper this.uploaded = true; - GpuDevice gpuDevice = RenderSystem.getDevice(); - CommandEncoder commandEncoder = gpuDevice.createCommandEncoder(); - - Supplier labelSupplier = () -> "distantHorizons:McLodRenderer"; - int usage = 8 | 32; // is this just using OpenGL VBO flags?, if so I can't find it, supposedly GlDevice on Mojang's side + int usage = GpuBuffer.USAGE_COPY_DST + | GpuBuffer.USAGE_VERTEX; int byteSize = (buffer.limit() - buffer.position()); - this.vboGpuBuffer = gpuDevice.createBuffer(labelSupplier, usage, byteSize); + this.vboGpuBuffer = GPU_DEVICE.createBuffer(this::getName, usage, byteSize); - { - GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vboGpuBuffer, /*offset*/0, byteSize); - commandEncoder.writeToBuffer(bufferSlice, buffer); - } + GpuBufferSlice bufferSlice = new GpuBufferSlice(this.vboGpuBuffer, /*offset*/0, byteSize); + COMMAND_ENCODER.writeToBuffer(bufferSlice, buffer); } + //endregion + + + + //================// + // base overrides // + //================// + //region + @Override public void close() { @@ -60,8 +77,8 @@ public class VertexBufferWrapper implements IVertexBufferWrapper } } - - //endregion + + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java index 5344336c4..ca36bce37 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java @@ -36,7 +36,8 @@ import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.level.IDhServerLevel; -import com.seibel.distanthorizons.core.render.renderer.generic.IInstancedVboContainer; +import com.seibel.distanthorizons.core.render.renderer.generic.IGenericObjectVertexBufferContainer; +import com.seibel.distanthorizons.core.render.renderer.generic.IGenericObjectVertexBufferContainer; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; @@ -363,12 +364,12 @@ public class WrapperFactory implements IWrapperFactory @Override - public IVertexBufferWrapper createVboWrapper() { return new VertexBufferWrapper(); } + public IVertexBufferWrapper createVboWrapper(String name) { return new VertexBufferWrapper(name); } @Override public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return new LodContainerUniformBufferWrapper(); } @Override - public IInstancedVboContainer createInstancedVboContainer() { return new McInstancedVboContainer(); } + public IGenericObjectVertexBufferContainer createInstancedVboContainer() { return new McInstancedVboContainer(); } @Override public IMcGenericRenderer createGenericRenderer() { return new McGenericObjectRenderer(); } diff --git a/coreSubProjects b/coreSubProjects index bd833ba51..a8c15d22c 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit bd833ba5106e2b1963e64c249b6e606e596d4367 +Subproject commit a8c15d22c34df7fe12ada0eb8853867bc7aaa5f8