Commit Graph

2146 Commits

Author SHA1 Message Date
niki ac9d8ec2a0 vulkan: fix canvas rendering
Sometimes canvas commands wouldn't get executed.
This was because when the window gets resized,
the command buffers would get recreated, and would thus
lose the recorded commands.
2022-07-16 15:55:48 +02:00
niki 95952c691d vulkan: implement setRenderTargetsInternal
basic usage of canvases now works.
Colors probably aren't correct yet.
2022-07-15 01:44:07 +02:00
niki 0ae81091d1 vulkan: use dynamic rendering
This vulkan 1.3 feature will make the code simpler when dealing
with off screen render targets (i.e. löve canvases)
2022-07-14 18:01:46 +02:00
niki 38f15ae97d vulkan: implement cull and winding 2022-07-13 17:27:11 +02:00
niki c6d79ae87e vulkan: implement setColorMask 2022-07-13 16:50:28 +02:00
niki a591b2b99e vulkan: implement setBlendState 2022-07-13 16:37:16 +02:00
niki 04fb789649 vulkan: implement setPointSize 2022-07-13 16:05:12 +02:00
niki 4190807a20 vulkan: implement setWireframe 2022-07-13 15:55:14 +02:00
niki 0834408b90 vulkan: implement draw(DrawCommand)
Now love.graphics.point and love.graphics.line works
2022-07-13 13:56:00 +02:00
niki 14b8abeef5 vulkan: implement setColor 2022-07-11 17:17:32 +02:00
niki 9d04ec0030 vulkan: fix all memory leaks
Now now errors regarding resource management appear in the debug output / validation layers.
2022-07-11 13:58:35 +02:00
niki c5327bfc4f vulkan: fix some more memory leaks 2022-07-11 01:47:34 +02:00
niki 0759e8d513 vulkan: fix some memory leaks 2022-07-11 01:13:50 +02:00
niki 7fe2a2d821 vulkan: fix vertex format 2022-07-10 22:52:03 +02:00
niki ef08282f0d vulkan: implement getRendererInfo 2022-07-10 19:13:10 +02:00
niki 565455c3ea proper selection of vulkan renderer 2022-07-10 03:46:12 +02:00
niki b1fb5b551e working text rendering 2022-07-10 02:25:28 +02:00
Alex Szpakowski 258d2334af OpenGL: Fix missing 'keep' and 'zero' stencil action implementations.
Fixes #1818
2022-07-09 09:00:58 -03:00
niki 73348e5012 enable alpha blending 2022-07-01 13:43:51 +02:00
niki 2a65ea5fb1 cleanup some debug code 2022-06-30 20:16:40 +02:00
niki 0cea07806f use different uniform buffers for each draw call 2022-06-30 18:42:49 +02:00
niki 7f894e5bf7 some work on drawQuads (not fully working yet) 2022-06-25 23:02:13 +02:00
Alex Szpakowski 131b53d795 Fix typo in Metal code for shader switching. 2022-06-18 17:15:20 -03:00
niki efdc2b8ee2 fix crash on exit 2022-06-16 02:25:55 +02:00
niki b5ba2b65b5 stop hardcoding vulkan vertex layouts 2022-06-16 01:16:23 +02:00
niki 2bf7c35220 use constant color for VertexColor 2022-06-14 23:30:51 +02:00
niki 1111aa3f42 (almost) integrate default löve shaders for vulkan 2022-06-14 18:18:23 +02:00
niki c996860602 Use löve's uniform data object for vulkan shader 2022-06-13 16:50:12 +02:00
niki 3a4058d750 allow drawing more than one texture 2022-06-12 02:00:30 +02:00
niki acf0474cc8 Implement drawing very basic textures
With this commit you can draw very simple textures.
The following code will showcase it:

```lua
function love.run()
    local data = love.image.newImageData(40, 40)
    for i = 0,39 do
        for j=0,39 do
            if i <= 20 then
                if j <= 20 then
                    data:setPixel(i, j, 1, 0, 0, 1)
                else
                    data:setPixel(i, j, 0, 1, 0, 1)
                end
            else
                if j <= 20 then
                    data:setPixel(i, j, 0, 0, 1, 1)
                else
                    data:setPixel(i, j, 1, 1, 1, 1)
                end
            end
        end
    end

    local texture
    texture = love.graphics.newTexture(data)

    return function()
        love.event.pump()
        for name, a,b,c,d,e,f in love.event.poll() do
            if name == "quit" then
                if not love.quit or not love.quit() then
                    return a or 0
                end
            end
            love.handlers[name](a,b,c,d,e,f)
        end

        love.graphics.origin()
        love.graphics.clear()

        love.graphics.draw(texture, 50, 500)

        love.graphics.present()
    end
end
```
2022-06-11 20:33:44 +02:00
niki 6c19e8c10a merge newest 12.0 commits 2022-06-11 01:34:17 +02:00
niki 4c415479c0 Merge remote-tracking branch 'origin/12.0-development' into vulkan 2022-06-11 01:22:29 +02:00
niki b9496f6d43 use glslang to compile vulkan ShaderStage
Before this commit a system call to glslc was made to compile the shaders dynamically during runtime.
That was obviously a very hacky way, so now the proper way was implemented.
2022-06-11 00:59:14 +02: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
niki d0aaddfef6 cleanup redundant initialization code 2022-05-08 22:51:11 +02:00
niki c16c07780f use default texture when rendering primitives 2022-05-08 22:44:32 +02:00
niki 75a6bc9b5d Merge remote-tracking branch 'origin/12.0-development' into vulkan 2022-05-06 16:46:55 +02:00
niki 4e8304255d first draft of vulkan texture impl 2022-05-06 16:06:09 +02:00
niki 8f55f093a4 partially implement initCapabilities for vulkan 2022-05-04 23:43:23 +02:00
niki 1b816e93ae usa vma as single header lib not through cmake 2022-05-04 15:42:36 +02:00
niki e6f8b465bc use vma for streambuffer implementation 2022-05-04 15:41:50 +02:00
niki 77f1af598d add skeleton for vulkan texture impl 2022-05-03 18:11:31 +02:00
niki 394956e320 ignore minsize in StreamBuffer::map 2022-05-03 17:51:54 +02:00
niki 9299219977 perform prepareDraw only once per frame 2022-05-03 17:51:35 +02:00
niki 0953f3540e remove temporary files after compilation 2022-05-03 17:51:18 +02:00
Alex Szpakowski ee336e5393 opengl: restructure code for computing format support. 2022-04-23 13:15:58 -03:00
Alex Szpakowski 28a64c2b29 Use uint32 instead of int for some internal bit-flags. 2022-04-23 09:41:29 -03:00
Alex Szpakowski c09fef8e79 Audio source decoding improvements.
- Streaming sources now also stream the file contents instead of loading it into memory, by default. Added a new stream type enum parameter to newSource ("file" or "memory").
- Audio file decoding now chooses the most appropriate decoder based on the file contents instead of the file extension.
- Videos now stream audio from the file instead of loading all of the video file into memory for use with audio decoding.
2022-04-21 19:57:32 -03:00