Skip to content

Instantly share code, notes, and snippets.

@lowercasebtw
Created March 28, 2025 02:41
Show Gist options
  • Select an option

  • Save lowercasebtw/c624f2954e8ee91dc6295826eca089b4 to your computer and use it in GitHub Desktop.

Select an option

Save lowercasebtw/c624f2954e8ee91dc6295826eca089b4 to your computer and use it in GitHub Desktop.
public static void renderBufferWithPipeline(
String name,
RenderPipeline renderPipeline,
RenderTarget renderTarget,
Consumer<BufferBuilder> bufferBuilderConsumer,
Consumer<RenderPass> uniformAndSamplerConsumer
) {
VertexFormat.Mode mode = renderPipeline.getVertexFormatMode();
BufferBuilder builder = Tesselator.getInstance().begin(mode, renderPipeline.getVertexFormat());
bufferBuilderConsumer.accept(builder);
try (MeshData meshData = builder.buildOrThrow();
RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(renderTarget.getColorTexture(), OptionalInt.empty(), renderTarget.getDepthTexture(), OptionalDouble.empty());
GpuBuffer buffer = RenderSystem.getDevice().createBuffer(() -> name, BufferType.VERTICES, BufferUsage.DYNAMIC_WRITE, meshData.vertexBuffer())) {
RenderSystem.AutoStorageIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(mode);
renderPass.setPipeline(renderPipeline);
renderPass.setVertexBuffer(0, buffer);
renderPass.setIndexBuffer(autoStorageIndexBuffer.getBuffer(meshData.drawState().indexCount()), autoStorageIndexBuffer.type());
uniformAndSamplerConsumer.accept(renderPass);
renderPass.drawIndexed(0, meshData.drawState().indexCount());
}
}
public static void renderBufferWithPipeline(
RenderPipeline renderPipeline,
RenderTarget renderTarget,
Consumer<BufferBuilder> bufferBuilderConsumer,
Consumer<RenderPass> uniformAndSamplerConsumer
) {
renderBufferWithPipeline("Dynamic vertex buffer", renderPipeline, renderTarget, bufferBuilderConsumer, uniformAndSamplerConsumer);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment