Commit Graph

319 Commits

Author SHA1 Message Date
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 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 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 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 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 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 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 cb121d3d36 Material fixes; Pass cleanup; 2022-06-17 17:43:26 -07:00
bjorn 86b2c934e8 Materials, mostly; 2022-06-16 23:49:09 -07:00
bjorn 7de6bdf242 Shaders; Rework vertex formats; 2022-06-15 20:46:43 -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 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 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
bjorn 32fb5e63ac Destroy descriptor pools properly; 2022-05-30 13:12:04 -07:00
bjorn e59a75fce8 Pass camera functions; 2022-05-30 12:29:52 -07:00
bjorn 205767bc81 VertexFormat; 2022-05-30 12:18:42 -07:00
bjorn 541ebc1b61 Bundle allocator; 2022-05-30 12:17:17 -07:00
bjorn ff77a30f01 Default shaders; 2022-05-27 20:47:20 -07:00
bjorn 6440bc68f3 Pass:mipmap; 2022-05-26 00:07:10 -07:00
bjorn af0e388e91 Pass:copy; Pass:blit; 2022-05-25 23:52:24 -07:00
bjorn 6771ff64b5 Pass:clear; 2022-05-25 19:45:01 -07:00
bjorn a5f37f7d7d better lovrBufferIsTemporary; 2022-05-25 19:23:01 -07:00
bjorn 73f13ef3c7 Initialize buffer data properly; 2022-05-24 22:30:59 -07:00
bjorn 99ecd04e27 Pass:send; 2022-05-23 23:10:11 -07:00
bjorn 5c0b9e51ed Pass:setShader clears/resets bindings; 2022-05-23 22:32:36 -07:00
bjorn d9e8b81b72 Default buffer/texture/sampler; 2022-05-23 22:32:12 -07:00
bjorn 6dce0be2da pipeline lookup; 2022-05-23 21:44:42 -07:00
bjorn e054218713 gpu_bundle; gpu_bundle_pool; layouts; 2022-05-23 21:40:57 -07:00
bjorn a0db01959d Shader:clone; 2022-05-22 15:10:07 -07:00
bjorn a64fd216ea newShader; 2022-05-22 15:09:09 -07:00
bjorn 355b2bf85b Switch to glslang fork;
The reason is that the glslang C API doesn't support the extra
overloads that let you provide multiple strings or the lengths for
strings.  In our case our shader blobs are not null terminated, so
sending them to glslang would overrun the buffer.  I forked glslang
and modified the C API to support a length parameter.
2022-05-22 14:58:07 -07:00
bjorn 4f568ed84d s/setColorMask/setColorWrite; Pass:setColor; 2022-05-11 17:30:08 -07:00
bjorn 070e4f304d lovr.graphics.get/setBackground; 2022-05-11 15:38:05 -07:00
bjorn 970a84a514 Surface, swapchain, window texture, vsync; 2022-05-11 15:28:04 -07:00
bjorn f7b4ec725f Render passes; 2022-05-11 12:51:13 -07:00
bjorn bfa0d94f2d Pass pipeline API; 2022-05-11 12:50:26 -07:00
bjorn d9e5ba8b9f Slightly broken compileShader/newShader; 2022-05-09 11:47:06 -07:00
bjorn 5d078461a2 Rename copy texture usage to transfer; 2022-05-06 17:26:59 -07:00
bjorn 1fde5a36d0 Transform stack; 2022-05-06 17:26:38 -07:00
bjorn 22e15513f9 Sampler; 2022-05-01 15:47:17 -07:00
bjorn 211e3ef0f8 Compile fixes; 2022-05-01 15:18:56 -07:00
bjorn ebe77e5924 Sketch out Texture uploads; 2022-04-30 18:49:46 -07:00
bjorn 0316378f74 Fix renderView precedence; 2022-04-30 09:13:21 -07:00
bjorn e80d254dc6 Texture API;
Except newTexture because it's hard or something
2022-04-29 20:56:23 -07:00
bjorn 4be958195d Start Texture; 2022-04-29 20:38:34 -07:00
bjorn e53ddfa03b isFormatSupported; 2022-04-29 17:16:16 -07:00
bjorn 48e2509a3c lovr.graphics.wait; 2022-04-28 22:37:03 -07:00
bjorn 7aee0a4656 Add Pass; Buffer transfers; lovr.graphics.submit; Bugfixes; 2022-04-28 22:30:31 -07:00
bjorn a97193caac Buffer stride can not be smaller than the size of a single item; 2022-04-28 15:39:45 -07:00
bjorn a8b7bc75a8 Adjust; 2022-04-27 00:35:09 -07:00
bjorn e8c809a870 Temporary buffers; 2022-04-27 00:28:39 -07:00
bjorn 43f56c223c Tell Vulkan about the engine name and version; 2022-04-27 00:21:04 -07:00
bjorn d2110af83a Fixup; 2022-04-26 22:51:24 -07:00
bjorn 39418b8393 Add temp frame allocator; 2022-04-26 22:44:44 -07:00
bjorn a3438274b5 Add non-scratchpad Buffers;
This includes the memory allocator and the morgue.

You can't actually write any data to the buffer yet, since we don't have
commands or temp buffers.  Temp buffers (scratchpads) are coming soon.
2022-04-26 15:32:54 -07:00
bjorn 50ebed697e Update some features and limits;
- rm dynamicIndexing and nonUniformIndexing, for now (arrays aren't well
  supported)
- rename compressed texture features
- move clip/cull distance to limit instead of feature (limit can be 0)
2022-04-26 15:31:51 -07:00
bjorn 3ae0ff568f Rework device info; 2022-04-22 13:28:59 -07:00
bjorn be1cedc922 Always enable fullIndexBufferRange feature; 2022-04-22 01:07:07 -07:00
bjorn f37c1824da lovr.graphics.getDevice/getFeatures/getLimits; 2022-04-21 17:39:59 -07:00
bjorn 40e9a4ab73 core/gpu; 2022-04-21 17:39:59 -07:00
bjorn cf2f63f147 Add missing include; 2022-04-21 17:39:59 -07:00
bjorn 37221afbc6 rm graphics module; 2022-04-21 17:39:58 -07:00
bjorn d1dc2f3199 rm pico;
Notes:

- We can actually use a single Activity.java file for oculus/pico now
- We can unconditionally compile os_android.c on Android
- No need for including extra jars in build system
- Headset rendering is guaranteed synchronous now, no need to ref L
- Add an "android flavor" build setting to differentiate between oculus
  and pico devices, since they both use OpenXR.
- Update the pico manifest to reflect their OpenXR sample
- Remove some OpenGL hacks that aren't necessary anymore
2022-03-22 16:03:21 -07:00
bjorn 2da18d419b mv util src; 2022-03-22 00:13:38 -07:00
bjorn a4faad39f8 Font:getFilter; Font:setFilter; 2022-03-15 16:02:35 -07:00