Interface QuadEmitter
- All Superinterfaces:
MutableQuadView,QuadView
MutableQuadView obtained via MeshBuilder.getEmitter()
to append quads during mesh building.
Also obtained from RenderContext.getEmitter() to submit
dynamic quads one-by-one at render time.
Instances of QuadEmitter will practically always be
threadlocal and/or reused - do not retain references.
Only the renderer should implement or extend this interface.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic floatTolerance for determining if the depth parameter tosquare(Direction, float, float, float, float, float)is effectively zero - meaning the face is a cull face.Fields inherited from interface net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView
BAKE_FLIP_U, BAKE_FLIP_V, BAKE_LOCK_UV, BAKE_NORMALIZED, BAKE_ROTATE_180, BAKE_ROTATE_270, BAKE_ROTATE_90, BAKE_ROTATE_NONEFields inherited from interface net.fabricmc.fabric.api.renderer.v1.mesh.QuadView
VANILLA_QUAD_STRIDE, VANILLA_VERTEX_STRIDE -
Method Summary
Modifier and TypeMethodDescriptioncolorIndex(int colorIndex)Value functions identically toBakedQuad.getColorIndex()and is used by renderer / model builder in same way.cullFace(net.minecraft.util.math.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.emit()In static mesh building, causes quad to be appended to the mesh being built.fromVanilla(int[] quadData, int startIndex, boolean isItem)Enables bulk vertex data transfer using the standard Minecraft vertex formats.lightmap(int vertexIndex, int lightmap)Accept vanilla lightmap values.default QuadEmitterlightmap(int b0, int b1, int b2, int b3)Convenience: set lightmap for all vertices at once.material(RenderMaterial material)Assigns a different material to this quad.nominalFace(net.minecraft.util.math.Direction face)Provides a hint to renderer about the facing of this quad.default QuadEmitternormal(int vertexIndex, net.minecraft.util.math.Vec3f vec)Same asMutableQuadView.normal(int, float, float, float)but accepts vector type.pos(int vertexIndex, float x, float y, float z)Sets the geometric vertex position for the given vertex, relative to block origin.default QuadEmitterpos(int vertexIndex, net.minecraft.util.math.Vec3f vec)Same asMutableQuadView.pos(int, float, float, float)but accepts vector type.sprite(int vertexIndex, int spriteIndex, float u, float v)Set sprite atlas coordinates.default QuadEmittersprite(int vertexIndex, int spriteIndex, net.minecraft.util.math.Vec2f uv)Set sprite atlas coordinates.spriteBake(int spriteIndex, net.minecraft.client.texture.Sprite sprite, int bakeFlags)Assigns sprite atlas u,v coordinates to this quad for the given sprite.spriteColor(int vertexIndex, int spriteIndex, int color)Set sprite color.default QuadEmitterspriteColor(int spriteIndex, int c0, int c1, int c2, int c3)Convenience: set sprite color for all vertices at once.default QuadEmitterspriteUnitSquare(int spriteIndex)default QuadEmittersquare(net.minecraft.util.math.Direction nominalFace, float left, float bottom, float right, float top, float depth)Helper method to assign vertex coordinates for a square aligned with the given face.tag(int tag)Encodes an integer tag with this quad that can later be retrieved viaQuadView.tag().Methods inherited from interface net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView
fromVanilla, normalMethods inherited from interface net.fabricmc.fabric.api.renderer.v1.mesh.QuadView
colorIndex, copyNormal, copyPos, copyTo, cullFace, faceNormal, hasNormal, lightFace, lightmap, material, nominalFace, normalX, normalY, normalZ, posByIndex, spriteColor, spriteU, spriteV, tag, toBakedQuad, toVanilla, x, y, z
-
Field Details
-
CULL_FACE_EPSILON
static final float CULL_FACE_EPSILONTolerance for determining if the depth parameter tosquare(Direction, float, float, float, float, float)is effectively zero - meaning the face is a cull face.- See Also:
- Constant Field Values
-
-
Method Details
-
material
Description copied from interface:MutableQuadViewAssigns a different material to this quad. Useful for transformation of existing meshes because lighting and texture blending are controlled by material.- Specified by:
materialin interfaceMutableQuadView
-
cullFace
Description copied from interface:MutableQuadViewIf 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
MutableQuadView.nominalFace(Direction)to the same value.This is different than 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 byQuadView.lightFace().- Specified by:
cullFacein interfaceMutableQuadView
-
nominalFace
Description copied from interface:MutableQuadViewProvides 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 ofQuadView.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().- Specified by:
nominalFacein interfaceMutableQuadView
-
colorIndex
Description copied from interface:MutableQuadViewValue functions identically toBakedQuad.getColorIndex()and is used by renderer / model builder in same way. Default value is -1.- Specified by:
colorIndexin interfaceMutableQuadView
-
fromVanilla
Description copied from interface:MutableQuadViewEnables bulk vertex data transfer using the standard Minecraft vertex formats. This method should be performant whenever caller's vertex representation makes it feasible.Calling this method does not emit the quad.
- Specified by:
fromVanillain interfaceMutableQuadView
-
tag
Description copied from interface:MutableQuadViewEncodes an integer tag with this quad that can later be retrieved viaQuadView.tag(). Useful for models that want to perform conditional transformation or filtering on static meshes.- Specified by:
tagin interfaceMutableQuadView
-
pos
Description copied from interface:MutableQuadViewSets 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.- Specified by:
posin interfaceMutableQuadView
-
pos
Description copied from interface:MutableQuadViewSame asMutableQuadView.pos(int, float, float, float)but accepts vector type.- Specified by:
posin interfaceMutableQuadView
-
normal
Description copied from interface:MutableQuadViewSame asMutableQuadView.normal(int, float, float, float)but accepts vector type.- Specified by:
normalin interfaceMutableQuadView
-
lightmap
Description copied from interface:MutableQuadViewAccept 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(int, boolean).- Specified by:
lightmapin interfaceMutableQuadView
-
lightmap
Description copied from interface:MutableQuadViewConvenience: set lightmap for all vertices at once.For emissive rendering, it is better to use
MaterialFinder.emissive(int, boolean). SeeMutableQuadView.lightmap(int, int).- Specified by:
lightmapin interfaceMutableQuadView
-
spriteColor
Description copied from interface:MutableQuadViewSet sprite color. Behavior forspriteIndex > 0is currently undefined.- Specified by:
spriteColorin interfaceMutableQuadView
-
spriteColor
Description copied from interface:MutableQuadViewConvenience: set sprite color for all vertices at once. Behavior forspriteIndex > 0is currently undefined.- Specified by:
spriteColorin interfaceMutableQuadView
-
sprite
Description copied from interface:MutableQuadViewSet sprite atlas coordinates. Behavior forspriteIndex > 0is currently undefined.- Specified by:
spritein interfaceMutableQuadView
-
sprite
Set sprite atlas coordinates. Behavior forspriteIndex > 0is currently undefined.Only use this function if you already have a
Vec2f. Otherwise, seesprite(int, int, float, float).- Specified by:
spritein interfaceMutableQuadView
-
spriteUnitSquare
-
spriteBake
Description copied from interface:MutableQuadViewAssigns 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. Behavior forspriteIndex > 0is currently undefined.- Specified by:
spriteBakein interfaceMutableQuadView
-
square
default QuadEmitter square(net.minecraft.util.math.Direction nominalFace, float left, float bottom, float right, float top, float depth)Helper method to assign vertex coordinates for a square aligned with the given face. Ensures that vertex order is consistent with vanilla convention. (Incorrect order can lead to bad AO lighting unless enhanced lighting logic is available/enabled.)Square will be parallel to the given face and coplanar with the face (and culled if the face is occluded) if the depth parameter is approximately zero. See
CULL_FACE_EPSILON.All coordinates should be normalized (0-1).
-
emit
QuadEmitter emit()In static mesh building, causes quad to be appended to the mesh being built. In a dynamic render context, create a new quad to be output to rendering. In both cases, current instance is reset to default values.
-