Releases
v0.17.0
Add
General
Add enet
plugin.
Add http
plugin.
Add utf8
module.
Add :type
method to all objects and vectors.
Add --graphics-debug
command line option, which sets t.graphics.debug
to true.
Audio
Add lovr.audio.getDevice
.
Data
Add Image:mapPixel
.
Add a variant of Blob:getString
that takes a byte range.
Add Blob:getI8/getU8/getI16/getU16/getI32/getU32/getF32/getF64
.
Filesystem
Add argument to lovr.filesystem.load
to restrict chunks to text/binary.
Graphics
Add Pass:roundrect
.
Add variant of Pass:cone
that takes two vec3
endpoints.
Add variant of Pass:draw
that takes a Texture
.
Add Pass:setViewCull
to enable frustum culling.
Add Model:getBlendShapeWeight
, and Model:setBlendShapeWeight
.
Add Model(Data):getBlendShapeCount
, Model(Data):getBlendShapeName
.
Add support for animated blend shape weights in Model animations.
Add support for arrays, nested structs, and field names to Buffer formats.
Add Shader:getBufferFormat
.
Add back Mesh
object (sorry!).
Add Model:clone
.
Add materials
flag to lovr.graphics.newModel
.
Add lovr.graphics.isInitialized
(mostly internal).
Add support for using depth textures in multisampled render passes.
Add depthResolve
feature to lovr.graphics.getFeatures
.
Add a variant of Texture:newView
that creates a 2D slice of a layer/mipmap of a texture.
Add a variant of Pass:send
that takes tables for uniform buffers.
Add Buffer:getData
and Buffer:newReadback
.
Add Texture:getPixels/setPixels/clear/newReadback/generateMipmaps
.
Add support for stepping through shaders in e.g. RenderDoc when t.graphics.debug
is set.
Add lovr.graphics.is/setTimingEnabled
to record GPU durations for each Pass object.
Add lovr.graphics.newPass
.
Add Pass:setCanvas
and Pass:setClear
.
Add Pass:getStats
.
Add Pass:reset
.
Add Pass:getScissor
and Pass:getViewport
.
Add Pass:barrier
.
Add Pass:beginTally/finishTally
and Pass:get/setTallyBuffer
.
Add support for #include
in shader code.
Headset
Add lovr.headset.getPassthrough/setPassthrough/getPassthroughModes
.
Add support for more headsets in Android APKs (Quest, Pico, Vive Focus all work).
Add support for controller input on Pico Neo 3 and Pico Neo 4 devices.
Add support for controller input on Magic Leap 2.
Add hand/*/pinch
, hand/*/poke
, and hand/*/grip
Devices.
Add support for using lovr.headset
when lovr.graphics
is disabled, on supported runtimes.
Add support for elbow/left
and elbow/right
poses on Ultraleap hand tracking.
Add lovr.headset.getDirection
.
Add lovr.headset.isVisible
and lovr.visible
callback.
Add lovr.recenter
callback.
Add floor
Device.
Add t.headset.seated
and lovr.headset.isSeated
.
Add lovr.headset.stopVibration
.
Add radius
fields to joint tables returned by lovr.headset.getSkeleton
.
Add support for "sprinting" in the headset simulator using the shift key.
Math
Add capitalized globals for creating permanent vectors (Vec2
, Vec3
, Vec4
, Quat
, Mat4
).
Add Vec3:transform
, Vec4:transform
, and Vec3:rotate
.
Add vector constants (vec3.up
, vec2.one
, quat.identity
, etc.).
Add Mat4:getTranslation/getRotation/getScale/getPose
.
Add variant of Vec3:set
that takes a Quat
.
Add Mat4:reflect
.
Physics
Add TerrainShape
.
Add World:queryBox
and World:querySphere
.
Add World:getTags
.
Add Shape:get/setPose
.
Add missing lovr.physics.newMeshShape
function.
Add Collider:isDestroyed
.
System
Add lovr.system.wasKeyPressed/wasKeyReleased
.
Add lovr.system.getMouseX
, lovr.system.getMouseY
, and lovr.system.getMousePosition
.
Add lovr.system.isMouseDown
.
Add lovr.mousepressed
, lovr.mousereleased
, lovr.mousemoved
, and lovr.wheelmoved
callbacks.
Add lovr.system.has/setKeyRepeat
.
Thread
Add support for vectors and lightuserdata with Channel:push
and Channel:pop
.
Change
Change lovr.graphics.submit
to no longer invalidate Pass objects.
Change vector constructors to be callable metatables (allows adding custom methods).
Change max size of vector pool to hold 16 million numbers instead of 64 thousand.
Change Pass:setBlendMode
/Pass:setColorWrite
to take an optional attachment index.
Change OpenXR driver to throttle update loop when headset session is idle.
Change lovr.graphics.newModel
to work when the asset references paths starting with ./
.
Change lovr.graphics.newModel
to error when the asset references paths starting with /
.
Change lovr.graphics.newBuffer
to take format first instead of length/data.
Change Pass:setStencilWrite
to only set the "stencil pass" action when given a single action, instead of all 3.
Change lovr.graphics
to show a message box on Windows when Vulkan isn't supported.
Change plugin loader to call JNI_OnLoad
on Android so plugins can use JNI.
Change t.headset.overlay
to also support numeric values to control overlay sort order.
Change World:isCollisionEnabledBetween
to take nil
s, which act as wildcard tags.
Change Mat4:__tostring
to print matrix components.
Change World:raycast
to prevent subsequent checks when the callback returns false
.
Change lovr.system.isKeyDown
to take multiple keys.
Change lovr.headset.isDown/isTouched
to return nil instead of nothing.
Change lovr.headset.getTime
to always start at 0 to avoid precision issues.
Change Pass viewport and scissor to apply to all draws in the Pass, instead of per-draw.
Change nogame/error screen to use a transparent background on AR/passthrough headsets.
Change VR simulator to use projected mouse position for hand pose (scroll controls distance).
Change lovr.headset.getDriver
to also return the OpenXR runtime name.
Change pitchable
flag in lovr.audio.newSource
to default to true.
Change Buffer:setData
, Buffer:clear
, and Buffer:getPointer
to work on permanent Buffers.
Change lovr.timer.sleep
to have higher precision on Windows.
Change lovr.headset.animate
to no longer require a Device
argument (current variant is deprecated).
Fix
Fix lovr.physics.newBoxShape
always creating a cube.
Fix several issues related to VRAM leaks when creating Textures.
Fix issue on Linux where the Vulkan library wouldn't get loaded properly.
Fix macOS to not require the Vulkan SDK to be installed.
Fix recentering on Quest.
Fix headset mirror window to properly render in mono when a VR headset is connected.
Fix window size not updating on resize or on highdpi displays.
Fix MeshShape
not working properly with some OBJ models.
Fix Model:getNodeScale
to properly return the scale instead of the rotation.
Fix Mat4:set
and Mat4
constructors to properly use TRS order when scale is given.
Fix lovr.graphics.newShader
to work with nil
shader code (uses unlit
shader).
Fix crash when t.graphics.debug
is set but the validation layers aren't installed.
Fix a few memory leaks with Readbacks, Fonts, and compute Shaders.
Fix Pass:setProjection
to use an infinite far plane by default.
Fix Texture:hasUsage
.
Fix Pass:points
/ Pass:line
to work with temporary vectors.
Fix lovr.event.quit
to properly exit on Android/Quest.
Fix mounted zip paths sometimes not working with lovr.filesystem.getDirectoryItems
.
Fix issue where temporary vectors didn't work in functions that accept colors.
Fix crash when rendering multiple identical torus shapes in the same Pass.
Fix lovr.graphics.newShader
to error properly if the push constants block is too big.
Fix default lovr.log
to not print second string.gsub
result.
Fix issue where lovr.data.newImage
wouldn't initialize empty Image
object pixels to zero.
Fix Model:getMaterial
to work when given a string.
Fix issue where Vec3:angle
would sometimes return NaNs.
Fix OpenXR driver when used with AR headsets.
Fix vertex tangents (previously they only worked if the normalMap
shader flag was set).
Fix error when minimizing the desktop window on Windows.
Fix DistanceJoint:getAnchors
.
Fix issue where Material:getProperties
returned an incorrect uvScale.
Fix crash when uvShift/uvScale were given as tables in lovr.graphics.newMaterial
.
Fix retina macOS windows.
Fix issue where Pass:capsule
didn't render anything when its length was zero.
Fix confusing console message when OpenXR is not installed.
Fix issue where OBJ UVs were upside down.
Fix issue where equirectangular skyboxes used an incorrect z direction.
Fix seam when rendering equirectangular skyboxes with mipmaps.
Fix font wrap when camera uses a projection matrix with a flipped up direction.
Fix Model import when vertex colors are stored as vec3.
Fix 24-bit WAV import.
Fix issue with 3-letter vec3 swizzles.
Fix error when subtracting a vector from a number.
Fix error when adding a number and a temporary vector (in that order).
Fix issue where t.window = nil
wasn't working as intended.
Fix bug where some fonts would render glyphs inside out.
Deprecate
Deprecate lovr.graphics.getPass
(lovr.graphics.newPass
should be used instead).
Deprecate Pass:getType
. All Pass objects support both compute and rendering (computes run before draws).
Deprecate Pass:getTarget
(renamed to Pass:getCanvas
).
Deprecate Pass:getSampleCount
(Pass:getCanvas
returns a samples
key).
Deprecate lovr.graphics.getBuffer
(Use lovr.graphics.newBuffer
or tables).
Deprecate variant of lovr.graphics.newBuffer
that takes length/data as the first argument (put format first).
Deprecate lovr.headset.get/setDisplayFrequency
(it's named lovr.headset.get/setRefreshRate
now).
Deprecate lovr.headset.getDisplayFrequencies
(it's named lovr.headset.getRefreshRates
now).
Deprecate lovr.headset.getOriginType
(use lovr.headset.isSeated
).
Deprecate variant of lovr.headset.animate
that takes a Device
argument (just pass the Model
now).
Deprecate Buffer:getPointer
(renamed to Buffer:mapData
).
Remove
Remove transfer
passes (methods on Buffer
and Texture
objects can be used instead).
Remove Pass:copy
(use Buffer:setData
and Texture:setPixels
).
Remove Pass:read
(use Buffer:newReadback
and Texture:newReadback
).
Remove Pass:clear
(use Buffer:clear
and Texture:clear
).
Remove Pass:blit
(use Texture:setPixels
).
Remove Pass:mipmap
(use Texture:generateMipmaps
).
Remove Tally
(use lovr.graphics.setTimingEnabled
or Pass:beginTally/finishTally
).
Remove lovr.event.pump
(it's named lovr.system.pollEvents
now).
Remove t.headset.offset
(use t.headset.seated
).
Remove mipmaps
flag from render passes (they always regenerate mipmaps now).
You can’t perform that action at this time.