This chooses type=THIN, mode=SCREENSPACE, and blending=TRANSPARENT.
Due to sampler overload, we print a friendly error message and enable a
fallback if the user tries to simultaneously enable ubershader mode, the
clearcoat extension, and the transmission extension.
- make sure all downsampling is exactly correct and use proper
uv values to access these textures. This stabilizes the DoF a bit.
- for now only use NEAREST filtering, as bilinear can't be used naively.
- noise is now mandatory, fix noise radius
- add a median pass (performance is not impacted because DoF is faster
due to using NEAREST filtering)
- fix be consistant in how the kernel radius is computed, fix a couple
errors in that area.
- change ring density from 8 to 4 (but starting with 8), so each new
ring is 4 samples larger than the previous. This reduces the number
of samples needed from 25 to 21 on mobile, and 49 to 37 on desktop.
It also makes it conceivable to use 5 rings (57 samples). Quality is
not visibly impacted because the center ring is still 8 samples.
This density, matches the number of samples required for "square"
rings.
- fix scaling issue with diaphragm simulation
- fix typos in background accumulation code -- this fixes a lot of
quality issues.
- improve performance of "fast tiles" during both DoF and combine passes
Overall the effect runs about 0.5ms faster and quality is greatly
improved.
This makes two changes to the Driver API:
1. Adds the beginSubpass() method.
2. Adds subpassMask to RenderPassParams.
Locally I've proven that this PR is sufficient by making a series of
Vulkan changes; sneak peek is available at commit
bfef6914a7d288bbd25926c02ec93d231a8c0d07.
Note that this PR moves the new usage flag to a different texture;
I had placed it on the wrong one.
See also #2780.
The new way is to follow the instructions at the top of
`web/docs/build.py`.
The option in build.sh has been unused for a while. Invoking Python from
CMake was pointless, especially since I don't want to force other
developers to install a specific version of Python etc.
Since postRun can no longer be set from within the extern post JS, we
now use the promise rather than postRun.
This upgrades emsdk to 1.39.19 (see note in #2800).
This makes the tutorials more consistent with the live demos and lets us
more easily ensure that the tutorials are kept up to date without
errors. In fact it caught an error in the Suzanne tutorial.
Since this affects source rather than served files, this PR is intended
for main. The master branch will be updated in a subsequent PR.
The existing API was fine for FilamentApp but it prevented clients from
making ImGui calls from arbitrary places, which forced them in some
cases to queue up their ImGui calls using vector<function<>>.
This PR publicizes the low-level method that consumes the ImGui draw
list and removes calls to global functions.
This is step 1 for supporting subpasses (aka framebuffer fetch).
Vulkan requires us to explicitly bind the shader to any framebuffers
that we read from. These are called input attachments in Vulkan
parlance, and each binding is called a descriptor.
For simplicity we only create homogeneous descriptor sets where each
descriptor set is comprised of only one type of binding (i.e. all
uniforms or all samplers). I see no reason to break with that
architecture right now, so input attachments live in their own set.
In the long term, we should probably think about partitioning
descriptors differently (e.g. according to their frequency of change).
This PR also renames some internal fields in order to avoid nomenclature
confusion, such as `mDescriptorSets` => `mDescriptorBundles` . Each
entry in this map is a set of descriptor sets, or what we are now
calling a "bundle".