Class BufferBuilder

All Implemented Interfaces:
BufferVertexConsumer, VertexConsumer

@Environment(CLIENT) public class BufferBuilder extends FixedColorVertexConsumer implements BufferVertexConsumer
Builds a buffer of primitives and optionally sorts them by the distance from the camera.

This builder can sort quad primitives. It sorts them by the distance between the camera position and the center of the quad. Sorting is required when drawing translucent objects because they have to be drawn in back-to-front order. See Transparency Sorting - OpenGL Wiki.

For LINES and LINE_STRIP draw modes, this builder duplicates every vertex in a line to produce a quad with zero area. See GameRenderer.getRenderTypeLinesProgram().

Mappings:
Namespace Name
official elk
intermediary net/minecraft/class_287
named net/minecraft/client/render/BufferBuilder
  • Field Details

    • ROUND_SIZE_CHANGE

      private static final int ROUND_SIZE_CHANGE
      An integer a size change of a buffer must be a multiple of
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official f Lelk;f:I
      intermediary field_32050 Lnet/minecraft/class_287;field_32050:I
      named ROUND_SIZE_CHANGE Lnet/minecraft/client/render/BufferBuilder;ROUND_SIZE_CHANGE:I
    • LOGGER

      private static final Logger LOGGER
      Mappings:
      Namespace Name Mixin selector
      official g Lelk;g:Lorg/slf4j/Logger;
      intermediary field_1557 Lnet/minecraft/class_287;field_1557:Lorg/slf4j/Logger;
      named LOGGER Lnet/minecraft/client/render/BufferBuilder;LOGGER:Lorg/slf4j/Logger;
    • buffer

      private ByteBuffer buffer
      Mappings:
      Namespace Name Mixin selector
      official h Lelk;h:Ljava/nio/ByteBuffer;
      intermediary field_1555 Lnet/minecraft/class_287;field_1555:Ljava/nio/ByteBuffer;
      named buffer Lnet/minecraft/client/render/BufferBuilder;buffer:Ljava/nio/ByteBuffer;
    • builtBufferCount

      private int builtBufferCount
      Mappings:
      Namespace Name Mixin selector
      official i Lelk;i:I
      intermediary field_39061 Lnet/minecraft/class_287;field_39061:I
      named builtBufferCount Lnet/minecraft/client/render/BufferBuilder;builtBufferCount:I
    • batchOffset

      private int batchOffset
      Mappings:
      Namespace Name Mixin selector
      official j Lelk;j:I
      intermediary field_39062 Lnet/minecraft/class_287;field_39062:I
      named batchOffset Lnet/minecraft/client/render/BufferBuilder;batchOffset:I
    • elementOffset

      private int elementOffset
      Mappings:
      Namespace Name Mixin selector
      official k Lelk;k:I
      intermediary field_20884 Lnet/minecraft/class_287;field_20884:I
      named elementOffset Lnet/minecraft/client/render/BufferBuilder;elementOffset:I
    • vertexCount

      private int vertexCount
      Mappings:
      Namespace Name Mixin selector
      official l Lelk;l:I
      intermediary field_1554 Lnet/minecraft/class_287;field_1554:I
      named vertexCount Lnet/minecraft/client/render/BufferBuilder;vertexCount:I
    • currentElement

      @Nullable private @Nullable VertexFormatElement currentElement
      Mappings:
      Namespace Name Mixin selector
      official m Lelk;m:Lelv;
      intermediary field_1558 Lnet/minecraft/class_287;field_1558:Lnet/minecraft/class_296;
      named currentElement Lnet/minecraft/client/render/BufferBuilder;currentElement:Lnet/minecraft/client/render/VertexFormatElement;
    • currentElementId

      private int currentElementId
      Mappings:
      Namespace Name Mixin selector
      official n Lelk;n:I
      intermediary field_1553 Lnet/minecraft/class_287;field_1553:I
      named currentElementId Lnet/minecraft/client/render/BufferBuilder;currentElementId:I
    • format

      private VertexFormat format
      Mappings:
      Namespace Name Mixin selector
      official o Lelk;o:Lelu;
      intermediary field_1565 Lnet/minecraft/class_287;field_1565:Lnet/minecraft/class_293;
      named format Lnet/minecraft/client/render/BufferBuilder;format:Lnet/minecraft/client/render/VertexFormat;
    • drawMode

      private VertexFormat.DrawMode drawMode
      Mappings:
      Namespace Name Mixin selector
      official p Lelk;p:Lelu$b;
      intermediary field_1567 Lnet/minecraft/class_287;field_1567:Lnet/minecraft/class_293$class_5596;
      named drawMode Lnet/minecraft/client/render/BufferBuilder;drawMode:Lnet/minecraft/client/render/VertexFormat$DrawMode;
    • canSkipElementChecks

      private boolean canSkipElementChecks
      Whether this builder is aware of the vertex format and can skip checks for the current target element while building a vertex in vertex(float, float, float, float, float, float, float, float, float, int, int, float, float, float).
      Mappings:
      Namespace Name Mixin selector
      official q Lelk;q:Z
      intermediary field_21594 Lnet/minecraft/class_287;field_21594:Z
      named canSkipElementChecks Lnet/minecraft/client/render/BufferBuilder;canSkipElementChecks:Z
    • hasOverlay

      private boolean hasOverlay
      Mappings:
      Namespace Name Mixin selector
      official r Lelk;r:Z
      intermediary field_21595 Lnet/minecraft/class_287;field_21595:Z
      named hasOverlay Lnet/minecraft/client/render/BufferBuilder;hasOverlay:Z
    • building

      private boolean building
      Mappings:
      Namespace Name Mixin selector
      official s Lelk;s:Z
      intermediary field_1556 Lnet/minecraft/class_287;field_1556:Z
      named building Lnet/minecraft/client/render/BufferBuilder;building:Z
    • sortingPrimitiveCenters

      @Nullable private @Nullable Vector3f[] sortingPrimitiveCenters
      Mappings:
      Namespace Name Mixin selector
      official t Lelk;t:[Lorg/joml/Vector3f;
      intermediary field_27348 Lnet/minecraft/class_287;field_27348:[Lorg/joml/Vector3f;
      named sortingPrimitiveCenters Lnet/minecraft/client/render/BufferBuilder;sortingPrimitiveCenters:[Lorg/joml/Vector3f;
    • sorter

      @Nullable private @Nullable VertexSorter sorter
      Mappings:
      Namespace Name Mixin selector
      official u Lelk;u:Lelx;
      intermediary field_43358 Lnet/minecraft/class_287;field_43358:Lnet/minecraft/class_8251;
      named sorter Lnet/minecraft/client/render/BufferBuilder;sorter:Lcom/mojang/blaze3d/systems/VertexSorter;
    • hasNoVertexBuffer

      private boolean hasNoVertexBuffer
      Mappings:
      Namespace Name Mixin selector
      official v Lelk;v:Z
      intermediary field_27352 Lnet/minecraft/class_287;field_27352:Z
      named hasNoVertexBuffer Lnet/minecraft/client/render/BufferBuilder;hasNoVertexBuffer:Z
  • Constructor Details

    • BufferBuilder

      public BufferBuilder(int initialCapacity)
      Mappings:
      Namespace Name Mixin selector
      official <init> Lelk;<init>(I)V
      intermediary <init> Lnet/minecraft/class_287;<init>(I)V
      named <init> Lnet/minecraft/client/render/BufferBuilder;<init>(I)V
  • Method Details

    • grow

      private void grow()
      Mappings:
      Namespace Name Mixin selector
      official l Lelk;l()V
      intermediary method_22892 Lnet/minecraft/class_287;method_22892()V
      named grow Lnet/minecraft/client/render/BufferBuilder;grow()V
    • grow

      private void grow(int size)
      Mappings:
      Namespace Name Mixin selector
      official d Lelk;d(I)V
      intermediary method_1335 Lnet/minecraft/class_287;method_1335(I)V
      named grow Lnet/minecraft/client/render/BufferBuilder;grow(I)V
    • roundBufferSize

      private static int roundBufferSize(int amount)
      Mappings:
      Namespace Name Mixin selector
      official e Lelk;e(I)I
      intermediary method_16005 Lnet/minecraft/class_287;method_16005(I)I
      named roundBufferSize Lnet/minecraft/client/render/BufferBuilder;roundBufferSize(I)I
    • setSorter

      public void setSorter(VertexSorter sorter)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(Lelx;)V
      intermediary method_49904 Lnet/minecraft/class_287;method_49904(Lnet/minecraft/class_8251;)V
      named setSorter Lnet/minecraft/client/render/BufferBuilder;setSorter(Lcom/mojang/blaze3d/systems/VertexSorter;)V
    • getSortingData

      public BufferBuilder.TransparentSortingData getSortingData()
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a()Lelk$c;
      intermediary method_1334 Lnet/minecraft/class_287;method_1334()Lnet/minecraft/class_287$class_5594;
      named getSortingData Lnet/minecraft/client/render/BufferBuilder;getSortingData()Lnet/minecraft/client/render/BufferBuilder$TransparentSortingData;
    • beginSortedIndexBuffer

      public void beginSortedIndexBuffer(BufferBuilder.TransparentSortingData state)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(Lelk$c;)V
      intermediary method_1324 Lnet/minecraft/class_287;method_1324(Lnet/minecraft/class_287$class_5594;)V
      named beginSortedIndexBuffer Lnet/minecraft/client/render/BufferBuilder;beginSortedIndexBuffer(Lnet/minecraft/client/render/BufferBuilder$TransparentSortingData;)V
    • begin

      public void begin(VertexFormat.DrawMode drawMode, VertexFormat format)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(Lelu$b;Lelu;)V
      intermediary method_1328 Lnet/minecraft/class_287;method_1328(Lnet/minecraft/class_293$class_5596;Lnet/minecraft/class_293;)V
      named begin Lnet/minecraft/client/render/BufferBuilder;begin(Lnet/minecraft/client/render/VertexFormat$DrawMode;Lnet/minecraft/client/render/VertexFormat;)V
    • setFormat

      private void setFormat(VertexFormat format)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(Lelu;)V
      intermediary method_23918 Lnet/minecraft/class_287;method_23918(Lnet/minecraft/class_293;)V
      named setFormat Lnet/minecraft/client/render/BufferBuilder;setFormat(Lnet/minecraft/client/render/VertexFormat;)V
    • getIndexConsumer

      private IntConsumer getIndexConsumer(int offset, VertexFormat.IndexType indexType)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(ILelu$a;)Lit/unimi/dsi/fastutil/ints/IntConsumer;
      intermediary method_31949 Lnet/minecraft/class_287;method_31949(ILnet/minecraft/class_293$class_5595;)Lit/unimi/dsi/fastutil/ints/IntConsumer;
      named getIndexConsumer Lnet/minecraft/client/render/BufferBuilder;getIndexConsumer(ILnet/minecraft/client/render/VertexFormat$IndexType;)Lit/unimi/dsi/fastutil/ints/IntConsumer;
    • buildPrimitiveCenters

      private Vector3f[] buildPrimitiveCenters()
      Mappings:
      Namespace Name Mixin selector
      official m Lelk;m()[Lorg/joml/Vector3f;
      intermediary method_31954 Lnet/minecraft/class_287;method_31954()[Lorg/joml/Vector3f;
      named buildPrimitiveCenters Lnet/minecraft/client/render/BufferBuilder;buildPrimitiveCenters()[Lorg/joml/Vector3f;
    • writeSortedIndices

      private void writeSortedIndices(VertexFormat.IndexType indexType)
      Mappings:
      Namespace Name Mixin selector
      official a Lelk;a(Lelu$a;)V
      intermediary method_31950 Lnet/minecraft/class_287;method_31950(Lnet/minecraft/class_293$class_5595;)V
      named writeSortedIndices Lnet/minecraft/client/render/BufferBuilder;writeSortedIndices(Lnet/minecraft/client/render/VertexFormat$IndexType;)V
    • isBatchEmpty

      public boolean isBatchEmpty()
      Mappings:
      Namespace Name Mixin selector
      official b Lelk;b()Z
      intermediary method_43574 Lnet/minecraft/class_287;method_43574()Z
      named isBatchEmpty Lnet/minecraft/client/render/BufferBuilder;isBatchEmpty()Z
    • endNullable

      @Nullable public @Nullable BufferBuilder.BuiltBuffer endNullable()
      Builds a buffer if there are vertices in the current batch and resets the building state.
      Returns:
      the built buffer if there are vertices, otherwise null
      Throws:
      IllegalStateException - if this builder has not begun building
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official c Lelk;c()Lelk$b;
      intermediary method_43575 Lnet/minecraft/class_287;method_43575()Lnet/minecraft/class_287$class_7433;
      named endNullable Lnet/minecraft/client/render/BufferBuilder;endNullable()Lnet/minecraft/client/render/BufferBuilder$BuiltBuffer;
    • end

      Builds a buffer from the current batch and resets the building state.

      Unlike endNullable(), this always builds a buffer even if there are no vertices in the current batch.

      Returns:
      the buffer built from the current batch
      Throws:
      IllegalStateException - if this builder has not begun building
      Mappings:
      Namespace Name Mixin selector
      official d Lelk;d()Lelk$b;
      intermediary method_1326 Lnet/minecraft/class_287;method_1326()Lnet/minecraft/class_287$class_7433;
      named end Lnet/minecraft/client/render/BufferBuilder;end()Lnet/minecraft/client/render/BufferBuilder$BuiltBuffer;
    • ensureBuilding

      private void ensureBuilding()
      Mappings:
      Namespace Name Mixin selector
      official n Lelk;n()V
      intermediary method_43577 Lnet/minecraft/class_287;method_43577()V
      named ensureBuilding Lnet/minecraft/client/render/BufferBuilder;ensureBuilding()V
    • build

      private BufferBuilder.BuiltBuffer build()
      Mappings:
      Namespace Name Mixin selector
      official o Lelk;o()Lelk$b;
      intermediary method_43578 Lnet/minecraft/class_287;method_43578()Lnet/minecraft/class_287$class_7433;
      named build Lnet/minecraft/client/render/BufferBuilder;build()Lnet/minecraft/client/render/BufferBuilder$BuiltBuffer;
    • resetBuilding

      private void resetBuilding()
      Mappings:
      Namespace Name Mixin selector
      official p Lelk;p()V
      intermediary method_43579 Lnet/minecraft/class_287;method_43579()V
      named resetBuilding Lnet/minecraft/client/render/BufferBuilder;resetBuilding()V
    • putByte

      public void putByte(int index, byte value)
      Specified by:
      putByte in interface BufferVertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official a Lelm;a(IB)V
      intermediary method_22896 Lnet/minecraft/class_4584;method_22896(IB)V
      named putByte Lnet/minecraft/client/render/BufferVertexConsumer;putByte(IB)V
    • putShort

      public void putShort(int index, short value)
      Specified by:
      putShort in interface BufferVertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official a Lelm;a(IS)V
      intermediary method_22898 Lnet/minecraft/class_4584;method_22898(IS)V
      named putShort Lnet/minecraft/client/render/BufferVertexConsumer;putShort(IS)V
    • putFloat

      public void putFloat(int index, float value)
      Specified by:
      putFloat in interface BufferVertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official a Lelm;a(IF)V
      intermediary method_22897 Lnet/minecraft/class_4584;method_22897(IF)V
      named putFloat Lnet/minecraft/client/render/BufferVertexConsumer;putFloat(IF)V
    • next

      public void next()
      Starts consuming the next vertex.

      This method must be called after specifying all elements in a vertex.

      Specified by:
      next in interface VertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official e Lelt;e()V
      intermediary method_1344 Lnet/minecraft/class_4588;method_1344()V
      named next Lnet/minecraft/client/render/VertexConsumer;next()V
    • nextElement

      public void nextElement()
      Specified by:
      nextElement in interface BufferVertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official f Lelm;f()V
      intermediary method_1325 Lnet/minecraft/class_4584;method_1325()V
      named nextElement Lnet/minecraft/client/render/BufferVertexConsumer;nextElement()V
    • color

      public VertexConsumer color(int red, int green, int blue, int alpha)
      Specifies the color element of the current vertex.
      Specified by:
      color in interface BufferVertexConsumer
      Specified by:
      color in interface VertexConsumer
      Returns:
      this consumer, for chaining
      Mappings:
      Namespace Name Mixin selector
      official a Lelt;a(IIII)Lelt;
      intermediary method_1336 Lnet/minecraft/class_4588;method_1336(IIII)Lnet/minecraft/class_4588;
      named color Lnet/minecraft/client/render/VertexConsumer;color(IIII)Lnet/minecraft/client/render/VertexConsumer;
    • vertex

      public void vertex(float x, float y, float z, float red, float green, float blue, float alpha, float u, float v, int overlay, int light, float normalX, float normalY, float normalZ)
      Specifies the position, color, texture, overlay, light, and normal elements of the current vertex and starts consuming the next vertex.
      Specified by:
      vertex in interface VertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official a Lelt;a(FFFFFFFFFIIFFF)V
      intermediary method_23919 Lnet/minecraft/class_4588;method_23919(FFFFFFFFFIIFFF)V
      named vertex Lnet/minecraft/client/render/VertexConsumer;vertex(FFFFFFFFFIIFFF)V
    • releaseBuiltBuffer

      void releaseBuiltBuffer()
      Mappings:
      Namespace Name Mixin selector
      official q Lelk;q()V
      intermediary method_43580 Lnet/minecraft/class_287;method_43580()V
      named releaseBuiltBuffer Lnet/minecraft/client/render/BufferBuilder;releaseBuiltBuffer()V
    • clear

      public void clear()
      Mappings:
      Namespace Name Mixin selector
      official g Lelk;g()V
      intermediary method_1343 Lnet/minecraft/class_287;method_1343()V
      named clear Lnet/minecraft/client/render/BufferBuilder;clear()V
    • reset

      public void reset()
      Mappings:
      Namespace Name Mixin selector
      official h Lelk;h()V
      intermediary method_23477 Lnet/minecraft/class_287;method_23477()V
      named reset Lnet/minecraft/client/render/BufferBuilder;reset()V
    • getCurrentElement

      public VertexFormatElement getCurrentElement()
      Specified by:
      getCurrentElement in interface BufferVertexConsumer
      Mappings:
      Namespace Name Mixin selector
      official i Lelm;i()Lelv;
      intermediary method_22900 Lnet/minecraft/class_4584;method_22900()Lnet/minecraft/class_296;
      named getCurrentElement Lnet/minecraft/client/render/BufferVertexConsumer;getCurrentElement()Lnet/minecraft/client/render/VertexFormatElement;
    • isBuilding

      public boolean isBuilding()
      Mappings:
      Namespace Name Mixin selector
      official j Lelk;j()Z
      intermediary method_22893 Lnet/minecraft/class_287;method_22893()Z
      named isBuilding Lnet/minecraft/client/render/BufferBuilder;isBuilding()Z
    • slice

      ByteBuffer slice(int start, int end)
      Mappings:
      Namespace Name Mixin selector
      official c Lelk;c(II)Ljava/nio/ByteBuffer;
      intermediary method_43576 Lnet/minecraft/class_287;method_43576(II)Ljava/nio/ByteBuffer;
      named slice Lnet/minecraft/client/render/BufferBuilder;slice(II)Ljava/nio/ByteBuffer;