Interface MutableQuadView

All Superinterfaces:
QuadView
All Known Subinterfaces:
QuadEmitter

public interface MutableQuadView extends QuadView
A mutable QuadView instance. The base interface for QuadEmitter and for dynamic renders/mesh transforms.

Instances of MutableQuadView will practically always be thread local and/or reused - do not retain references.

Only the renderer should implement or extend this interface.

  • Field Details

    • BAKE_ROTATE_NONE

      static final int BAKE_ROTATE_NONE
      Causes texture to appear with no rotation. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
    • BAKE_ROTATE_90

      static final int BAKE_ROTATE_90
      Causes texture to appear rotated 90 deg. clockwise relative to nominal face. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
    • BAKE_ROTATE_180

      static final int BAKE_ROTATE_180
      Causes texture to appear rotated 180 deg. relative to nominal face. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
    • BAKE_ROTATE_270

      static final int BAKE_ROTATE_270
      Causes texture to appear rotated 270 deg. clockwise relative to nominal face. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
    • BAKE_LOCK_UV

      static final int BAKE_LOCK_UV
      When enabled, texture coordinate are assigned based on vertex position. Any existing UV coordinates will be replaced. Pass in bakeFlags parameter to spriteBake(Sprite, int).

      UV lock always derives texture coordinates based on nominal face, even when the quad is not co-planar with that face, and the result is the same as if the quad were projected onto the nominal face, which is usually the desired result.

      See Also:
    • BAKE_FLIP_U

      static final int BAKE_FLIP_U
      When set, U texture coordinates for the given sprite are flipped as part of baking. Can be useful for some randomization and texture mapping scenarios. Results are different from what can be obtained via rotation and both can be applied. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
    • BAKE_FLIP_V

      static final int BAKE_FLIP_V
      Same as BAKE_FLIP_U but for V coordinate.
      See Also:
    • BAKE_NORMALIZED

      static final int BAKE_NORMALIZED
      UV coordinates by default are assumed to be 0-16 scale for consistency with conventional Minecraft model format. This is scaled to 0-1 during baking before interpolation. Model loaders that already have 0-1 coordinates can avoid wasteful multiplication/division by passing 0-1 coordinates directly. Pass in bakeFlags parameter to spriteBake(Sprite, int).
      See Also:
  • Method Details

    • pos

      MutableQuadView pos(int vertexIndex, float x, float y, float z)
      Sets the geometric vertex position for the given vertex, relative to block origin, (0,0,0). Minecraft rendering is designed for models that fit within a single block space and is recommended that coordinates remain in the 0-1 range, with multi-block meshes split into multiple per-block models.
    • pos

      default MutableQuadView pos(int vertexIndex, org.joml.Vector3f pos)
      Same as pos(int, float, float, float) but accepts vector type.
    • pos

      default MutableQuadView pos(int vertexIndex, org.joml.Vector3fc pos)
      Same as pos(int, float, float, float) but accepts vector type.
    • color

      MutableQuadView color(int vertexIndex, int color)
      Set vertex color in ARGB format (0xAARRGGBB).
    • color

      default MutableQuadView color(int c0, int c1, int c2, int c3)
      Convenience: set vertex color for all vertices at once.
    • uv

      MutableQuadView uv(int vertexIndex, float u, float v)
      Set texture coordinates.
    • uv

      default MutableQuadView uv(int vertexIndex, org.joml.Vector2f uv)
      Set texture coordinates.

      Only use this function if you already have a Vector2f. Otherwise, see uv(int, float, float).

    • uv

      default MutableQuadView uv(int vertexIndex, org.joml.Vector2fc uv)
      Set texture coordinates.

      Only use this function if you already have a Vector2fc. Otherwise, see uv(int, float, float).

    • spriteBake

      MutableQuadView spriteBake(Sprite sprite, int bakeFlags)
      Assigns sprite atlas u,v coordinates to this quad for the given sprite. Can handle UV locking, rotation, interpolation, etc. Control this behavior by passing additive combinations of the BAKE_ flags defined in this interface.
    • lightmap

      MutableQuadView lightmap(int vertexIndex, int lightmap)
      Accept vanilla lightmap values. Input values will override lightmap values computed from world state if input values are higher. Exposed for completeness but some rendering implementations with non-standard lighting model may not honor it.

      For emissive rendering, it is better to use MaterialFinder.emissive(boolean).

    • lightmap

      default MutableQuadView lightmap(int b0, int b1, int b2, int b3)
      Convenience: set lightmap for all vertices at once.

      For emissive rendering, it is better to use MaterialFinder.emissive(boolean). See lightmap(int, int).

    • normal

      MutableQuadView normal(int vertexIndex, float x, float y, float z)
      Adds a vertex normal. Models that have per-vertex normals should include them to get correct lighting when it matters. Computed face normal is used when no vertex normal is provided.

      Renderer implementations should honor vertex normals for diffuse lighting - modifying vertex color(s) or packing normals in the vertex buffer as appropriate for the rendering method/vertex format in effect.

    • normal

      default MutableQuadView normal(int vertexIndex, org.joml.Vector3f normal)
      Same as normal(int, float, float, float) but accepts vector type.
    • normal

      default MutableQuadView normal(int vertexIndex, org.joml.Vector3fc normal)
      Same as normal(int, float, float, float) but accepts vector type.
    • cullFace

      MutableQuadView cullFace(@Nullable @Nullable Direction face)
      If non-null, quad is coplanar with a block face which, if known, simplifies or shortcuts geometric analysis that might otherwise be needed. Set to null if quad is not coplanar or if this is not known. Also controls face culling during block rendering.

      Null by default.

      When called with a non-null value, also sets nominalFace(Direction) to the same value.

      This is different from the value reported by BakedQuad.getFace(). That value is computed based on face geometry and must be non-null in vanilla quads. That computed value is returned by QuadView.lightFace().

    • nominalFace

      MutableQuadView nominalFace(@Nullable @Nullable Direction face)
      Provides a hint to renderer about the facing of this quad. Not required, but if provided can shortcut some geometric analysis if the quad is parallel to a block face. Should be the expected value of QuadView.lightFace(). Value will be confirmed and if invalid the correct light face will be calculated.

      Null by default, and set automatically by QuadView.cullFace().

      Models may also find this useful as the face for texture UV locking and rotation semantics.

      Note: This value is not persisted independently when the quad is encoded. When reading encoded quads, this value will always be the same as QuadView.lightFace().

    • material

      MutableQuadView material(RenderMaterial material)
      Assigns a different material to this quad. Useful for transformation of existing meshes because lighting and texture blending are controlled by material.
    • colorIndex

      MutableQuadView colorIndex(int colorIndex)
      Value functions identically to BakedQuad.getColorIndex() and is used by renderer / model builder in same way. Default value is -1.
    • tag

      MutableQuadView tag(int tag)
      Encodes an integer tag with this quad that can later be retrieved via QuadView.tag(). Useful for models that want to perform conditional transformation or filtering on static meshes.
    • copyFrom

      MutableQuadView copyFrom(QuadView quad)
      Copies all quad properties from the given QuadView to this quad.

      Calling this method does not emit the quad.

    • fromVanilla

      MutableQuadView fromVanilla(int[] quadData, int startIndex)
      Enables bulk vertex data transfer using the standard Minecraft vertex formats. Only the quad vertex data is copied. This method should be performant whenever caller's vertex representation makes it feasible.

      Use the other overload which has better encapsulation unless you have a specific reason to use this one.

      Calling this method does not emit the quad.

    • fromVanilla

      MutableQuadView fromVanilla(BakedQuad quad, RenderMaterial material, @Nullable @Nullable Direction cullFace)
      Enables bulk vertex data transfer using the standard Minecraft quad format.

      Calling this method does not emit the quad.

      The material applied to this quad view might be slightly different from the material parameter regarding diffuse shading. If either the baked quad does not have shade or the material does not have shade, diffuse shading will be disabled for this quad view. This is reflected in the quad view's QuadView.material(), but the material parameter is unchanged (it is immutable anyway).

    • spriteColor

      @Deprecated default MutableQuadView spriteColor(int vertexIndex, int spriteIndex, int color)
      Deprecated.
      Use color(int, int) instead.
    • spriteColor

      @Deprecated default MutableQuadView spriteColor(int spriteIndex, int c0, int c1, int c2, int c3)
      Deprecated.
    • sprite

      @Deprecated default MutableQuadView sprite(int vertexIndex, int spriteIndex, float u, float v)
      Deprecated.
    • sprite

      @Deprecated default MutableQuadView sprite(int vertexIndex, int spriteIndex, Vec2f uv)
      Deprecated.
      Use uv(int, Vector2f) instead.
    • spriteBake

      @Deprecated default MutableQuadView spriteBake(int spriteIndex, Sprite sprite, int bakeFlags)
      Deprecated.
    • fromVanilla

      @Deprecated default MutableQuadView fromVanilla(int[] quadData, int startIndex, boolean isItem)
      Deprecated.