Skip to content

@bjornbytes bjornbytes released this Oct 15, 2019 · 195 commits to master since this release

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 standard PBR shader.
  • Add the ability to have multiple headset tracking drivers active at once.
  • Add strength and frequency parameters to lovr.headset.vibrate.
  • Add lovr.headset.getDisplayMask.
  • Add lovr.headset.isTracked.
  • Add support for hexcode colors.
  • Add vec2 and vec4 objects.
  • Add vector properties and vector swizzles.
  • Add support for loading KTX and ASTC textures.
  • Add TextureData:paste for copying between TextureData objects.
  • Add TextureData:getFormat.
  • Add default hotkeys: Escape to quit and F5 to reload, configurable using the t.hotkeys conf flag.
  • Add flags argument to lovr.graphics.newShader for configuring shaders without writing GLSL.
  • Add DefaultShader enum for creating instances of built-in shaders.
  • Add an animated shader flag to automatically make shaders animated.
  • Add lovr.graphics.tick and lovr.graphics.tock for accurate GPU profiling.
  • Add getPose and setPose functions to lovr.audio, Source, and Collider.
  • Add Model:pose and Model:getNodePose functions 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, and timers GraphicsFeatures.
  • Add experimental tup build system as an alternative to CMake.
  • Add lovr.math.drain function for freeing temporary vectors.
  • Add a t.window.resizable flag to make the mirror window resizable.
  • Add a t.window.vsync hint to control vsync (may be ignored if necessary for proper VR timing).
  • Add getNodeCount, getMaterialCount, and getAnimationCount to Model.

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.read to accept and return the number of bytes read.
  • Change lovr.filesystem to follow symbolic links.
  • Change lovr.graphics.newMesh to accept a Blob for binary vertex data.
  • Change fake headset driver to desktop.
  • Change TextureData:getPixel/setPixel to support more formats: rgb, r32f, rg32f, rgba32f.
  • Change lovr.graphics.getSystemLimits to lovr.graphics.getLimits.
  • Change lovr.graphics.getSupported to lovr.graphics.getFeatures.
  • Change lovr.graphics.plane to accept optional uv coordinates to draw a subregion of a Texture.
  • Change Font:getWidth to also return the number of wrapped lines.
  • Change lovr.thread.newThread to accept a filename or a Blob.
  • Change lovr.headset.getType to lovr.headset.getName, returning the raw headset name string.
  • Change lovr.graphics.circle size argument to be a radius instead of a diameter.
  • Change MULTICANVAS shader define to be a multicanvas shader flag.
  • Change Source:getDirection, :setDirection to Source: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 Animator objects, they are replaced by the Model:animate function.
  • Remove Controller objects, equivalent functions that accept a Device are now in lovr.headset.
  • Remove lovr.headset.isMounted, use lovr.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 Pool objects, there is a default temporary vector Pool built in to lovr.math.
  • Remove t.gammacorrect conf flag, all rendering is gamma correct now.
Assets 4

@bjornbytes bjornbytes released this Feb 14, 2019 · 724 commits to master since this release

Community

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, and Pool objects to lovr.math.
  • Add support for Vive trackers (they are exposed as Controllers).
  • Add go and gear HeadsetTypes.
  • Add oculus and oculusmobile HeadsetDrivers.
  • Add the lovr.mirror callback for custom rendering to the desktop window.
  • Add Controller:getVelocity and Controller:getAngularVelocity.
  • Add Curve objects 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.setAlphaSampling and lovr.graphics.getAlphaSampling.
  • Add lovr.graphics.setProjection.
  • Add lovr.graphics.getPixelDensity.
  • Add lovr.graphics.hasWindow.
  • Add ubyte, short, ushort, and uint types for Mesh attributes.
  • Add Font:hasGlyphs.
  • Add Font:getRasterizer.
  • Add Font:isFlipEnabled and Font:setFlipEnabled.
  • Add ShaderBlock:read.
  • Add lovr.filesystem.getApplicationId.
  • Add the --root command 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.setMirrored and the t.headset.mirrored conf.lua flag to take a HeadsetEye.
  • Change the mirror window to use the currently active color and shader.
  • Change lovr.graphics.setBlendMode to accept nil to disable blending.
  • Change lovr.graphics.triangle to take multiple triangles to draw.
  • Change lovr.graphics.cylinder to take position, rotation, and scale (length) arguments.
  • Change lovr.graphics.newShaderBlock to take a BlockType instead of a writable flag.
  • Change lovr.graphics.newMesh and lovr.graphics.newShaderBlock to accept a readable flag.
  • Change lovr.graphics.fill to accept a subregion of the input Texture to use.
  • Change emissive colors in Materials to default to black instead of white.
  • Change lovr.graphics.getSystemLimits to return the maximum ShaderBlock size (blocksize).
  • Change lovr.filesystem.mount to accept a path inside the archive to mount.
  • Change the depth flag of lovr.graphics.newCanvas to additionally accept a table with format and readable keys for creating a Canvas with a readable depth buffer.
  • Change Animator functions to accept both animation names and indices.
  • Change DrawMode to DrawStyle and MeshDrawMode to DrawMode (enum values are unchanged).
  • Change DepthFormat to be merged into TextureFormat (enum values are unchanged).
  • Change lovr.graphics.newCanvas to create Textures with the clamp TextureWrap.
  • Change Font:setPixelDensity to accept nil to reset the density to the default.
  • Change the computeshaders graphics feature to compute.
  • Change the default font to Varela Round.
  • Change lovr.getOS to return Android on 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 deps folder.

Fix:

  • Fix a bug where lovr.filesystem.unmount was 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 Transform objects (use mat4 instead).
  • Remove support for importing FBX models (fbx2gltf can be used to convert to glTF).
  • Remove VertexData.
  • Remove most of the ModelData API.
  • Remove Model:getMesh.
  • Remove replace BlendMode.
  • Remove Mesh:drawInstanced and Model:drawInstanced (draw takes an instance count now).
  • Remove lovr.headset.setMirrored, lovr.headset.isMirrored, and the t.headset.mirror flag.
  • Remove variant of lovr.headset.getPose (and getPosition/getOrientation) that took a HeadsetEye.
  • Remove ShaderBlock:isWritable (use ShaderBlock:getType).
  • Remove Canvas:getDepthFormat (use Canvas:getDepthTexture instead).
Assets 5

@bjornbytes bjornbytes released this Sep 5, 2018 · 1133 commits to master since this release

Community

Framework

Add:

  • Add Microphone objects, lovr.audio.getMicrophoneNames, and lovr.audio.newMicrophone.
  • Add SoundData objects for accessing individual samples of sound files and Source:getType.
  • Add support for compute shaders via lovr.graphics.newComputeShader and lovr.graphics.compute.
  • Add ShaderBlock objects for efficiently sending large amounts of data to Shaders.
  • Add AudioStream:decode to decode a chunk of audio and return it as a SoundData.
  • Add a new lineloop value for MeshDrawMode.
  • Add lovr.math.noise for perlin noise.
  • Support requireing C libraries (.dll, .so) files as LÖVR modules.
  • Add Material:setTransform and Material:getTransform for 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.msaa to control the antialiasing of the headset Canvas (it can be different from the MSAA of the desktop window now).
  • Add lovr.graphics.getSupported so 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.newSource to accept a SourceType so you can create a Source backed by either an AudioStream or a SoundData.
  • Change lovr.graphics.newShader to accept Blobs containing shader source code.
  • Change lovr.filesystem.getRequirePath and lovr.filesystem.setRequirePath to support C require paths.
  • Change the default lovr.filesystem to look in lua_modules for Lua modules for better luarocks integration.
  • Change Texture:replacePixels to accept an x/y offset and a mipmap level to replace.
  • Change Texture:getWidth, Texture:getHeight, and Texture:getDimensions to accept an optional mipmap level.
  • Change lovr.graphics.newShader to work with strings longer than 8,192 characters.
  • Change lovr.data.newTextureData to support an optional texture format.
  • Change Transform:getMatrix to accept a table to fill with values.

Fix:

  • Fix an issue where the no game screen's conf.lua wasn't loading properly.
  • Fix lovr.event.push to work with custom event names.
  • Fix lovr.graphics.getBlendMode to 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.
Assets 5

@bjornbytes bjornbytes released this Jun 14, 2018 · 1433 commits to master since this release

Community

Framework

Add:

  • Add the lovr.thread module, Thread objects, Channel objects, and the lovr.threaderror callback.
  • Add the ability to render to multiple Canvas objects simultaneously and lovr.graphics.getCanvas and lovr.graphics.setCanvas.
  • Add support for 2D array textures and 3D volume textures.
  • Add the lovr.mount callback and lovr.headset.isMounted for detecting when/if the headset is on a head.
  • Add lovr.data module and AudioStream, ModelData, Rasterizer, TextureData, and VertexData objects.
  • Add a variant of lovr.event.quit that restarts instead of quitting.
  • Add Texture:replacePixels for modifying Texture contents.
  • Add variants of lovr.graphics.clear for clearing the depth and stencil buffers to custom values.
  • Add a second parameter to lovr.graphics.setDepthTest for controlling whether the depth buffer is written to.
  • Add ModelData:getVertexData for access to raw vertex data in models.
  • Add new MaterialTextures for PBR maps: emissive, metalness, roughness, occlusion, and normal. They are loaded for new Models by default.
  • Add MaterialScalar, Material:getScalar, and Material:setScalar for metalness and roughness properties.
  • Add an emissive MaterialColor.
  • Add a mipmaps flag to lovr.graphics.newTexture and lovr.graphics.newCanvas.
  • Add lovr.audio.getDopplerEffect and lovr.audio.setDopplerEffect (removed in a previous version).
  • Add lovrTangent as a vec3 accessible to Shaders and load tangents from Models.
  • Add Mesh:attachAttributes and Mesh:detachAttributes for improved instancing support.
  • Add lovr.filesystem.getRequirePath and lovr.filesystem.setRequirePath.
  • Add lovr.filesystem.getWorkingDirectory.
  • Add Canvas:newTextureData for reading pixel data from Canvas objects.

Change:

  • Change lovr.timer.getFPS to average over the last 90 frames instead of 60.
  • Change lovr.graphics.newCanvas to error when given negative/zero sizes.
  • Change Canvas:renderTo to error if a function isn't supplied to it.
  • Change Canvas:renderTo to pass extra arguments to the render callback.
  • Change lovr.graphics.plane to accept separate x/y scales for the plane.
  • Change Source:getChannels to Source:getChannelCount.
  • Change the fake headset driver to use right click instead of left click for the controller trigger.
  • Change lovr.controllerpressed and lovr.controllerreleased to pass nil instead of 'unknown' for unknown controller buttons.
  • Change lovr.graphics.newMesh and Mesh:setVertices to accept a VertexData object to load vertices from.
  • Change Mesh:setVertexMap to accept a Blob for fast vertex map updating.
  • Change Shader:send to accept a Blob for updating Shaders with arbitrary binary data.
  • Change Collider:getShapeList to Collider:getShapes.
  • Change Collider:getJointList to Collider:getJoints and also fix it.
  • Change the fake headset driver to respect the lovr.headset.setMirrored function.
  • Change the default window size.
  • Change the main loop to a cooperative coroutine-based loop.
  • Change Blob:getFilename to Blob:getName.

Fix:

  • Fix sphere UV coordinates to be flipped for correct texture mapping.
  • Fix issues with transforms of non-animated models.
  • Fix require when used with dot-separated module paths.
  • Fix a bug where conf.lua would be loaded from the working directory if one wasn't present in the project.
  • Fix a crash when lovr.headset.getDisplayDimensions was called before the first frame was rendered.
  • Fix Joint:getType returning nil for DistanceJoints.
  • Fix Texture:setFilter not doing anything for cubemap textures.
  • Fix a bug where sources would sometimes not be able to play again after ending.
  • Fix lovr.audio.newSource to 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.load to correctly pass in the argument table.

Remove:

  • Remove the lovr.step callback. It is now returned from lovr.run.
  • Remove lovr.headset.getBoundsGeometry.
  • Remove lovr.headset.isPresent.
  • Remove the ability to modify the view matrix and the MatrixType enum.
  • Remove the variant lovr.graphics.plane(texture) for drawing fullscreen quads, it has its own lovr.graphics.fill function now.
  • Remove a variant of lovr.filesystem.newBlob that creates a Blob from a string, use lovr.data.newBlob instead.
Assets 2

@bjornbytes bjornbytes released this Jan 2, 2018 · 1700 commits to master since this release

Add:

  • Add Canvas objects.
  • Add floating point texture formats.
  • Add official support for Windows Mixed Reality headsets through OpenVR.
  • Add lovr.graphics.stencil, lovr.graphics.getStencilTest, and lovr.graphics.setStencilTest.
  • Add lovr.headset.getPose and Controller:getPose.
  • Add lovr.graphics.getStats.

Change:

  • Change error messages to be better when requiring or loading files that don't exist.

Fix:

  • Fix a bug where updating array uniforms wasn't working.
  • Fix a bug where animations had their weight initially set to 0.
  • Fix a bug where controller render models weren't working properly.

Remove:

  • Remove Texture:renderTo and variants of lovr.graphics.newTexture that created framebuffers.
  • Remove lovr.headset.getEyePosition. An HeadsetEye can now optionally be specified as the first argument to lovr.headset.getPosition, lovr.headset.getOrientation, and lovr.headset.getPose.
Assets 2

@bjornbytes bjornbytes released this Dec 2, 2017 · 1741 commits to master since this release

Add:

  • Add Material objects. Materials are sets of colors and textures that can be applied to Models and Meshes. Models automatically load referenced materials and textures.
  • Add Animator objects for skeletal animation playback.
  • Add fallback mouse/keyboard controls used when VR hardware is not present.
  • Add support for loading glTF models.
  • Add gamma correct rendering, lovr.graphics.isGammaCorrect, and the gammacorrect option to conf.lua.
  • Add lovr.math.gammaToLinear and lovr.math.linearToGamma.
  • Add lovr.graphics.circle.
  • Add lovr.graphics.arc.
  • Add lovr.math.orientationToDirection.
  • Add Transform:getMatrix and Transform:setMatrix.
  • Add support for vertex colors and add the built in lovrVertexColor vertex attribute to shaders.
  • Add Model:getMesh.
  • Add Mesh:drawInstanced and Model:drawInstanced.
  • Add lines and linestrip draw modes to Meshes.
  • Add Shader:hasUniform.
  • Add the ability to customize VR runtime preferences using the headset.drivers table in conf.lua.

Change:

  • Change Shader:send to accept more types of uniforms, including arrays.
  • Change lovr.graphics.newTexture to accept 6 arguments to create a cube map texture.
  • Change functions that deal with colors to use a floating point range of 0 - 1 instead of 0 - 255.

Fix:

  • Fix Controller:getHand, lovr.graphics.setPointSize, HRTF audio, and ZIP archive mounting for WebVR.
  • Fix a bug with World:raycast that occurred when the ray hit multiple things.
  • Fix loading and rendering of more complicated models with node hierarchies and multiple materials.
  • Fix a bug with text rendering that caused flickering.
  • Fix Shader error messages to include correct line numbers.
  • Fix crash on Windows that occurred when paths had non ASCII characters.

Remove:

  • Remove Model:setTexture, Model:getTexture, Mesh:setTexture, and Mesh:getTexture. They have been replaced by Model:setMaterial, Model:getMaterial, Mesh:setMaterial, and Mesh:getMaterial.
  • Remove Skybox object. It has been replaced with lovr.graphics.skybox.
  • Remove the ability to pass Textures as the optional first argument of drawing primitives (Materials can be passed instead).
  • Remove lovr.filesystem.exists. The lovr.filesystem.isFile and lovr.filesystem.isDirectory functions can be used instead.
Assets 2

@bjornbytes bjornbytes released this Aug 27, 2017 · 1928 commits to master since this release

Add:

  • Add support for Linux.
  • Add official support for Oculus Touch.
  • Add the lua-enet library for multiplayer networking.
  • Add signed distance field font rendering.
  • Add support for compressed textures (DXT1, DXT3, and DXT5).
  • Add texture mipmaps.
  • Add support for trilinear and anisotropic texture sampling.
  • Add anisotropy system limit returned by lovr.graphics.getSystemLimits.
  • Add lovr.graphics.getDefaultFilter and lovr.graphics.setDefaultFilter.
  • Add lovr.math.lookAt.
  • Add lovr.math.random, lovr.math.randomNormal, and RandomGenerator objects.
  • Add new controller buttons: unknown, trigger, a, b, x, and y.
  • Add the grip ControllerAxis.
  • Add Controller:getHand and ControllerHand.
  • Add Controller:isTouched.
  • Add HeadsetOrigin, lovr.headset.getOriginType, and headset.offset option to conf.lua.
  • Add HeadsetType.
  • Add lovr.graphics.createWindow and window options to conf.lua.
  • Add lovrModel and lovrView uniform matrices for shaders.
  • Add MatrixType and allow transform stack functions to manipulate either the model or the view matrix.

Change:

  • Change emscripten build to compile to WebAssembly by default.
  • Change lovr.graphics.plane to take an angle/axis orientation instead of a normal vector.
  • Change FilterMode. The new values are nearest, bilinear, trilinear, and anisotropic.
  • Change the default depth test from less to lequal.
  • Change lovr.graphics.translate, lovr.graphics.rotate, lovr.graphics.scale, and lovr.graphics.transform to accept an optional MatrixType as the first parameter to control whether the model matrix or the view matrix is affected.
  • Change the version of OpenVR to 1.0.9.

Fix:

  • Fix bug where using custom fonts could cause a crash.
  • Fix crash when the graphics module was disabled.
  • Fix lovr.graphics.setFont when specifying a Font of nil.
  • Fix fullscreen framebuffer texture coordinates.
  • Fix the error screen to use a more readable font size.
  • Fix lovr.headset.getType to return correct values.
  • Fix the error reporting mechanism to capture many more kinds of errors and show the error screen for them instead of printing the message to the console and closing the window.
  • Fix several graphics performance issues.
  • Fix the normal matrix passed to shaders.
  • Fix issues with nonuniform scaling transformations.

Remove:

  • Remove lovr.graphics.getScissor and lovr.graphics.setScissor.
  • Remove lovr.graphics.getColorMask and lovr.graphics.setColorMask.
  • Remove undocumented Texture:bind function.
Assets 2

@bjornbytes bjornbytes released this Jun 24, 2017 · 2059 commits to master since this release

Add:

  • Add lovr.graphics.cylinder.
  • Add lovr.graphics.sphere.
  • Add lovr.graphics.box.
  • Add Model:getAABB.
  • Add lovrNormalMatrix uniform to shaders.

Change:

  • Change the minimum required OpenGL version from 2.1 to 3.3.
  • Change the minimum required OpenGL ES version from 2.0 to 3.0.
  • Change the minimum required WebGL version from 1.0 to 2.0.
  • Change lovr.math.newTransform, Transform:setTransformation, and lovr.graphics.transform to accept 3 scale parameters instead of 1.

Fix:

  • Fix Mesh:getVertexMap indices.
  • Fix bug where Meshes wouldn't unmap sometimes.
  • Fix Collider:getAABB.
  • Fix Collider:applyTorque.

Remove:

  • Remove lovr.audio.getDopplerEffect and lovr.audio.setDopplerEffect.
Assets 2

@bjornbytes bjornbytes released this Jun 12, 2017 · 2078 commits to master since this release

Add:

  • Add lovr.physics module (YES!)
  • Add lovr.timer.getAverageDelta

Change:

  • Change the window to no longer be resizable.
  • Change the window to have an improved title.
  • Improve error messages in several places.

Fix:

  • Fix unintended interactions between window mirroring and shaders.
  • Fix memory leak in require.
  • Fix lack of clean up when using Mesh vertex maps.
  • Fix occasional crash when transform stack overflows.
  • Fix WebVR rendering bug when drawing controllers.
Assets 2

@bjornbytes bjornbytes released this May 7, 2017

Add:

  • Add support for JSON encoding and decoding using lua-cjson.

Change:

  • Add support for additional OpenGL versions including OpenGL ES.
  • Add support for running in a web browser with WebVR.

Fix:

  • Fix potential crash when loading equirectangular skyboxes.
  • Fix crash on windows if the save directory does not exist.

Remove:

  • Remove headset bounds visibility functions.
Assets 2
You can’t perform that action at this time.