Commit Graph

1152 Commits

Author SHA1 Message Date
bjorn c4ff7cca39 Passes track their readbacks;
There are some issues with immediately tracking readbacks in the global
linked list of pending readbacks:

- The Pass might not get submitted, in which case the readback will be
  "dangling" and never complete (or it will erroneously think it's
  completed but its buffer will contain garbage data).
- Thread safety issues of modifying a global data structure from a Pass.

Instead, Pass will locally track the readbacks it performs, and only at
submit time will those readbacks get added to the global list.

(There is a little bit of refcounting mistakes now, those will get
cleaned up).
2022-07-31 13:02:41 -07:00
bjorn 50f596bd34 Default shaders use lovrmain; 2022-07-31 11:18:15 -07:00
bjorn 4919daa93b Small fixes; 2022-07-31 10:39:49 -07:00
bjorn e87cec1b49 Reduce number of materials per block; 2022-07-31 10:39:49 -07:00
bjorn 9e4765818a Rename texture depth to layer count; 2022-07-31 10:39:49 -07:00
bjorn 571c71b76e Rename pipeline stack to state; 2022-07-31 10:39:49 -07:00
Josip Miskovic 7c792fd975 Fix cylinder's triangle winding and normals 2022-07-31 09:38:40 -07:00
Kelsey Higham 50b321fb64 More beginner-friendly error message 2022-07-21 16:30:13 -07:00
bjorn a0173252b9 Slight improvement to lovr.mirror; 2022-07-17 20:07:31 -07:00
bjorn 922942a0bf Initialize Pass font properly; 2022-07-17 20:07:20 -07:00
bjorn d9623a51a9 Pass:setFont; 2022-07-17 19:53:31 -07:00
bjorn 24504d1719 Adjust; 2022-07-17 16:38:29 -07:00
bjorn d17131c421 Pass:cone; 2022-07-17 16:38:00 -07:00
bjorn 92201b87a1 Rename timer tally type to time; 2022-07-17 13:17:33 -07:00
bjorn 83fa750a4d Support and default to reverse-z with infinite far plane; 2022-07-17 12:37:59 -07:00
bjorn 1df537294a Improve Model texture loading;
- Only loads textures used by materials
- Creates color/glow textures as sRGB
2022-07-17 12:04:47 -07:00
bjorn c2dd7281cc mv stage tally -> shader tally; 2022-07-17 11:38:55 -07:00
bjorn 1946fbb540 Reduce default near plane;
I feel like we've (un)done this before...
2022-07-17 11:05:24 -07:00
bjorn 5d3e1f93cd Add d32fs8; 2022-07-17 11:03:00 -07:00
bjorn 32346796ef Tally/Readback cleanup; 2022-07-17 09:50:15 -07:00
bjorn faa690b7f0 Material API;
Just returns everything as a table.  Some sort of key-value thing would
be nice but complicates the implementation.
2022-07-17 09:29:13 -07:00
bjorn 430f687add Projection updates;
- Rename/reorder some projection matrix functions.
- Make perspective functions flip Y and use 0-1 NDC range.
- Flip winding and font vertices based on handedness.

This stuff is really confusing
2022-07-17 09:02:53 -07:00
bjorn 1bc31b7751 Revert accidental winding change; 2022-07-15 21:42:31 -07:00
bjorn e2bfff1b0a Tally/Readback fixes; 2022-07-14 19:23:02 -07:00
bjorn 45135899a1 Readback, mostly; 2022-07-14 00:05:58 -07:00
bjorn 4909a1963b Fix clear alpha; 2022-07-14 00:03:58 -07:00
bjorn f5ec2e9158 Don't encode Images upside down anymore; 2022-07-13 23:59:35 -07:00
bjorn bca10c9e98 Make info structs const; 2022-07-13 00:07:15 -07:00
bjorn 0b76ab7e96 Add a few Tally things; 2022-07-12 19:59:12 -07:00
bjorn 1c571001e7 Finish Model API; 2022-07-12 19:35:23 -07:00
bjorn cd65e8d34c Cache only rebinds vertex/index buffers when needed; 2022-07-12 17:19:30 -07:00
bjorn 83245afae6 Fix Font:getLines; 2022-07-11 22:43:42 -07:00
bjorn 4e92a4e503 Super ultra cool geometry cache;
Pass stores a small 16-bucket cache of vertices/indices it recently
generated.  Draws that have relatively predictable geometry can provide
a hash along with their draw.  The Pass will reuse vertices based on the
hash, when possible, and return a NULL vertex pointer to let the draw-er
know they don't need to generate any vertices.

This provides a dramatic speedup when drawing the same shape many times
in a row.  The overhead is negligible, with benefits kicking in with
just a small handful of repeated draws (3-5 for cubes, less for more
complex shapes).
2022-07-11 20:52:35 -07:00
bjorn a0cd36a77b Fix torus winding; 2022-07-10 18:02:49 -07:00
bjorn 0a251495bc Fix normal matrix; 2022-07-10 18:02:44 -07:00
bjorn 4e8fe82f94 Font:getVertices; 2022-07-10 12:49:47 -07:00
bjorn f7d7281e70 Add index16/index32 FieldTypes;
Similar to u16/u32 but are 1-indexed when written using tables.
2022-07-10 12:18:31 -07:00
bjorn 8e89026678 Shader:getLocalWorkgroupSize; 2022-07-09 23:39:03 -07:00
bjorn 886bfe18c1 Shader "improvements"; 2022-07-09 23:09:02 -07:00
bjorn c7f4e11b0b Improve shader errors; 2022-07-09 21:39:31 -07:00
bjorn e8a5f02e7b Start stats; 2022-07-09 21:19:51 -07:00
bjorn 159352770f Model:getTriangles;
Doesn't 100% work, Buffers are kind of a mess, ugh.
2022-07-09 18:30:36 -07:00
bjorn 40cbb18346 Ugly Pass:capsule; 2022-07-09 16:38:25 -07:00
bjorn b0c1dd5f12 Put nogame in its own file; 2022-07-06 23:50:43 -07:00
bjorn f2cfb19d4d Material textures must be sample-only;
Tracking every material's texture would add a lot of overhead, probably
2022-07-06 23:00:39 -07:00
bjorn 3bf5ec5744 Shader improvements;
Mostly renaming things and adding helper functions.
2022-07-06 22:54:56 -07:00
bjorn f9c07f852b gltf: KHR_texture_basisu; Only load active images; 2022-07-06 20:24:02 -07:00
bjorn 5f19c2e1be Model:getBoundingBox; Model:getBoundingSphere; 2022-07-06 19:22:02 -07:00
bjorn 516ac2a925 Fix validation issue when first draw uses empty vertex format; 2022-07-06 16:43:42 -07:00
bjorn a44ab9bcfa Fix presentation sequence issue;
Fixes crash on error inside lovr.draw.
2022-07-05 21:58:54 -07:00
bjorn dbc34c0fdc Update internal resource limit caps; 2022-07-04 15:54:43 -07:00
bjorn dd8d8fe67e Adjust; 2022-07-04 15:22:54 -07:00
bjorn b7e5bd1d67 Require 64KB uniform buffers;
64KB is near-ubiquitous, and the per-draw UBO needs this much space.
2022-07-04 15:21:43 -07:00
bjorn b934fac1df Pass:skybox; 2022-07-04 00:18:38 -07:00
bjorn 8aa14ba42b Shader:hasAttribute; 2022-07-03 23:04:56 -07:00
bjorn 2c339dd944 Shader:hasStage; 2022-07-03 22:59:49 -07:00
bjorn 917b97ca2d Adjust; 2022-07-03 21:48:43 -07:00
mcc 28d64b6ced Fix various compiler warnings in MSVC (non graphics edition)
- Put in casts/checks in audio code when assigning size_t to 32 bit
- () is different from (void)
- Turned off warnings for anonymous unions and negating unsigned integers which were technically accurate but unhelpful (and interfered with bit conversion and a weird bit math construct in audio.c) (CMakeLists only)
2022-07-03 21:34:16 -07:00
bjorn 4f15e7e34a Fix plane winding; 2022-07-03 20:07:00 -07:00
bjorn de090971f7 rm erroneous union; 2022-07-03 19:59:51 -07:00
bjorn 0d23d10e43 Animate normals; Use material color; 2022-07-03 19:20:30 -07:00
bjorn d088c5471d Model;
Does not include some of the fancier accessors yet.
2022-07-03 17:26:31 -07:00
bjorn e8e9e7fd57 Fix leaks; 2022-07-03 12:59:51 -07:00
bjorn 45f74bad3d Fix Image UB; 2022-07-03 12:59:17 -07:00
bjorn 56a9d81254 Fix push constants; 2022-07-01 18:34:31 -07:00
bjorn d9d54ce348 Pass:copy(tally, buffer); 2022-06-30 18:51:03 -07:00
bjorn 8b37b25e54 TIME WIZARD; 2022-06-30 18:47:01 -07:00
bjorn a521f11a44 lovrPassCopyTallyToBuffer; 2022-06-30 18:46:47 -07:00
bjorn c327eb103f Tally; 2022-06-30 17:34:29 -07:00
bjorn 9e7bd34ab1 Font:getWidth; 2022-06-30 17:25:47 -07:00
bjorn 4125b1dc7e mv getWrap getLines; Include bearing/advance in width; 2022-06-30 17:07:47 -07:00
bjorn 8e968cecd0 Fixes; 2022-06-30 00:29:52 -07:00
bjorn 1f8d37a160 Font:getKerning; 2022-06-29 21:49:55 -07:00
bjorn 078b54a7a5 Font:getWrap doesn't return width; 2022-06-29 21:33:39 -07:00
bjorn 7711fe8b65 Font:getWrap; Simplify Font internals; 2022-06-29 20:17:26 -07:00
bjorn fa2bd2b05c Shuffle around Rasterizer;
Shorter names, ditch linegap
2022-06-28 20:18:45 -07:00
bjorn 90092c55e4 Font: ignore \r; Fix uv adjustment; Ignore linegap; 2022-06-28 16:28:14 -07:00
bjorn 63f45de9de Fix Pass:setShader(nil); 2022-06-27 23:15:19 -07:00
bjorn 408fcb8b37 Fix typo; 2022-06-27 21:43:23 -07:00
bjorn 1752b220bf Pass:text supports multicolor strings; 2022-06-27 21:42:51 -07:00
bjorn e5d4ac10cb Fix Font atlas expansion; 2022-06-26 21:22:45 -07:00
bjorn 9d84d3907b Font texture is u8;
Originally we made the font texture f16 due to "clamping" of the
distance field, and kept it as floats (but f32 since conversion isn't
automatic with Vulkan) here.  However, clamping isn't really an issue.
You can increase the spread of the font to literally get a wider spread
of the SDF for glows, etc.  Switching to u8 uses 4x less texture memory,
which is significant.
2022-06-26 20:57:57 -07:00
bjorn bac57dc0d2 Add stack allocation to temp allocator;
It can be used to push the current cursor onto the stack, perform some
tmep allocations, and then pop the stack to "free" them all at once.
This can be nice if you're doing some temporary allocations that aren't
going to be needed when the function returns, since it reduces the
amount of allocator growth a bit.

This allocator is meant to be threadlocal eventually, so there are no
thread-safety concerns.
2022-06-26 20:53:12 -07:00
bjorn cbe24f482f Adjust font uvs;
- Padding is automatically computed from spread.
  - Spread increases detail at small sizes.
  - Remove failure cases where padding < spread/2
- UVs are un16x2, making room for color
- Don't center glyphs inside their atlas bounding box
- Cache normalized UVs and update them (for glyphs and vertices) when
  the atlas changes size.
  - Updating the UVs is UGLY and duplicates a lot of code.  It may be
    better to normalize the UVs on the fly, or just re-render the entire
    string if the atlas is updated.
2022-06-26 20:28:30 -07:00
bjorn 756b184306 Some font cleanup; 2022-06-25 19:54:13 -07:00
bjorn 02daeb1a2b The font code is pretty I promise; 2022-06-25 15:26:42 -07:00
bjorn 4021d4e893 Pass:monkey;
Questionable.
2022-06-24 23:05:09 -07:00
bjorn 75e8df58df Pass:cylinder; 2022-06-24 23:01:22 -07:00
bjorn 5c43ad0792 Pass:fill; 2022-06-24 19:59:48 -07:00
bjorn 0a3ccb4f8a stb_image sets srgb flag properly; 2022-06-24 19:38:57 -07:00
bjorn fbf2a039b7 setMaterial takes Texture in addition to Material; 2022-06-24 19:38:45 -07:00
bjorn dc9e93103f Pass:sphere; 2022-06-23 21:23:16 -07:00
bjorn dc73d2309a Pass:donut; 2022-06-23 19:52:37 -07:00
bjorn 8c63f47b8a Fix default shader switching; 2022-06-23 17:07:39 -07:00
bjorn 173c9a258e Sketch render pass automipmap; 2022-06-22 19:05:36 -07:00
bjorn c1d8c64c45 Pass:copy can copy tables to buffers; 2022-06-22 00:39:56 -07:00
bjorn cb4275bff7 Add DrawStyle; 2022-06-22 00:05:26 -07:00
bjorn 499cf9c0dc More Font APIs; 2022-06-21 15:28:03 -07:00
bjorn 71f6a88a62 Font uses padding; 2022-06-20 19:24:41 -07:00
bjorn ad0595ff35 lovr.graphics.getDefaultFont; 2022-06-20 18:58:12 -07:00
bjorn cfc0f52449 Support tab codepoints; 2022-06-20 18:52:10 -07:00
bjorn 362b389131 Pass:text;
Code is still messy, but it works okay.
2022-06-20 18:26:15 -07:00
bjorn 7625ef9bd8 Rasterizer:getGlyphImage; 2022-06-20 18:24:12 -07:00
bjorn 3df9aea3fd Add Font shader; 2022-06-20 18:17:37 -07:00
bjorn 7def390f9c OpenXR/CMake fixes; 2022-06-20 15:51:24 -07:00
bjorn af8c061c50 Default buffer can be used for colors; 2022-06-18 23:31:51 -07:00
bjorn a654cec40f lovr.graphics.newFont; 2022-06-18 17:43:12 -07:00
bjorn 0d7fed1fa7 Rasterizer:getBoundingBox;
For the global bounding box
2022-06-18 17:40:14 -07:00
bjorn 717f95f6bd Start updating Rasterizer; 2022-06-17 17:43:58 -07:00
bjorn cb121d3d36 Material fixes; Pass cleanup; 2022-06-17 17:43:26 -07:00
bjorn c1bb47d737 Merge branch 'master' into dev 2022-06-16 23:50:11 -07:00
bjorn 86b2c934e8 Materials, mostly; 2022-06-16 23:49:09 -07:00
bjorn fcc2758046 Potentially add support for KHR_texture_transform; 2022-06-15 23:51:23 -07:00
bjorn fb42bf3fbb Rearrange some ModelData stuff; 2022-06-15 23:17:11 -07:00
bjorn 7de6bdf242 Shaders; Rework vertex formats; 2022-06-15 20:46:43 -07:00
bjorn fbe54d5dca Physics shape dimensions must be positive;
Or the world will explode.  That would be bad.
2022-06-12 18:18:48 -07:00
bjorn 70e0f5c5cf Synchronization; 2022-06-11 22:55:43 -07:00
bjorn d9b5237851 Sync cleanup; 2022-06-11 19:07:46 -07:00
bjorn 3d83d0fcfe Pass:multimesh;
IT'S ALIVE
2022-06-09 23:38:33 -07:00
bjorn fc616f92c2 Pass:mesh; Pass:setMeshMode; 2022-06-09 23:05:32 -07:00
bjorn 3009e1d45c Rename transfers to uploads; 2022-06-09 22:44:23 -07:00
bjorn ab2c52bc05 Fix attachment cache; 2022-06-09 20:05:31 -07:00
bjorn 1cc8cf9f4a Update glslang to accept array of shader strings; 2022-06-09 17:44:46 -07:00
bjorn 6f16385fa1 Improve graphics error handling; 2022-06-08 23:59:36 -07:00
bjorn 0d4d7bc0e3 Fix vertex shader draw count; Simplify upload sync; 2022-06-08 21:23:30 -07:00
bjorn ef19a334a9 Pass:setSampler;
This is an experimental take on the "default filter" system.  Each
render Pass has its own "global sampler", initialized to trilinear.  The
global sampler will be used by default to sample textures/materials in
shaders.  You can set it to a filter mode or a full Sampler object.  You
can always send your own Sampler objects to Shaders if you want
per-texture sampler settings.  The global sampler is designed to be set a
small number of times per pass instead of on every draw.  Basically,
just do Pass:setSampler('nearest') and draw your minecraft world.
2022-06-07 20:42:10 -07:00
bjorn 2b65b50ed9 Pass:setViewport; Pass:setScissor;
It pretends to be like a pipeline state even though it isn't.
Might be nice for nil to mean "the framebuffer size" which is the default.
2022-06-06 12:38:15 -07:00
bjorn d5325b87b4 Headset support; 2022-06-05 20:38:14 -07:00
bjorn a8b35074e0 Pass:send supports push constants; 2022-06-05 18:54:26 -07:00
bjorn 8effa7424f Pass:circle; 2022-06-05 13:12:49 -07:00
bjorn 7b5c816345 More efficient resource tracking;
- Temporary buffers are not tracked
- Sample-only textures are not tracked, but their initial upload is synchronized.
- Default texture something something
2022-06-04 14:54:04 -07:00
bjorn 6245aaa9d9 I have made a mistake; 2022-06-04 14:49:58 -07:00
bjorn 3a43d44460 Pass tracks resources for sync purposes; 2022-06-04 14:28:23 -07:00
bjorn ea80936af7 Pass:compute; 2022-06-04 11:54:05 -07:00
bjorn d3a1a0ec22 Pass:cube; Pass:box; 2022-06-04 11:28:35 -07:00
bjorn e07a2691e0 Clean up plane; 2022-06-04 11:19:28 -07:00
bjorn 62f2d9a800 Organization; 2022-06-04 09:57:06 -07:00
bjorn e652ae67af Pass:plane; 2022-06-04 01:34:13 -07:00
bjorn ebc6d9d3a3 Pass:line; 2022-06-04 01:33:50 -07:00
bjorn a2668a1632 Fix canvas always trying to add depth buffer; 2022-06-04 01:33:11 -07:00
bjorn ac3801902b Pipeline stack; 2022-05-31 21:57:55 -07:00
bjorn ec8b7f9727 Adjust; 2022-05-31 21:45:54 -07:00
bjorn 8431fc72ba Adjust; 2022-05-31 21:41:43 -07:00
bjorn 513a1876c9 Simplify vertex buffers;
The default buffer is always bound to slot 0 once at the beginning of
command buffers, reducing the amount of rebinding.
2022-05-31 21:20:01 -07:00
bjorn ab04577495 Enforce maximum spirv version; 2022-05-31 20:47:47 -07:00
bjorn 1f39ed8c51 Ensure binding numbers are less than 32;
We use u32 masks...
2022-05-31 20:24:43 -07:00
bjorn 99e45c22ad Add some descriptor set limits; 2022-05-31 20:16:16 -07:00
bjorn aa929482cd Fix default air absorption; 2022-05-31 13:55:38 -07:00
bjorn 42a924b0ee lovrPassDraw; Pass:points; 2022-05-30 15:36:31 -07:00
bjorn dd043cbf07 Fix bundle allocation; 2022-05-30 15:06:57 -07:00