Commit Graph

178 Commits

Author SHA1 Message Date
Rezmason
7eecace634 My friend recommended a much simpler blur that doesn't build any image pyramids. Unfortunately my work towards an implementation isn't very promising— it doesn't pack the same wollop as the WebGL version— but I can built my pyramids on top of it. 2021-11-13 21:25:27 -08:00
Rezmason
cebd6877bb Just learned about the private storage class. The rain pass can use it to look up the corner positions of quads, rather than derive them mathematically. 2021-11-12 00:03:06 -08:00
Rezmason
910d29e175 Poking gpu-buffer a bit because I'm apparently afraid of writing a blur shader which I've already written once. 2021-11-11 23:30:37 -08:00
Rezmason
d05cb3928d Discovered an overlooked vertical flip I wasn't performing in the WGSL resurrection shader. 2021-11-11 21:56:44 -08:00
Rezmason
db928bbe7a All the post processing passes are now based on compute pipelines instead of render pipelines. 2021-11-11 21:50:27 -08:00
Rezmason
9ad655ca2e Created a pass-through post processing compute pass. The other post-processing passes will be changed over to this kind of thing.
makePassFBO has now been split into makeRenderTarget and makeComputeTarget.
2021-11-11 09:18:32 -08:00
Rezmason
9c861fd50b Replacing the final copyToTexture call with a tiny render pass, so that the postprocessing passes can be compute shaders working off of storage textures instead. 2021-11-11 08:24:30 -08:00
Rezmason
9813e76ffb The stripe pass wasn't properly handling custom colors. 2021-11-11 08:01:43 -08:00
Rezmason
159e205019 Planning out the bloom pass. 2021-11-10 18:10:57 -08:00
Rezmason
dc4032e42a A little reorganization of methods in the passes. 2021-11-10 18:10:26 -08:00
Rezmason
f4130013f4 Moved the makePyramid and resizePyramid methods from the regl solution's util module to bloomPass.
Adding the canvas context's preferred format to the shared pass context (named "canvasFormat").
Added a placeholder bloomPass, which the existing passes now receive input from.
2021-11-09 20:06:59 -08:00
Rezmason
f0f422e933 Only load one solution— regl, or webgpu, not both. This requires dynamic import. 2021-11-09 18:26:00 -08:00
Rezmason
87c2093281 Unifying the interfaces of regl and webgpu makePass and makePipeline. 2021-11-09 09:17:01 -08:00
Rezmason
6586badf42 The WebGPU rainPass now performs a high pass filter on its own fragments. I think I prefer this to a separate high pass filter, because this one is pre-blendfunc, ie. fragments will only be added to the texture if they are individually bright enough to contribute. 2021-11-09 07:08:07 -08:00
Rezmason
786c83cca0 More tweaks to the volumetric mode debug view. 2021-11-08 23:04:08 -08:00
Rezmason
a143e3fc03 Renamed gpu-uniforms to gpu-buffer, and messed around with its API.
I believe all the align, size, stride and byteOffset values are now in the proper units, ie. bytes.
2021-11-08 22:56:00 -08:00
Rezmason
cf02073ff3 Added orthographic projection and a profile angle to the volumetric mode when effects are off. 2021-11-08 09:47:56 -08:00
Rezmason
11bba1020d Changing my mind a little about how to render the "behind the scenes" version of the effect, in regular and volumetric mode.
An isometric perspective would be neat.
2021-11-08 09:29:04 -08:00
Rezmason
bd17549619 I believe I've added support for generating the array buffer for layouts ending in runtime-sized arrays to gpu-uniforms.js. 2021-11-08 09:15:00 -08:00
Rezmason
5747fb74a3 Fixing what I think was a stride bug in gpu-uniforms. This library seriously needs some extensive unit testing. 2021-11-08 09:09:12 -08:00
Rezmason
6ab16b3091 Trying to implement the spec for the alignment and size of struct and array fields in gpu-uniforms. 2021-11-08 08:58:55 -08:00
Rezmason
bbe3d62331 Wrote another utility method for cramming an array of resources into a bind group. 2021-11-08 08:05:56 -08:00
Rezmason
1528ca39a5 Commenting out the tables and adding select to some shaders in place of the original ternary operator. 2021-11-08 03:45:06 -08:00
Rezmason
a4e08c0ceb Refining gpu-uniforms warnings, which are now only emitted if requested. Hypothetically a user could call write() on the ArrayBuffer to update only some of its values. 2021-11-08 03:08:25 -08:00
Rezmason
415ffa77ee Driving more uniforms.read calls from the actual shaders. 2021-11-08 03:01:46 -08:00
Rezmason
61a3a6d783 Moved the WebGPU code off of "std140" and onto gpu-uniforms. 2021-11-08 02:23:33 -08:00
Rezmason
8f226be368 Wrote some code to parse structs in a WGSL shader, calculate its fields' offsets into an ArrayBuffer, generate a JS object that represents it, and write such a JS object to an ArrayBuffer. 2021-11-08 01:13:42 -08:00
Rezmason
bd3d0c76d2 Fixing the names of shaders in the passes. The loadShader utility function now returns the code and the module, since I'm hoping to parse uniform buffer layouts from the code. 2021-11-07 00:41:25 -07:00
Rezmason
bade1667ad Making some comments in the WebGPU rainPass and changing the "effect=none" view to be easier on the eyes. 2021-11-06 15:19:56 -07:00
Rezmason
335ff5ddb7 The main module can now pick a renderer based on the "renderer" URL parameter. 2021-11-06 05:03:38 -07:00
Rezmason
89b9f4e363 Ported all the post processing regl passes to WebGPU. Fixed the CORS stuff in loadTexture. Renamed createRenderTargetTexture to makePassFBO, to conform with the regl project. Added make1DTexture, which stripePass uses. 2021-11-06 05:03:16 -07:00
Rezmason
230847e5b8 Added runtime texture targets. A pass now returns its resources in getOutputs(), which subsequent passes access as getInputs(). render-to-canvas-wgsl 2021-11-05 01:06:39 -07:00
Rezmason
f0ae7731bb The webgpu project's multi-pass pipeline is borrowed from the regl project, but the outputs don't exist yet. Outputs will be tricky, because RTTs are thrown out and recreated when the canvas resizes, which I think means all the bind groups referencing the old texture have to be destroyed and recreated, too. 2021-11-03 21:42:01 -07:00
Rezmason
0b04947425 Implemented makePass(). Moved rain compute and render stuff into a pass. 2021-11-03 21:30:22 -07:00
Rezmason
f8959cd7d9 Renaming msdfSampler to linearSampler; adding loadShaderModule utility method; busting the rain render out of its render bundle (which won't be useful long-term). 2021-11-03 20:01:59 -07:00
Rezmason
8f09fade43 Contemplating my next steps. 2021-11-02 23:20:54 -07:00
Rezmason
8048c9c690 That's funny, you can blob a fetch response and chuck it into createImageBitmap(). 2021-11-02 23:19:54 -07:00
Rezmason
b31e70c1e1 Removing the channel override in the vertex shader. 2021-11-02 07:35:19 -07:00
Rezmason
4294932d5f Fixed the flickering leftmost column. 2021-11-01 08:49:33 -07:00
Rezmason
348b07d237 Actually the ping-pong setup isn't necessary for this compute shader, since it does everything in-place.
Undid all the y-flips I could find, and they all canceled one another out, except for the glyph UVs in the fragment shader.
2021-11-01 08:38:48 -07:00
Rezmason
6460f4401a Ported the rain compute shader to wgsl. Tons of inverted-y errors abound. 2021-11-01 01:52:57 -07:00
Rezmason
1c1b1e4f03 We have ping-pong! And all the rain pass's shaders can coexist in one module! And I met and received ample help from @kainino0x and others on the WebGPU Matrix chat! webgpu-ping-pong 2021-11-01 00:29:16 -07:00
Rezmason
6f58882851 The MSDF stuff shouldn't be in its own uniform buffer. This is basically config stuff.
Added a compute pass that currently does nothing while I learn how to make use of it.
2021-10-31 20:00:11 -07:00
Rezmason
53e1c5502c There's no existing infrastructure for WGSL yet, so to clean up the shader I'm making do with some simple greps and short-term meticulousness. 2021-10-30 23:18:39 -07:00
Rezmason
375560d6a1 Fixed a math issue in the symbol UV function. 2021-10-30 20:30:55 -07:00
Rezmason
4ea6cadd2f Fixing some y-flip related stuff in the rain pass fragment shader. Consolidating and changing the type of a bunch of info in the config uniform. Improving the code comments. 2021-10-30 20:05:07 -07:00
Rezmason
d8701c9408 Ported the rain vertex shader to wgsl. 2021-10-30 18:07:07 -07:00
Rezmason
923992660c Ported the rain fragment shader to wgsl. Made a small change in both to the function that resolves the glyph symbol float to the coordinate of a glyph in the MSDF texture. 2021-10-30 14:49:06 -07:00
Rezmason
4dd0c1be50 Organizing shader functions' input and output types. I don't know if this is a good idea in the long run, but it seems useful in the short term. 2021-10-30 13:50:46 -07:00
Rezmason
cc75938fcb Passing all the rain pass configs through a giant struct into the rain shader. I've included the compute shader fields, because I have hope that the compute pass can use the same shader module. 2021-10-30 13:48:28 -07:00