Commit Graph

113 Commits

Author SHA1 Message Date
Alex Szpakowski 131b53d795 Fix typo in Metal code for shader switching. 2022-06-18 17:15:20 -03:00
Alex Szpakowski 3a5c3df02f Add sync and async texture and buffer readback APIs.
- Add imagedata = love.graphics.readbackTexture(texture, [slice, mipmap, x, y, w, h, [dest, destx, desty]]).
- Add readback = love.graphics.readbackTextureAsync(texture, [slice, mipmap, x, y, w, h, [dest, destx, desty]]).
- Add bytedata = love.graphics.readbackBuffer(buffer, [offset, size, [dest, destoffset]]).
- Add readback = ove.graphics.readbackBufferAsync(buffer, [offset, size, [dest, destoffset]]).
- Deprecate Texture:newImageData.

The async variants return a new GraphicsReadback object. It has the following methods:
- isComplete()
- hasError()
- wait()
- getBufferData()
- getImageData()
- update() (called automatically every frame by love, not normally needed).

Support notes:
- readbackBuffer and readbackBufferAsync require buffer copying support.
- readbackTexture with a render target (canvas) is always supported. readbackTexture with a non-render-target requires copy-texture-to-buffer support.
- readbackTextureAsync with a render target requires copy-render-target-to-buffer support. readbackTextureAsync with a non-render-target requires copy-texture-to-buffer support.
2022-05-30 21:53:55 -03:00
Alex Szpakowski fb450b1df4 Add internal code for temporary buffers. 2022-05-30 21:46:55 -03:00
Alex Szpakowski a533982cb4 Replace internal 'staging' buffer data type with new 'readback' type. 2022-05-30 21:43:25 -03:00
Alex Szpakowski 28a64c2b29 Use uint32 instead of int for some internal bit-flags. 2022-04-23 09:41:29 -03:00
Miku AuahDark 405e33a689 Use int instead of PixelFormatUsageFlags for isPixelFormatSupported. 2022-03-05 13:42:20 +08:00
Alex Szpakowski 0fa00e0bdc love.graphics.newShader: add a compile options table parameter.
The only field currently read from the table is 'defines', which can contain either an array of define names, or name-value pairs.
For example: newShader(file, {defines={"MYFEATURE_ENABLED", MYSETTING=1}})

Fixes #1577
2022-02-20 12:23:41 -04:00
Alex Szpakowski bc1c38d361 improve logic for detecting when Texture:generateMipmaps is supported 2022-02-19 16:34:52 -04:00
Alex Szpakowski 171533dbf8 Another shader fix for metal+iOS 2022-02-15 21:16:55 -04:00
Alex Szpakowski caf89998cc iOS: fix shader compilation with metal 2022-02-15 21:12:13 -04:00
Alex Szpakowski c28731ea80 opengl: fix love's internal quad index buffer failing to populate 2022-02-12 09:37:30 -04:00
Alex Szpakowski 7216a022f9 metal: remove unused internal code 2022-02-04 22:09:50 -04:00
Alex Szpakowski 6e49b1f901 metal: fix texture sampler changes not affecting draws using shaders. 2022-01-31 21:25:49 -04:00
Alex Szpakowski f4a85f42df metal: Apple Silicon macs also support rgba4 / rgb5a1 / rgb565. 2022-01-24 21:19:40 -04:00
Alex Szpakowski b3d37e5fc2 metal: Apple Silicon macs support PVRTC/ETC/ASTC textures. 2022-01-24 21:09:33 -04:00
Alex Szpakowski e4020e439a metal: lowdpi on macOS uses nearest instead of linear upscaling.
Matches the behaviour of the OpenGL backend on macOS.
2022-01-23 12:55:06 -04:00
Alex Szpakowski a5351e5046 metal: improve detection of rgba32f format filter and MSAA support. 2022-01-23 11:28:09 -04:00
Alex Szpakowski 6dbb7fa5de Add love.graphics.setStencilMode. Remove old stencil API.
- Add setStencilMode(drawaction, comparemode, value = 0, readmask = 0xFF, writemask = 0xFF).
- Add getStencilMode.
- Remove love.graphics.stencil.
- Remove love.graphics.set/getStencilTest.

Note that the new setStencilMode API does not clear the stencil buffer, and does not turn off color writes (it can still be done manually), unlike love.graphics.stencil.

Fixes #1161.
Fixes #1251.
2022-01-22 23:36:07 -04:00
Alex Szpakowski c26f6ed94f metal: improve performance of auto depth/stencil in setCanvas. 2022-01-22 23:12:42 -04:00
Alex Szpakowski 4c3c875aa9 metal: clean up some code around render pipeline states. 2022-01-22 21:29:57 -04:00
Alex Szpakowski 87592513a2 metal: fix automatic depth/stencil with setCanvas. 2022-01-22 20:57:06 -04:00
Alex Szpakowski 8c496d60e5 metal: add a couple comments clarifying depth format fallbacks. 2022-01-22 14:51:37 -04:00
Alex Szpakowski 1cf0073cf4 metal: use a fallback for fonts when luminance-alpha isn't supported. 2022-01-22 14:41:42 -04:00
Alex Szpakowski 62de8f62c7 metal: hook up emulated 'fan' mesh draw mode. 2022-01-22 12:59:09 -04:00
Alex Szpakowski 3ecae61189 metal: improve texture initialization. 2022-01-16 14:18:34 -04:00
Alex Szpakowski 44d87ff7ce metal: fix textures not being tagged with compute-write flags. 2022-01-16 13:47:18 -04:00
Alex Szpakowski 4e1c4a6afe metal: some fixes for MSAA 2022-01-16 13:44:29 -04:00
Alex Szpakowski 4ca3535cd2 Metal: fix clamp-to-one texture wrap mode detection. 2022-01-15 23:31:07 -04:00
Alex Szpakowski 5c3f391136 update metal backend for projection changes. 2022-01-12 18:31:32 -04:00
Alex Szpakowski c373fb2e82 Fix compilation on macOS/iOS 2022-01-05 21:28:47 -04:00
Alex Szpakowski cf57c3eedf update copyright year for metal files 2022-01-05 21:13:53 -04:00
Alex Szpakowski 674143175f metal: fix Shader:send with matrices and arrays. 2022-01-05 20:33:08 -04:00
Alex Szpakowski 5864d83c31 Add ability to configure which renderers are used by love.graphics.
- Add t.renderers and t.excluderenderers love.conf fields. They can be an array of renderer names.
- Add --renderers a,list,of,renderernames and --excluderenderers more,renderers argument options.
2022-01-04 21:29:56 -04:00
Alex Szpakowski 9709f95194 metal: fix structs in uniforms. 2022-01-01 17:41:23 -04:00
Alex Szpakowski e2c397355c metal: implement copyBufferToTexture and copyTextureToBuffer. 2022-01-01 15:48:43 -04:00
Alex Szpakowski 40aa50662a Merge branch '12.0-development' into metal 2022-01-01 15:36:57 -04:00
Alex Szpakowski e602f08c24 metal: support constant initializer values for local uniforms. 2022-01-01 15:28:42 -04:00
Alex Szpakowski 045f5ff0a5 Fix initializing the graphics module after a window is opened. 2021-12-26 12:34:47 -04:00
Alex Szpakowski 19feec43f9 metal: don't do auto sRGB -> P3 color conversions on the backbuffer 2021-12-25 22:31:18 -04:00
Alex Szpakowski 37ff7ef665 metal: support for depth16 on iOS 2021-12-25 14:21:59 -04:00
Alex Szpakowski 30fe00d767 metal: implement storage buffer bindings 2021-12-25 14:21:45 -04:00
Alex Szpakowski c6e4cfdc64 metal: initial love.graphics.dispatchThreadgroups implementation 2021-12-24 23:04:44 -04:00
Alex Szpakowski a03041043f metal: partial implementation of love.graphics.discard 2021-12-24 22:41:31 -04:00
Alex Szpakowski 759937a458 metal: fix depth24stencil8 fallback on macOS 2021-12-24 22:20:25 -04:00
Alex Szpakowski 2868ede191 metal: restrict to macOS 10.15+ and iOS 13+. 2021-12-24 19:22:10 -04:00
Alex Szpakowski 620dc42292 metal: fix quad drawing on older iOS devices 2021-12-24 19:13:48 -04:00
Alex Szpakowski a431e70179 metal: add internal compute encoder APIs 2021-12-24 18:56:21 -04:00
Alex Szpakowski bcd64fe537 metal: implement mesh cull modes 2021-12-24 18:46:06 -04:00
Alex Szpakowski dab174b120 metal: fix a couple compiler warnings 2021-12-24 18:04:11 -04:00
Alex Szpakowski 7eb8366b2d metal: integer texture format support. 2021-12-24 17:50:17 -04:00