Interface QuadView
- All Known Subinterfaces:
MutableQuadView
,QuadEmitter
public interface QuadView
Interface for reading quad data encoded by
MeshBuilder
.
Enables models to do analysis, re-texturing or translation without knowing the
renderer's vertex formats and without retaining redundant information.
Only the renderer should implement or extend this interface.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Count of integers in a conventional (un-modded) block or item quad.static final int
Count of integers in a conventional (un-modded) block or item vertex. -
Method Summary
Modifier and TypeMethodDescriptionint
Retrieves the quad color index serialized with the quad.@Nullable org.joml.Vector3f
copyNormal
(int vertexIndex, @Nullable org.joml.Vector3f target) Pass a non-null target to avoid allocation - will be returned with values.org.joml.Vector3f
copyPos
(int vertexIndex, @Nullable org.joml.Vector3f target) Pass a non-null target to avoid allocation - will be returned with values.void
copyTo
(MutableQuadView target) Extracts all quad properties except material to the givenMutableQuadView
instance.@Nullable Direction
cullFace()
If non-null, quad should not be rendered in-world if the opposite face of a neighbor block occludes it.org.joml.Vector3f
Normal of the quad as implied by geometry.boolean
hasNormal
(int vertexIndex) If false, no vertex normal was provided.@NotNull Direction
Equivalent toBakedQuad.getFace()
.int
lightmap
(int vertexIndex) Minimum block brightness.material()
Retrieves the material serialized with the quad.float
normalX
(int vertexIndex) Will returnFloat.NaN
if normal not present.float
normalY
(int vertexIndex) Will returnFloat.NaN
if normal not present.float
normalZ
(int vertexIndex) Will returnFloat.NaN
if normal not present.float
posByIndex
(int vertexIndex, int coordinateIndex) Convenience: access x, y, z by index 0-2.int
spriteColor
(int vertexIndex, int spriteIndex) Retrieve vertex color.float
spriteU
(int vertexIndex, int spriteIndex) Retrieve horizontal sprite atlas coordinates.float
spriteV
(int vertexIndex, int spriteIndex) Retrieve vertical sprite atlas coordinates.int
tag()
Retrieves the integer tag encoded with this quad viaMutableQuadView.tag(int)
.default BakedQuad
toBakedQuad
(int spriteIndex, Sprite sprite, boolean isItem) Generates a new BakedQuad instance with texture coordinates and colors from the given sprite.void
toVanilla
(int spriteIndex, int[] target, int targetIndex, boolean isItem) Reads baked vertex data and outputs standard baked quad vertex data in the given array and location.float
x
(int vertexIndex) Geometric position, x coordinate.float
y
(int vertexIndex) Geometric position, y coordinate.float
z
(int vertexIndex) Geometric position, z coordinate.
-
Field Details
-
VANILLA_VERTEX_STRIDE
static final int VANILLA_VERTEX_STRIDECount of integers in a conventional (un-modded) block or item vertex. -
VANILLA_QUAD_STRIDE
static final int VANILLA_QUAD_STRIDECount of integers in a conventional (un-modded) block or item quad.
-
-
Method Details
-
toVanilla
void toVanilla(int spriteIndex, int[] target, int targetIndex, boolean isItem) Reads baked vertex data and outputs standard baked quad vertex data in the given array and location.- Parameters:
spriteIndex
- The sprite to be used for the quad. Behavior for values > 0 is currently undefined.target
- Target array for the baked quad data.targetIndex
- Starting position in target array - array must have at least 28 elements available at this index.isItem
- If true, will output vertex normals. Otherwise will output lightmaps, per Minecraft vertex formats for baked models.
-
copyTo
Extracts all quad properties except material to the givenMutableQuadView
instance. Must be used before calling {link QuadEmitter#emit()} on the target instance. Meant for re-texturing, analysis and static transformation use cases. -
material
RenderMaterial material()Retrieves the material serialized with the quad. -
colorIndex
int colorIndex()Retrieves the quad color index serialized with the quad. -
lightFace
Equivalent toBakedQuad.getFace()
. This is the face used for vanilla lighting calculations and will be the block face to which the quad is most closely aligned. Always the same as cull face for quads that are on a block face, but never null. -
cullFace
If non-null, quad should not be rendered in-world if the opposite face of a neighbor block occludes it.- See Also:
-
nominalFace
Direction nominalFace() -
faceNormal
org.joml.Vector3f faceNormal()Normal of the quad as implied by geometry. Will be invalid if quad vertices are not co-planar. Typically computed lazily on demand and not encoded.Not typically needed by models. Exposed to enable standard lighting utility functions for use by renderers.
-
toBakedQuad
Generates a new BakedQuad instance with texture coordinates and colors from the given sprite.- Parameters:
spriteIndex
- The sprite to be used for the quad. Behavior forspriteIndex > 0
is currently undefined.sprite
-MutableQuadView
does not serialize sprites so the sprite must be provided by the caller.isItem
- If true, will output vertex normals. Otherwise will output lightmaps, per Minecraft vertex formats for baked models.- Returns:
- A new baked quad instance with the closest-available appearance supported by vanilla features. Will retain emissive light maps, for example, but the standard Minecraft renderer will not use them.
-
tag
int tag()Retrieves the integer tag encoded with this quad viaMutableQuadView.tag(int)
. Will return zero if no tag was set. For use by models. -
copyPos
org.joml.Vector3f copyPos(int vertexIndex, @Nullable @Nullable org.joml.Vector3f target) Pass a non-null target to avoid allocation - will be returned with values. Otherwise returns a new instance. -
posByIndex
float posByIndex(int vertexIndex, int coordinateIndex) Convenience: access x, y, z by index 0-2. -
x
float x(int vertexIndex) Geometric position, x coordinate. -
y
float y(int vertexIndex) Geometric position, y coordinate. -
z
float z(int vertexIndex) Geometric position, z coordinate. -
hasNormal
boolean hasNormal(int vertexIndex) If false, no vertex normal was provided. Lighting should use face normal in that case. -
copyNormal
@Nullable @Nullable org.joml.Vector3f copyNormal(int vertexIndex, @Nullable @Nullable org.joml.Vector3f target) Pass a non-null target to avoid allocation - will be returned with values. Otherwise returns a new instance. Returns null if normal not present. -
normalX
float normalX(int vertexIndex) Will returnFloat.NaN
if normal not present. -
normalY
float normalY(int vertexIndex) Will returnFloat.NaN
if normal not present. -
normalZ
float normalZ(int vertexIndex) Will returnFloat.NaN
if normal not present. -
lightmap
int lightmap(int vertexIndex) Minimum block brightness. Zero if not set. -
spriteColor
int spriteColor(int vertexIndex, int spriteIndex) Retrieve vertex color. -
spriteU
float spriteU(int vertexIndex, int spriteIndex) Retrieve horizontal sprite atlas coordinates. -
spriteV
float spriteV(int vertexIndex, int spriteIndex) Retrieve vertical sprite atlas coordinates.
-