|
@@ -122,7 +122,7 @@ Graphics Improvements
|
|
|
|
|
|
The graphics module has been streamlined a bit as we shake out the new Vulkan renderer.
|
|
The graphics module has been streamlined a bit as we shake out the new Vulkan renderer.
|
|
|
|
|
|
-### No more temporary objects
|
|
|
|
|
|
+### Temporary Objects
|
|
|
|
|
|
Temporary Buffer/Pass objects were really tricky due to the way they got invalidated whenever
|
|
Temporary Buffer/Pass objects were really tricky due to the way they got invalidated whenever
|
|
`lovr.graphics.submit` was called:
|
|
`lovr.graphics.submit` was called:
|
|
@@ -140,7 +140,7 @@ For passes, instead of getting a new one every frame, you can create it once and
|
|
at the beginning of a frame to reset it to a fresh state. There's also the option of recording its
|
|
at the beginning of a frame to reset it to a fresh state. There's also the option of recording its
|
|
draws once and submitting it over and over again, to reduce the Lua overhead of recording draws.
|
|
draws once and submitting it over and over again, to reduce the Lua overhead of recording draws.
|
|
|
|
|
|
-### No more pass types
|
|
|
|
|
|
+### Pass Types
|
|
|
|
|
|
Passes no longer have a "type" that defines what commands can be recorded on them. Instead, all
|
|
Passes no longer have a "type" that defines what commands can be recorded on them. Instead, all
|
|
`Pass` objects can receive both graphics and compute work, with computes running before the draws
|
|
`Pass` objects can receive both graphics and compute work, with computes running before the draws
|
|
@@ -159,6 +159,12 @@ and finish before subsequent graphics submissions.
|
|
-- New
|
|
-- New
|
|
texture:setPixels(image)
|
|
texture:setPixels(image)
|
|
|
|
|
|
|
|
+### Mesh
|
|
|
|
+
|
|
|
|
+The `Mesh` object has returned! This is mostly a convenience object that holds a vertex and index
|
|
|
|
+buffer, a `Material`, draw range, and bounding box. `Pass:mesh` still exists as a lower-level way
|
|
|
|
+to draw meshes with `Buffer` objects.
|
|
|
|
+
|
|
Compute Barriers
|
|
Compute Barriers
|
|
---
|
|
---
|
|
|
|
|
|
@@ -275,3 +281,211 @@ and bugfixes are made on `stable`. The following commands will update a local c
|
|
|
|
|
|
Changelog
|
|
Changelog
|
|
---
|
|
---
|
|
|
|
+
|
|
|
|
+### 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 control whether text/binary chunks can be loaded.
|
|
|
|
+
|
|
|
|
+#### 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 debug info to shaders when `t.graphics.debug` is set, allowing line-by-line debugging in e.g. RenderDoc.
|
|
|
|
+- 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`s in shader code.
|
|
|
|
+
|
|
|
|
+#### Headset
|
|
|
|
+
|
|
|
|
+- Add `lovr.headset.getPassthrough/setPassthrough/getPassthroughModes`.
|
|
|
|
+- Add support for more headsets in Android builds (Quest, Pico, Vive Focus, etc. all work using a single APK).
|
|
|
|
+- 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 vector 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 `lovr.math.vec2/vec3/vec4/quat/mat4` 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 other files with paths starting with `./`.
|
|
|
|
+- Change `lovr.graphics.newModel` to error when the asset references other files using absolute paths.
|
|
|
|
+- Change `lovr.graphics.newBuffer` to take the format first instead of the length/data (old variant still works).
|
|
|
|
+- 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` callback to prevent subsequent raycast checks when returning `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 color on AR/passthrough headsets.
|
|
|
|
+- Change headset simulator to use projected mouse position for hand pose (scrollwheel 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 where VRAM would quickly run out when creating Textures, or not get freed properly.
|
|
|
|
+- 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 code from `unlit` shader).
|
|
|
|
+- Fix `lovr.graphics` to warn instead of crash if `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:point` / `Pass:line` to work with temporary vectors.
|
|
|
|
+- Fix `lovr.event.quit` to properly exit on Android/Quest.
|
|
|
|
+- Fix mounted zip archives sometimes not working properly 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 for the GPU.
|
|
|
|
+- 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:getData/newReadback` and `Texture:getPixels/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).
|