Releases: bjornbytes/lovr
Releases · bjornbytes/lovr
Dream Eater
Add
General
- Add support for declaring objects as to-be-closed variables in Lua 5.4.
Filesystem
- Add
--watchCLI flag,lovr.filechangedevent, andlovr.filesystem.watch/unwatch. - Add
Fileobject andlovr.filesystem.newFile. - Add
lovr.filesystem.getBundlePath(for internal boot code). - Add
lovr.filesystem.setSource(for internal boot code).
Graphics
- Add
Pass:polygon. - Add
Shader:hasVariable. - Add support for BMFont in
FontandRasterizer. - Add support for
uniformvariables in shader code. - Add support for cubemap array textures.
- Add support for transfer operations on texture views.
- Add support for nesting texture views (creating a view of a view).
- Add
sn10x3DataType. - Add
borderWrapMode. - Add support for loading glTF models with 8 bit indices.
- Add support for
d24texture format. - Add support for
SampleID,SampleMaskIn,SampleMask, andSamplePositionin pixel shaders. - Add support for
layout(scalar)buffers andpackedBuffersgraphics feature. - Add
rawflag tolovr.graphics.newShader. - Add
Texture:getLabel,Shader:getLabel, andPass:getLabel. - Add
Model:resetBlendShapes.
Headset
- Add
Layerobject,lovr.headset.newLayer, andlovr.headset.get/setLayers. - Add
stylusDevice,nibDeviceButton, andnibDeviceAxis. - Add support for Logitech MX Ink input.
- Add
lovr.headset.get/setFoveation. - Add
t.headset.controllerskeletonto control how controllers return hand tracking data. - Add
controllerfield to the table returned bylovr.headset.getSkeleton. - Add
t.headset.mask. - Add back
lovr.headset.isMountedand thelovr.mountcallback. - Add
lovr.headset.stop,lovr.headset.isActive, andt.headset.start. - Add
lovr.headset.getFeatures. - Add
t.headset.debugto enable additional messages from the VR runtime. - Add
--simulatorCLI flag to force use of simulator headset driver. - Add
lovr.headset.getHandles.
Math
- Add
Quat:get/setEuler.
Physics
- Add variant of
lovr.physics.newWorldthat takes a table of settings. - Add
World:interpolate. - Add
World:get/setCallbacksandContactobject. - Add
World:getColliderCount. - Add
World:getJointCountandWorld:getJoints. - Add
World:shapecast. - Add
World:overlapShape. - Add
Collider:get/setGravityScale. - Add
Collider:is/setContinuous. - Add
Collider:get/setDegreesOfFreedom. - Add
Collider:applyLinearImpulseandCollider:applyAngularImpulse. - Add
Collider:moveKinematic. - Add
Collider:getShape. - Add
Collider:is/setSensor(replacesShape:is/setSensor). - Add
Collider:get/setInertia. - Add
Collider:get/setCenterOfMass. - Add
Collider:get/setAutomaticMass. - Add
Collider:resetMassData. - Add
Collider:is/setEnabled. - Add
ConvexShape. - Add
WeldJoint. - Add
ConeJoint. - Add
Joint:getForceandJoint:getTorque. - Add
Joint:get/setPriority. - Add
Joint:isDestroyed. - Add
DistanceJoint:get/setLimits. - Add
:get/setSpringtoDistanceJoint,HingeJoint, andSliderJoint. - Add
HingeJoint:get/setFrictionandSliderJoint:get/setFriction. - Add
SliderJoint:getAnchors. - Add
Shape:raycastandShape:containsPoint. - Add
Shape:get/setDensity. - Add
Shape:getMass/Volume/Inertia/CenterOfMass. - Add
Shape:get/setOffset. - Add motor support to
HingeJointandSliderJoint. - Add support for creating a
MeshShapefrom aModelData.
System
- Add
lovr.system.isWindowVisibleandlovr.system.isWindowFocused. - Add
lovr.system.wasMousePressedandlovr.system.wasMouseReleased. - Add
lovr.system.get/setClipboardText. - Add
lovr.system.openConsole(for internal Lua code). - Add
KeyCodes for numpad keys.
Thread
- Add table support to
Channel:push. - Add
lovr.thread.newChannel. - Add
t.thread.workersto configure number of worker threads.
Change
- Change nogame screen to be bundled as a fused zip archive.
- Change
Mesh:setMaterialto also take aTexture. - Change shader syntax to no longer require set/binding numbers for buffer/texture variables.
- Change
Texture:getFormatto also return whether the texture is linear or sRGB. - Change
Texture:setPixelsto allow copying between textures with different formats. - Change
Readback:getImageandTexture:getPixelsto return sRGB images when the source Texture is sRGB. - Change
lovr.graphics.newTextureto use a layer count of 6 when type iscubeand only width/height is given. - Change
lovr.graphics.newTextureto default mipmap count to 1 when an Image is given with a non-blittable format. - Change
lovr.graphics.newTextureto error if mipmaps are requested and an Image is given with a non-blittable format. - Change
TextureFeatureto mergesamplewithfilter,renderwithblend, andblitsrc/blitdstintoblit. - Change headset simulator movement to slow down when holding the control key.
- Change headset simulator to use
t.headset.supersample. - Change
lovr.graphics.compileShaderto take/return multiple stages. - Change maximum number of physics tags from 16 to 31.
- Change
TerrainShapeto require square dimensions. - Change
MeshShapeconstructors to accept aMeshShapeto reuse data from. - Change
MeshShapeconstructors to take an optional scale to apply to the vertices. - Change
Buffer:setDatato use more consistent rules to read data from tables. - Change
World:queryBox/querySphereto perform coarse AABB collision detection (useWorld:overlapShapefor an exact test). - Change
World:queryBox/querySphereto take an optional set of tags to include/exclude. - Change
World:queryBox/querySphereto return the first collider detected, when the callback is nil. - Change
World:queryBox/querySphereto return nil when a callback is given. - Change
World:raycastto take a set of tags to allow/ignore. - Change
World:raycastcallback to be optional (if nil, the closest hit will be returned). - Change
World:raycastto also return the triangle that was hit on MeshShapes. - Change physics queries to report colliders in addition to shapes.
- Change
tostringon objects to also include their pointers. - Change
desktopHeadsetDriver to be namedsimulator. - Change
--graphics-debugCLI flag to be named--debug. - Change
--versionandlovr.getVersionto also return the git commit hash. - Change
Pass:setViewport/Scissorto be per-draw state instead of per-pass. - Change
Image:get/set/mapPixelto supportr16f,rg16f, andrgba16f. - Change
Image:getPixelto return 1 for alpha when the format doesn't have an alpha component. - Change stack size of
statestack (used withPass:push/pop) from 4 to 8. - Change
lovr.focusandlovr.visibleto also get called for window events. - Change
lovr.focusandlovr.visibleto have an extra parameter for the display type.
Fix
- Fix
t.headset.submitdepthto actually submit depth. - Fix depth write when depth testing is disabled.
- Fix "morgue overflow" error when creating or destroying large amounts of textures at once.
- Fix
Texture:getTypewhen used with texture views. - Fix possible negative
dtin lovr.update when restarting with the simulator. - Fix issue where
Collider/Shape/Jointuserdata wouldn't get garbage collected. - Fix OBJ triangulation for faces with more than 4 vertices.
- Fix possible crash when using vectors in multiple threads.
- Fix possible crash with
Blob:getName. - Fix issue when sampling from depth-stencil textures.
- Fix bug when rendering meshes from
Model:getMesh. - Fix bug with
Curve:slicewhen curve has more than 4 points. - Fix bug with
hand/*/pinchandhand/*/pokedevice poses. - Fix bug when loading glTF models that use the
KHR_texture_transformextension.
Deprecate
- Deprecate
Texture:getSampleCount. - Deprecate
World:get/setTightness(usestabilizationoption when creating World). - Deprecate
World:get/setLinearDamping(useCollider:get/setLinearDamping). - Deprecate
World:get/setAngularDamping(useCollider:get/setAngularDamping). - Deprecate
World:is/setSleepingAllowed(useallowSleepoption when creating World). - Deprecate
World:get/setStepCount(usepositionSteps/velocityStepsoption when creating World). - Deprecate
Collider:is/setGravityIgnored(useCollider:get/setGravityScale).
Remove
- Remove
lovr.headset.getOriginType(uselovr.headset.isSeated). - Remove
lovr.headset.getDisplayFrequency(renamed tolovr.headset.getRefreshRate). - Remove
lovr.headset.getDisplayFrequencies(renamed tolovr.headset.getRefreshRates). - Remove
lovr.headset.setDisplayFrequency(renamed tolovr.headset.setRefreshRate). - Remove
lovr.graphics.getBuffer(uselovr.graphics.newBuffer). - Remove variant of
lovr.graphics.newBufferthat takes length first (format is first now). - Remove
locationkey for Buffer fields (usename). - Remove
Buffer:isTemporary. - Remove
Buffer:getPointer(renamed toBuffer:mapData). - Remove
lovr.graphics.getPass(uselovr.graphics.newPass). - Remove
Pass:getType(passes support both render and compute now). - Remove
Pass:getTarget(renamed toPass:getCanvas). - Remove
Pass:getSampleCount(Pass:getCanvasreturns sample count). - Remove variant of
Pass:sendthat takes a binding number instead of a variable name. - Remove
Texture:newView(renamed tolovr.graphics.newTextureView). - Remove
Texture:isViewandTexture:getParent. - Remove
Shape:setPosition,Shape:setOrientation, andShape:setPose(useShape:setOffset). - Remove
Shape:is/setSensor(useCollider:is/setSensor). - Remove
World:overlaps/computeOverlaps/collide/getContacts(useWorld:setCallbacks). - Remove
BallJoint:setAnchor. - Remov...
v0.17.1
Change
- Change permissions for files and directories created by
lovr.filesystemon POSIX (fixes ADB on Android 12+). - Change
Pass:sphereto error when segment count is too small. - Change
Buffer:setDatato error when copying within a single Buffer with overlapping byte ranges.
Fix
- Fix LÖVR failing to start on Oculus Quest v62+.
- Fix
Pass:skyboxto render cubemaps with the correct X/Z orientation. - Fix depth write when depth testing is disabled.
- Fix
lovr.graphics.newModelto support empty GLB models. - Fix
lovr.graphics.newModelto support models without any vertices. - Fix bitangent sign in
TangentMatrixbuiltin. - Fix shader #includes to error when including a file that doesn't exist.
- Fix
lovr.quitto not get called twice when canceling quit. - Fix GPU error when texture had only
transferusage. - Fix rare crash when calling vector methods.
- Fix
Model:getMesh.
Tritium Gourmet
Add
General
- Add
enetplugin. - Add
httpplugin. - Add
utf8module. - Add
:typemethod to all objects and vectors. - Add
--graphics-debugcommand line option, which setst.graphics.debugto true.
Audio
- Add
lovr.audio.getDevice.
Data
- Add
Image:mapPixel. - Add a variant of
Blob:getStringthat takes a byte range. - Add
Blob:getI8/getU8/getI16/getU16/getI32/getU32/getF32/getF64.
Filesystem
- Add argument to
lovr.filesystem.loadto restrict chunks to text/binary.
Graphics
- Add
Pass:roundrect. - Add variant of
Pass:conethat takes twovec3endpoints. - Add variant of
Pass:drawthat takes aTexture. - Add
Pass:setViewCullto enable frustum culling. - Add
Model:getBlendShapeWeight, andModel: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
Meshobject (sorry!). - Add
Model:clone. - Add
materialsflag tolovr.graphics.newModel. - Add
lovr.graphics.isInitialized(mostly internal). - Add support for using depth textures in multisampled render passes.
- Add
depthResolvefeature tolovr.graphics.getFeatures. - Add a variant of
Texture:newViewthat creates a 2D slice of a layer/mipmap of a texture. - Add a variant of
Pass:sendthat takes tables for uniform buffers. - Add
Buffer:getDataandBuffer:newReadback. - Add
Texture:getPixels/setPixels/clear/newReadback/generateMipmaps. - Add support for stepping through shaders in e.g. RenderDoc when
t.graphics.debugis set. - Add
lovr.graphics.is/setTimingEnabledto record GPU durations for each Pass object. - Add
lovr.graphics.newPass. - Add
Pass:setCanvasandPass:setClear. - Add
Pass:getStats. - Add
Pass:reset. - Add
Pass:getScissorandPass:getViewport. - Add
Pass:barrier. - Add
Pass:beginTally/finishTallyandPass:get/setTallyBuffer. - Add support for
#includein 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, andhand/*/gripDevices. - Add support for using
lovr.headsetwhenlovr.graphicsis disabled, on supported runtimes. - Add support for
elbow/leftandelbow/rightposes on Ultraleap hand tracking. - Add
lovr.headset.getDirection. - Add
lovr.headset.isVisibleandlovr.visiblecallback. - Add
lovr.recentercallback. - Add
floorDevice. - Add
t.headset.seatedandlovr.headset.isSeated. - Add
lovr.headset.stopVibration. - Add
radiusfields to joint tables returned bylovr.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, andVec3:rotate. - Add vector constants (
vec3.up,vec2.one,quat.identity, etc.). - Add
Mat4:getTranslation/getRotation/getScale/getPose. - Add variant of
Vec3:setthat takes aQuat. - Add
Mat4:reflect.
Physics
- Add
TerrainShape. - Add
World:queryBoxandWorld:querySphere. - Add
World:getTags. - Add
Shape:get/setPose. - Add missing
lovr.physics.newMeshShapefunction. - Add
Collider:isDestroyed.
System
- Add
lovr.system.wasKeyPressed/wasKeyReleased. - Add
lovr.system.getMouseX,lovr.system.getMouseY, andlovr.system.getMousePosition. - Add
lovr.system.isMouseDown. - Add
lovr.mousepressed,lovr.mousereleased,lovr.mousemoved, andlovr.wheelmovedcallbacks. - Add
lovr.system.has/setKeyRepeat.
Thread
- Add support for vectors and lightuserdata with
Channel:pushandChannel:pop.
Change
- Change
lovr.graphics.submitto 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:setColorWriteto take an optional attachment index. - Change OpenXR driver to throttle update loop when headset session is idle.
- Change
lovr.graphics.newModelto work when the asset references paths starting with./. - Change
lovr.graphics.newModelto error when the asset references paths starting with/. - Change
lovr.graphics.newBufferto take format first instead of length/data. - Change
Pass:setStencilWriteto only set the "stencil pass" action when given a single action, instead of all 3. - Change
lovr.graphicsto show a message box on Windows when Vulkan isn't supported. - Change plugin loader to call
JNI_OnLoadon Android so plugins can use JNI. - Change
t.headset.overlayto also support numeric values to control overlay sort order. - Change
World:isCollisionEnabledBetweento takenils, which act as wildcard tags. - Change
Mat4:__tostringto print matrix components. - Change
World:raycastto prevent subsequent checks when the callback returnsfalse. - Change
lovr.system.isKeyDownto take multiple keys. - Change
lovr.headset.isDown/isTouchedto return nil instead of nothing. - Change
lovr.headset.getTimeto 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.getDriverto also return the OpenXR runtime name. - Change
pitchableflag inlovr.audio.newSourceto default to true. - Change
Buffer:setData,Buffer:clear, andBuffer:getPointerto work on permanent Buffers. - Change
lovr.timer.sleepto have higher precision on Windows. - Change
lovr.headset.animateto no longer require aDeviceargument (current variant is deprecated).
Fix
- Fix
lovr.physics.newBoxShapealways 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
MeshShapenot working properly with some OBJ models. - Fix
Model:getNodeScaleto properly return the scale instead of the rotation. - Fix
Mat4:setandMat4constructors to properly use TRS order when scale is given. - Fix
lovr.graphics.newShaderto work withnilshader code (usesunlitshader). - Fix crash when
t.graphics.debugis set but the validation layers aren't installed. - Fix a few memory leaks with Readbacks, Fonts, and compute Shaders.
- Fix
Pass:setProjectionto use an infinite far plane by default. - Fix
Texture:hasUsage. - Fix
Pass:points/Pass:lineto work with temporary vectors. - Fix
lovr.event.quitto 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.newShaderto error properly if the push constants block is too big. - Fix default
lovr.logto not print secondstring.gsubresult. - Fix issue where
lovr.data.newImagewouldn't initialize emptyImageobject pixels to zero. - Fix
Model:getMaterialto work when given a string. - Fix issue where
Vec3:anglewould sometimes return NaNs. - Fix OpenXR driver when used with AR headsets.
- Fix vertex tangents (previously they only worked if the
normalMapshader flag was set). - Fix error when minimizing the desktop window on Windows.
- Fix
DistanceJoint:getAnchors. - Fix issue where
Material:getPropertiesreturned an incorrect uvScale. - Fix crash when uvShift/uvScale were given as tables in
lovr.graphics.newMaterial. - Fix retina macOS windows.
- Fix issue where
Pass:capsuledidn'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 = nilwasn't working as intended. - Fix bug where some fonts would render glyphs inside out.
Deprecate
- Deprecate
lovr.graphics.getPass(lovr.graphics.newPassshould be used instead). - Deprecate
Pass:getType. All Pass objects support both compute and rendering (computes run before draws). - Deprecate
Pass:getTarget(renamed toPass:getCanvas). - Deprecate
Pass:getSampleCount(Pass:getCanvasreturns asampleskey). - Deprecate
lovr.graphics.getBuffer(Uselovr.graphics.newBufferor tables). - Deprecate variant of
lovr.graphics.newBufferthat takes length/data as the first argument (put format first). - Deprecate
lovr.headset.get/setDisplayFrequency(it's named `lovr....
Toad Rage
Add:
- Add ability to run individual Lua files in addition to folders.
- Add Vulkan renderer.
- Add capsule, cone, and torus shapes.
- Add
segmentsoption to planes. - Add option to draw a single node of a model.
- Add indirect draws and indirect compute.
- Add depth clamp and depth offset render states.
- Add support for configuring "stencil fail" and "depth fail" stencil actions.
- Add viewport and scissor render states.
- Add
Passobjects for recording rendering work. - Add
Bufferobjects. - Add
Buffer:getPointerfor accessing FFI pointers to GPU memory. - Add support for half floats for vertex attributes and buffer data.
- Add texture views.
- Add single-pass rendering to multi-layer textures (array, cubemap, 3D).
- Add
r8,rg8,r16,rg16,rgba16, andrgb565image and texture formats. - Add
d32fs8texture format. - Add support for BC4, BC5, BC6, and BC7 texture formats.
- Add support for loading uncompressed formats from DDS and KTX files.
- Add support for loading KTX2 textures.
- Add support for loading non-2D textures from image files.
- Add support for loading DDS and KTX textures in glTF models.
- Add support for the
KHR_texture_transformglTF extension. - Add support for loading base64 images from glTF models.
- Add
Samplerobjects. - Add
Tallyobjects for GPU queries. - Add
Readbackobjects for asynchronous GPU readbacks. - Add
t.graphics.shadercacheoption to cache compiled shaders to disk. - Add
lovr.graphics.compileShaderand the ability to load shaders from SPIR-V. - Add
normaldefault shader. - Add
Font:getKerning. - Add
Font:getLines. - Add
Font:getVertices. - Add support for rendering multicolor text.
- Add
Pass:blit,Pass:clear,Pass:copy,Pass:mipmap, andPass:readfor raw GPU transfers. - Add
lovr.graphics.isFormatSupportedandlovr.graphics.getDevice. - Add
eye/gazeDevice. - Add
t.headset.submitdepthflag to submit depth buffers to the OpenXR runtime. - Add
t.headset.overlayconf.lua flag to run as an OpenXR overlay. - Add support for
keyboarddevice pose on Oculus Quest. - Add support for reading hand tracking pinch strength (it's mapped to trigger).
- Add
thumbrestDeviceButton. - Add OpenXR support for
a,b,x, andyDeviceButtons. - Add OpenXR support for
hand/left/pointandhand/right/pointDevices. - Add OpenXR support for Windows Mixed Reality controllers.
- Add OpenXR support for Oculus Quest hand tracking models via
lovr.headset.newModel. - Add OpenXR support for Vive tracker devices.
- Add OpenXR support for
lovr.headset.getDisplayFrequency. - Add
lovr.headset.setDisplayFrequencyandlovr.headset.getDisplayFrequencies. - Add
lovr.headset.isFocused. - Add
lovr.headset.getDeltaTime. - Add support for passing
vec2s as scale arguments. - Add support for passing numbers when calling functions on vectors.
- Add functions to
ModelData(it didn't have any before, now it has lots). - Add bounding sphere to
ModelandModelData. - Add ability to procedurally animate model node scales.
- Add
Model:getMetadatato return raw JSON from glTF models. - Add
Rasterizer:getWidth,Rasterizer:getDimensions, andRasterizer:getBoundingBox. - Add
Rasterizer:getKerningandRasterizer:getBearing. - Add
Rasterizer:getCurves. - Add
Rasterizer:newImage. - Add
Vec2:angle,Vec3:angle, andVec4:angle. - Add
Vec2:equals,Vec3:equals,Vec4:equals,Quat:equals, andMat4:equals. - Add
Sound:getCapacityandSound:getByteStride. - Add
Source:get/setPitch. - Add
Source:isSpatialandspatialflag tolovr.audio.newSource. - Add macOS support for requesting the
audiocapturePermission withlovr.system.requestPermission. - Add
World:getContacts. - Add
World:get/setStepCount. - Add
lovr.system.isKeyDown.
Change:
- Change default headset driver to OpenXR.
- Change
lovr.headset.getSkeletonto also return joint radii. - Change shader GLSL version to 4.60.
- Change desktop window to be mono.
- Change maximum view count from 2 to 6.
- Change default projection to have an infinite far plane with a reversed Z range.
- Change skeletal animation to use compute shaders.
- Change OBJ loader to support non-triangular faces.
- Change
setColorto accept a second alpha parameter when using a hexcode. - Change
Source:setEffectEnabledto error when called on a Source that has effects disabled. - Change
lovr.headset.isDownto returnnilinstead offalsewhen a button is not supported by a Device. - Change text rendering to print missing glyph characters instead of erroring on missing glyphs.
- Change
dtparameter to use predicted headset display time delta instead of wallclock delta time, when available. - Change
lovr.math.noiseto use simplex noise instead of Perlin noise. - Change
lovr.filesystem.writeandlovr.filesystem.appendto return success instead of byte count. - Change window-related functions to be on
lovr.systeminstead oflovr.graphics. - Change
Font:get/setLineHeighttoFont:get/setLineSpacing. - Change
lovr.graphics.stencilto be split into separate "stencil test" and "stencil write" states.
Fix:
- Fix flickering on AMD GPUs
- Fix crash when calling
lovr.audio.setGeometryorlovr.physics.newMeshColliderwith zero vertices/indices. - Fix
requirenot finding plugins packaged as "all in one" Lua libraries. - Fix audio capture issues on Android.
- Fix Oculus Quest hand model orientation.
- Fix issue that would cause vectors to rarely get corrupted with nans in LuaJIT.
- Fix potential crash when using
Object:releaserapidly. - Fix bug where Collider friction had no effect, and set default friction to infinity instead of 0 (no behavior change).
- Fix issue preventing the audio, graphics, and headset modules from being
required in threads. - Fix issue with
lovr.math.gammaToLinearandlovr.math.linearToGammawhen used with a table. - Fix error when calling
lovr.filesystem.getDirectoryItemswhentable.sortis unavailable. - Fix
Mat4 * Vec3. - Fix issue with
World:raycastandMeshShapes. - Fix bug where error screen wouldn't show up if there was an error in
lovr.drawwhen using OpenXR. - Fix issue where
conf.luawouldn't get read properly on Android. - Fix error when passing LÖVR objects to
Thread:start. - Fix bug where first command line argument would not be available in fused mode.
- Fix bug where Font vertex winding would be flipped when toggling
Font:setFlipEnabled.
Remove:
- Remove OpenGL and WebGL renderers.
- Remove
rgbandrgba4texture formats. - Remove
MeshandShaderBlock(they are replaced byBuffer). - Remove
Canvas(textures can be rendered to directly with render passes). - Remove arc primitive.
- Remove line width.
- Remove
Font:setFlipEnabled(font flips automatically when needed). - Remove WebAssembly build (it will be back soon!)
- Remove
openvr,oculus,vrapi,webxr, andpicoheadset drivers. - Remove
beaconDevices. - Remove
lovr.headset.getDisplayMask. - Remove
effects = falseflag fromlovr.audio.newSource(usespatialflag).
Government Goop
Add:
- Add support for Vive trackers (again)
- Add support for Quest 2
- Add
Devices for elbows, shoulders, chest, waist, knees, feet, camera, and keyboard - Add support for OpenXR on Linux
- Add Windows Mixed Reality controller bindings for OpenVR
- Add
lovr.systemmodule - Add
lovr.permissioncallback - Add plugin system
- Add support for
requireing libraries inside APKs - Add UVs to
lovr.graphics.cylinder - Add a stack trace to thread errors
- Add
Mat4:target - Add support for binary STL models
- Add
t.audio.spatializerto support switching audio spatializers - Add support for Oculus Audio Spatializer
- Add support for Steam Audio
- Add support for WAV sounds
- Add support for MP3 sounds
- Add support for ambisonic sounds
- Add
SampleFormatfor creating floating point Sounds - Add
t.audio.startto control whether audio devices are automatically started - Add
lovr.audio.getDevices,lovr.audio.setDevice,lovr.audio.start,lovr.audio.stop, andlovr.audio.isStarted - Add
lovr.audio.setGeometryandAudioMaterial - Add
lovr.audio.get/setAbsorption - Add
Effect,Source:isEffectEnabled, andSource:setEffectEnabled - Add
Source:get/setRadius - Add
Source:get/setDirectivity - Add
Source:clone - Add
VolumeUnitparameter tolovr.audio.get/setVolumeandSource:get/setVolume - Add support for
lovr.headset.getVelocityto the WebXR driver
Change:
- Change
SoundDatato be namedSound - Change
TextureDatato be namedImage - Change
Image:encodeto return aBlobinstead of writing to a file - Change default physics linear damping from
.01to0 - Change
lovr.mirrorto correctly render transparent headset textures - Change
Mat4:lookAtto compute a "look at" view matrix (useMat4:targetfor the old behavior) - Change
lovr.filesystem.writeandlovr.filesystem.appendto accept Blobs - Change
lovr.headsetto submit empty frames whenlovr.drawis missing (instead of not submitting anything) - Change default font shader to have more precise/sharp antialiasing
- Change
ShaderBlock:sendto accept a byte range when sending a Blob - Change
lovr.graphics.newFontto accept custom glyph padding and SDF range values - Change
lovr.audio.isSpatializedtolovr.audio.getSpatializer - Change
Source:setConetoSource:setDirectivity - Change
samplesvalue ofTimeUnitto be namedframes.
Fix:
- Fix hand tracking orientation on Quest
- Fix improper vsync when changing headset drivers during a restart
- Fix graphics flickering on Intel GPUs
- Fix lovr.math when used on threads
- Fix crash when threads threw non-string errors
- Fix the
lovr.math.newCurvevariant that takes a single number for the point count - Fix issue where
Mat4:unpackwould sometimes returnnanangles - Fix error screen erroring after a while when it ran out of vectors
- Fix error screen erroring when
t.math.globalswasfalse - Fix crash with
vrapidriver when requesting pose for devices other than head/hands - Fix
lovr.filesystem.appendon unix - Fix
lovr.headset.getDisplayDimensionsto return dimensions for a single eye on the desktop driver - Fix
lovr.restartandarg.restarton WebAssembly - Fix
lovr.graphics.getBlendModewhen blending is disabled - Fix crash when moving a
Shapewhen it isn't attached to a Collider - Fix issues with macOS Big Sur
- Fix text wrapping issue with lines ending in spaces
- Fix some crashes in lovr.physics to log warnings instead
Remove:
- Remove support for Oculus Go
- Remove
lua_modulesanddepsfrom the default require paths - Remove
--rootcommand line argument - Remove
lovr.graphics.triangle - Remove C require path (use plugins)
- Remove
enet(use thelovr-enetplugin) - Remove
cjson(use thelovr-cjsonplugin) - Remove
AudioStream(usestreamSounds instead) - Remove
Source:getTypeandSourceType(usedecodeoption of newSource/Sound) - Remove
Source:getBitDepth,Source:getChannelCount, andSource:getSampleRate - Remove
lovr.audio.getMicrophoneNames,lovr.audio.newMicrophone, andMicrophone - Remove
lovr.audio.update - Remove
lovr.audio.pause - Remove
lovr.audio.get/setVelocity,Source:get/setVelocity, andlovr.audio.get/setDopplerEffect - Remove
Source:get/setFalloff - Remove
Source:get/setPitch - Remove
Source:get/setVolumeLimits - Remove
Source:is/setRelative
Maximum Moss
Add:
- Add
lovr.headset.getSkeleton. - Add
lovr.headset.animateandanimatedflag tolovr.headset.newModel. - Add
lovr.headset.wasPressedandlovr.headset.wasReleased. - Add
lovr.headset.getViewCount,lovr.headset.getViewPose,lovr.headset.getViewAngles. - Add
beacon/1,beacon/2,beacon/3, andbeacon/4Devices. - Add
lovr.headset.getDisplayFrequency. - Add
lovr.headset.getTime. - Add a WebXR headset driver.
- Add a Pico headset driver.
- Add
lovr.keypressed,lovr.keyreleased, andlovr.textinputcallbacks. - Add
lovr.event.restart,lovr.restartcallback, andarg.restartfor persisting data between restarts. - Add
lovr.resizecallback. - Add
lovr.logcallback. - Add
World:getColliders. - Add
World:newMeshCollider. - Add
Joint:setEnabledandJoint:isEnabled. - Add
Shape:setSensorandShape:isSensor. - Add
World:get/setResponseTime,BallJoint:get/setResponseTime, andDistanceJoint:get/setResponseTime. - Add
World:get/setTightness,BallJoint:get/setTightness,DistanceJoint:get/setTightness. - Add
lovr.graphics.getViewPoseandlovr.graphics.setViewPose. - Add
lovr.graphics.getProjection. - Add
t.graphics.debugconfig flag. - Add
computelimit tolovr.graphics.getLimits. - Add
renderpasses,buffers,textures,buffermemory, andtexturememorygraphics stats. - Add
lovr.graphics.setColorMaskandlovr.graphics.getColorMask. - Add
AudioStream:appendfor procedural audio generation. - Add
SoundData:getBlobandTextureData:getBlob. - Add support for shadow sampler uniforms.
- Add
Texture:getCompareModeandTexture:setCompareMode. - Add
sampler2DMultiviewandtextureMultiviewhelpers to shaders. - Add
highpShaderFlag. - Add
Shader:hasBlock. - Add
Model:hasJoints. - Add
:releaseto all objects to immediately destroy them from Lua. - Add support for building with Lua 5.2, 5.3, and 5.4.
Change:
- Change physics module functions to accept vector objects.
- Change animated shaders to render properly with non-animated models.
- Change the desktop headset driver to rotate the controller based on mouse movement.
- Change the desktop headset driver to emit
lovr.focusevents when window focus changes. - Change the default headset clipping planes to
0.1and100.0on all backends. - Change
Thread:startto accept arguments to pass to the Thread's function. - Change
Channel:peekto return a second value indicating if a message was present. - Change
Microphone:getDatato take new count/destination/offset arguments. - Change
Mesh:setVerticesto accept aBlobwith vertex data. - Change
lovr.graphics.setProjectionto take a view index. - Change WebAssembly build to enable the thread module by default.
- Change the 1ms sleep in the run loop to a 0ms sleep.
- Change
Curve:renderto always return 2 points if the Curve is a line. - Change
Curve:renderto be faster. - Change
lovr.data.newTextureDatato allow filling in initial contents with a Blob. - Change
lovr.data.newTextureDatato accept a TextureData to clone. - Change
lovr.filesystem.getDirectoryItemsto omit.and... - Change
lovr.filesystem.getDirectoryItemsto return sorted filenames. - Change
Shader:sendto return a boolean instead of erroring on failure. - Change
ShaderBlock:getShaderCodeto accept an optional namespace for accessing the block. - Change OBJ model loading to be faster.
- Change
Vec3:setto accept aMat4.
Fix:
- Fix many issues with the OpenXR headset driver.
- Fix an issue when restarting some projects that had multiple textures per draw.
- Fix an issue where OBJ models had no AABB.
- Fix an issue where
Channel:pusherrored when a userdata was its only argument. - Fix a crash when passing
niltolovr.thread.newThread. - Fix
lovr.data.newBlob(blob)to properly copy data to the new Blob. - Fix an issue where textures could load upside down sometimes when using threads.
- Fix an issue with screen tearing on the bottom of the window on macOS.
- Fix an issue where
lovr.headset.getHandsreturned an empty table on Linux. - Fix an issue with forced vsync breaking VR timing in new windows updates.
- Fix an issue where printing only whitespace characters would cause visual glitches.
- Fix several issues with stereo Shaders and Canvases on Android.
- Fix
lovr.graphics.getFeatures().computereturningfalseon Android. - Fix a confusing message when passing nothing to
lovr.graphics.points/lovr.graphics.line. - Fix issue with using Mesh attributes with integer types in shaders.
- Fix crash when using a
BlobinShaderBlock:send. - Fix
Thread:waiton Windows.
Remove:
- Remove
webvrheadset driver (usewebxrinstead). - Remove
leapheadset driver (use the Ultraleap OpenXR API Layer instead). - Remove
oculusmobileheadset driver (usevrapiinstead). - Remove
SoundData:getPointerandTextureData:getPointer(use:getBlob). - Remove
Source:resumeandlovr.audio.resume(useSource:play). - Remove
Source:rewindandlovr.audio.rewind(useSource:seek(0)). - Remove
Source:isPausedandSource:isStopped(use:isPlaying). - Remove
lovr.event.quit('restart')variant. - Remove
t.hotkeysconfig (uselovr.keypressedandlovr.keyreleased). - Remove
lovr.filesystem.getApplicationId(uselovr.filesystem.getIdentity). - Remove
anisotropicFilterMode(anisotropy can be used with any filter mode).
Very Velociraptor
Add:
- Add support for the Oculus Quest.
- Add support for Valve Index controllers.
- Add support for SteamVR actions.
- Add support for Leap Motion.
- Add an OpenXR headset driver.
- Add a new
standardPBR shader. - Add the ability to have multiple headset tracking drivers active at once.
- Add
strengthandfrequencyparameters tolovr.headset.vibrate. - Add
lovr.headset.getDisplayMask. - Add
lovr.headset.isTracked. - Add support for hexcode colors.
- Add
vec2andvec4objects. - Add vector properties and vector swizzles.
- Add support for loading KTX and ASTC textures.
- Add
TextureData:pastefor copying between TextureData objects. - Add
TextureData:getFormat. - Add default hotkeys: Escape to quit and F5 to reload, configurable using the
t.hotkeysconf flag. - Add
flagsargument tolovr.graphics.newShaderfor configuring shaders without writing GLSL. - Add
DefaultShaderenum for creating instances of built-in shaders. - Add an
animatedshader flag to automatically make shaders animated. - Add
lovr.graphics.tickandlovr.graphics.tockfor accurate GPU profiling. - Add
getPoseandsetPosefunctions tolovr.audio,Source, andCollider. - Add
Model:poseandModel:getNodePosefunctions for modifying individual joints in a Model. - Add support for cubic spline animation keyframe interpolation in glTF assets.
- Add support for embedded base64 data in glTF assets.
- Add
astc,dxt,instancedstereo,multiview, andtimersGraphicsFeatures. - Add experimental tup build system as an alternative to CMake.
- Add
lovr.math.drainfunction for freeing temporary vectors. - Add a
t.window.resizableflag to make the mirror window resizable. - Add a
t.window.vsynchint to control vsync (may be ignored if necessary for proper VR timing). - Add
getNodeCount,getMaterialCount, andgetAnimationCounttoModel.
Change:
- Change mobile renderer to use optimized multiview rendering.
- Change all rendering to stall the GPU way less. Everything is faster.
- Change Android to use LuaJIT by default.
- Change vectors to be temporary by default, use
new-prefixed functions for permanent vectors. - Change
lovr.filesystem.readto accept and return the number of bytes read. - Change
lovr.filesystemto follow symbolic links. - Change
lovr.graphics.newMeshto accept aBlobfor binary vertex data. - Change
fakeheadset driver todesktop. - Change
TextureData:getPixel/setPixelto support more formats:rgb,r32f,rg32f,rgba32f. - Change
lovr.graphics.getSystemLimitstolovr.graphics.getLimits. - Change
lovr.graphics.getSupportedtolovr.graphics.getFeatures. - Change
lovr.graphics.planeto accept optional uv coordinates to draw a subregion of a Texture. - Change
Font:getWidthto also return the number of wrapped lines. - Change
lovr.thread.newThreadto accept a filename or aBlob. - Change
lovr.headset.getTypetolovr.headset.getName, returning the raw headset name string. - Change
lovr.graphics.circlesize argument to be a radius instead of a diameter. - Change
MULTICANVASshader define to be amulticanvasshader flag. - Change
Source:getDirection,:setDirectiontoSource:getOrientation,setOrientation. - Change nogame screen to use a signed distance field shader instead of an image (!).
Fix:
- Fix problems when creating Blobs with a negative size.
- Fix many bugs or missing features with the glTF importer.
- Fix issue where refcounting was not thread safe.
- Fix vertex winding order of cylinders and spheres.
- Fix an issue where the error screen wouldn't show up when the headset module was disabled.
- Fix console output on Windows.
Remove:
- Remove
Animatorobjects, they are replaced by theModel:animatefunction. - Remove
Controllerobjects, equivalent functions that accept a Device are now inlovr.headset. - Remove
lovr.headset.isMounted, uselovr.headset.isDown('head', 'proximity')instead. - Remove controller-related callbacks (
controlleradded/removed/pressed/released). - Remove orientation arguments from
lovr.graphics.skybox, rotation is automatically applied. - Remove
Poolobjects, there is a default temporary vector Pool built in tolovr.math. - Remove
t.gammacorrectconf flag, all rendering is gamma correct now.
Mushroom Detector
Community
- LÖVR was ported to Android! See
lovr-oculus-mobilefrom @mcclure. - There's a new live-reloading wrapper,
lodr, from @mcclure. - See
lovr-native-examplefor easily integrating C code into a project. - The documentation has a new version selector dropdown.
- The WebAssembly build is down to 1MB!
- New example: Spectator Camera.
Framework
Add:
- Add an Android port, with official support for the Oculus Go and Gear VR.
- Add support for the Oculus Desktop SDK (LibOVR).
- Add automatic batching and instancing of draw calls.
- Add
vec3,mat4,quat, andPoolobjects tolovr.math. - Add support for Vive trackers (they are exposed as Controllers).
- Add
goandgearHeadsetTypes. - Add
oculusandoculusmobileHeadsetDrivers. - Add the
lovr.mirrorcallback for custom rendering to the desktop window. - Add
Controller:getVelocityandController:getAngularVelocity. - Add
Curveobjects for working with Bézier curves. - Add
Canvas:getDepthTexture. - Add
lovr.headset.getBoundsGeometry(again). - Add
lovr.headset.getMirrorTexture. - Add
lovr.graphics.discard. - Add
lovr.graphics.flush. - Add
lovr.graphics.setAlphaSamplingandlovr.graphics.getAlphaSampling. - Add
lovr.graphics.setProjection. - Add
lovr.graphics.getPixelDensity. - Add
lovr.graphics.hasWindow. - Add
ubyte,short,ushort, anduinttypes for Mesh attributes. - Add
Font:hasGlyphs. - Add
Font:getRasterizer. - Add
Font:isFlipEnabledandFont:setFlipEnabled. - Add
ShaderBlock:read. - Add
lovr.filesystem.getApplicationId. - Add the
--rootcommand line argument to run a project from a directory inside an archive. - Add a default HTML file used in the emscripten build, so you don't need to write it yourself.
Change:
- Change API functions to accept vectors and matrices in addition to numbers, where relevant.
- Change some matrix and vector math functions to use SIMD intrinsics.
- Change
lovr.headset.setMirroredand thet.headset.mirroredconf.lua flag to take a HeadsetEye. - Change the mirror window to use the currently active color and shader.
- Change
lovr.graphics.setBlendModeto acceptnilto disable blending. - Change
lovr.graphics.triangleto take multiple triangles to draw. - Change
lovr.graphics.cylinderto take position, rotation, and scale (length) arguments. - Change
lovr.graphics.newShaderBlockto take aBlockTypeinstead of awritableflag. - Change
lovr.graphics.newMeshandlovr.graphics.newShaderBlockto accept areadableflag. - Change
lovr.graphics.fillto accept a subregion of the input Texture to use. - Change
emissivecolors in Materials to default to black instead of white. - Change
lovr.graphics.getSystemLimitsto return the maximum ShaderBlock size (blocksize). - Change
lovr.filesystem.mountto accept a path inside the archive to mount. - Change the
depthflag oflovr.graphics.newCanvasto additionally accept a table withformatandreadablekeys for creating a Canvas with a readable depth buffer. - Change
Animatorfunctions to accept both animation names and indices. - Change
DrawModetoDrawStyleandMeshDrawModetoDrawMode(enum values are unchanged). - Change
DepthFormatto be merged intoTextureFormat(enum values are unchanged). - Change
lovr.graphics.newCanvasto create Textures with theclampTextureWrap. - Change
Font:setPixelDensityto acceptnilto reset the density to the default. - Change the
computeshadersgraphics feature tocompute. - Change the default font to Varela Round.
- Change
lovr.getOSto returnAndroidon Android. - Change build system to be more modular and configurable. Modules can be individually included or excluded, and it's possible to choose whether to use libraries already on the system or compile them from the
depsfolder.
Fix:
- Fix a bug where
lovr.filesystem.unmountwas not exposed. - Fix a memory corruption when using
Channel:peek. - Fix a bug where Microphones wouldn't clean up properly when they were destroyed.
- Fix fonts to render tabs as four spaces instead of...whatever they were doing.
Remove:
- Remove
Transformobjects (usemat4instead). - Remove support for importing FBX models (
fbx2gltfcan be used to convert to glTF). - Remove
VertexData. - Remove most of the
ModelDataAPI. - Remove
Model:getMesh. - Remove
replaceBlendMode. - Remove
Mesh:drawInstancedandModel:drawInstanced(drawtakes an instance count now). - Remove
lovr.headset.setMirrored,lovr.headset.isMirrored, and thet.headset.mirrorflag. - Remove variant of
lovr.headset.getPose(and getPosition/getOrientation) that took a HeadsetEye. - Remove
ShaderBlock:isWritable(useShaderBlock:getType). - Remove
Canvas:getDepthFormat(useCanvas:getDepthTextureinstead).
Ginormous Giraffe
Community
- There are new
lovr-keyboardandlovr-mouselibraries for mouse and keyboard input. - Nightly builds for Windows can be downloaded from https://lovr.org/download/nightly.
- Prebuilt binaries for macOS can be downloaded from https://lovr.org/download/mac.
- The WebAssembly build is 30% smaller.
Framework
Add:
- Add
Microphoneobjects,lovr.audio.getMicrophoneNames, andlovr.audio.newMicrophone. - Add
SoundDataobjects for accessing individual samples of sound files andSource:getType. - Add support for compute shaders via
lovr.graphics.newComputeShaderandlovr.graphics.compute. - Add
ShaderBlockobjects for efficiently sending large amounts of data to Shaders. - Add
AudioStream:decodeto decode a chunk of audio and return it as a SoundData. - Add a new
lineloopvalue forMeshDrawMode. - Add
lovr.math.noisefor perlin noise. - Support
requireing C libraries (.dll, .so) files as LÖVR modules. - Add
Material:setTransformandMaterial:getTransformfor using subregions of textures or applying other texture coordinate transformations. - Add
Texture:getMipmapCount. - Add support for new Texture/Canvas formats:
rgba4,r16f,r32f,rg16f,rg32f,rgb5a1,rgb10a2. - Add support for loading HDR image files in unclipped floating point texture formats.
- Add
Texture:getFormat. - Add
conf.headset.msaato control the antialiasing of the headset Canvas (it can be different from the MSAA of the desktop window now). - Add
lovr.graphics.getSupportedso you can figure out if compute shaders are supported.
Change:
- Change rendering to use single pass stereo rendering on supported graphics cards. This renders both eyes at the same time which should reduce CPU usage and nearly double rendering performance.
- Change fonts to use stb_truetype instead of FreeType, which seems to improve text quality.
- Change
lovr.audio.newSourceto accept aSourceTypeso you can create a Source backed by either an AudioStream or a SoundData. - Change
lovr.graphics.newShaderto accept Blobs containing shader source code. - Change
lovr.filesystem.getRequirePathandlovr.filesystem.setRequirePathto support C require paths. - Change the default
lovr.filesystemto look inlua_modulesfor Lua modules for better luarocks integration. - Change
Texture:replacePixelsto accept an x/y offset and a mipmap level to replace. - Change
Texture:getWidth,Texture:getHeight, andTexture:getDimensionsto accept an optional mipmap level. - Change
lovr.graphics.newShaderto work with strings longer than 8,192 characters. - Change
lovr.data.newTextureDatato support an optional texture format. - Change
Transform:getMatrixto accept a table to fill with values.
Fix:
- Fix an issue where the no game screen's
conf.luawasn't loading properly. - Fix
lovr.event.pushto work with custom event names. - Fix
lovr.graphics.getBlendModeto report correct values. - Fix various memory leaks.
Remove:
- Remove
AudioStream:seek. - Remove support for COLLADA models.
- Remove support for loading tga, bmp, and gif textures.
Hangry Goose
Community
- LÖVR now has haxe bindings thanks to @shakesoda!
- The documentation is exposed as JSON at https://lovr.org/api/data.
- The WebVR runtime has been rewritten to be faster and more stable.
Framework
Add:
- Add the
lovr.threadmodule,Threadobjects,Channelobjects, and thelovr.threaderrorcallback. - Add the ability to render to multiple Canvas objects simultaneously and
lovr.graphics.getCanvasandlovr.graphics.setCanvas. - Add support for 2D array textures and 3D volume textures.
- Add the
lovr.mountcallback andlovr.headset.isMountedfor detecting when/if the headset is on a head. - Add
lovr.datamodule andAudioStream,ModelData,Rasterizer,TextureData, andVertexDataobjects. - Add a variant of
lovr.event.quitthat restarts instead of quitting. - Add
Texture:replacePixelsfor modifying Texture contents. - Add variants of
lovr.graphics.clearfor clearing the depth and stencil buffers to custom values. - Add a second parameter to
lovr.graphics.setDepthTestfor controlling whether the depth buffer is written to. - Add
ModelData:getVertexDatafor access to raw vertex data in models. - Add new
MaterialTextures for PBR maps:emissive,metalness,roughness,occlusion, andnormal. They are loaded for new Models by default. - Add
MaterialScalar,Material:getScalar, andMaterial:setScalarfor metalness and roughness properties. - Add an
emissiveMaterialColor. - Add a
mipmapsflag tolovr.graphics.newTextureandlovr.graphics.newCanvas. - Add
lovr.audio.getDopplerEffectandlovr.audio.setDopplerEffect(removed in a previous version). - Add
lovrTangentas a vec3 accessible to Shaders and load tangents from Models. - Add
Mesh:attachAttributesandMesh:detachAttributesfor improved instancing support. - Add
lovr.filesystem.getRequirePathandlovr.filesystem.setRequirePath. - Add
lovr.filesystem.getWorkingDirectory. - Add
Canvas:newTextureDatafor reading pixel data from Canvas objects.
Change:
- Change
lovr.timer.getFPSto average over the last 90 frames instead of 60. - Change
lovr.graphics.newCanvasto error when given negative/zero sizes. - Change
Canvas:renderToto error if a function isn't supplied to it. - Change
Canvas:renderToto pass extra arguments to the render callback. - Change
lovr.graphics.planeto accept separate x/y scales for the plane. - Change
Source:getChannelstoSource:getChannelCount. - Change the fake headset driver to use right click instead of left click for the controller trigger.
- Change
lovr.controllerpressedandlovr.controllerreleasedto passnilinstead of'unknown'for unknown controller buttons. - Change
lovr.graphics.newMeshandMesh:setVerticesto accept aVertexDataobject to load vertices from. - Change
Mesh:setVertexMapto accept aBlobfor fast vertex map updating. - Change
Shader:sendto accept aBlobfor updating Shaders with arbitrary binary data. - Change
Collider:getShapeListtoCollider:getShapes. - Change
Collider:getJointListtoCollider:getJointsand also fix it. - Change the fake headset driver to respect the
lovr.headset.setMirroredfunction. - Change the default window size.
- Change the main loop to a cooperative coroutine-based loop.
- Change
Blob:getFilenametoBlob:getName.
Fix:
- Fix sphere UV coordinates to be flipped for correct texture mapping.
- Fix issues with transforms of non-animated models.
- Fix
requirewhen used with dot-separated module paths. - Fix a bug where
conf.luawould be loaded from the working directory if one wasn't present in the project. - Fix a crash when
lovr.headset.getDisplayDimensionswas called before the first frame was rendered. - Fix
Joint:getTypereturningnilfor DistanceJoints. - Fix
Texture:setFilternot doing anything for cubemap textures. - Fix a bug where sources would sometimes not be able to play again after ending.
- Fix
lovr.audio.newSourceto show an error message when passed an invalid file. - Fix an edge case in quaternion interpolation that caused some animations with rotations to be bad.
- Fix
Model:getAABB. - Fix the winding order of cubes rendered with
lovr.graphics.cube. - Fix
lovr.loadto correctly pass in the argument table.
Remove:
- Remove the
lovr.stepcallback. It is now returned fromlovr.run. - Remove
lovr.headset.getBoundsGeometry. - Remove
lovr.headset.isPresent. - Remove the ability to modify the view matrix and the
MatrixTypeenum. - Remove the variant
lovr.graphics.plane(texture)for drawing fullscreen quads, it has its ownlovr.graphics.fillfunction now. - Remove a variant of
lovr.filesystem.newBlobthat creates a Blob from a string, uselovr.data.newBlobinstead.