2.1 KiB
Rendering
Lattice.renderer implements render.Renderer, backed by NanoVG
(NVGRenderer). All colors are Int ARGB (0xAARRGGBB). Coordinates are raw
window pixels.
Frame lifecycle
Inside RenderEvent.Gui or UIScreen a frame is already open — just draw.
Outside those hooks, wrap calls yourself:
renderer.beginFrame(Resolution.windowWidth.toFloat(), Resolution.windowHeight.toFloat())
// ... draw ...
renderer.endFrame()
beginFrame binds Minecraft's main framebuffer and saves GL state;
endFrame restores what vanilla expects.
Drawing
renderer.rect(x, y, w, h, color, radius)
renderer.rect(x, y, w, h, color, tr, tl, br, bl) // per-corner radii
renderer.gradientRect(x, y, w, h, c1, c2, Gradient.TopToBottom, radius)
renderer.hollowRect(x, y, w, h, thickness, color, radius) // border only
renderer.circle(cx, cy, radius, color)
renderer.line(x1, y1, x2, y2, thickness, color)
renderer.dropShadow(x, y, w, h, blur, spread, shadowColor, radius)
renderer.text("hi", x, y, size, color) // Lattice.defaultFont
renderer.shadowedText("hi", x, y, size, color)
renderer.wrappedText("long...", x, y, maxWidth, size, color)
renderer.textWidth("hi", size) // measure
renderer.textBounds("long...", maxWidth, size) // [minX, minY, maxX, maxY]
renderer.svg("/assets/mymod/icon.svg", x, y, w, h) // after createImage
renderer.image(image, x, y, w, h, radius)
Transforms and clipping nest with push()/pop() and
pushScissor(x, y, w, h)/popScissor(); translate, scale, rotate
(radians), and globalAlpha apply to subsequent calls.
Fonts and images
Font(name, resourcePath | inputStream) — TTFs registered lazily with
NanoVG. The bundled default is Lattice.defaultFont.
createImage(path, width, height, tint) loads a PNG/JPG or rasterizes an
SVG (tint replaces currentColor); images are reference-counted — pair with
deleteImage. Paths resolve as classpath resources or filesystem paths.
Custom backends
Renderer is an interface; swap the implementation with
Lattice.renderer = MyRenderer.