Repository navigation
Planned examples
This is a loose list of examples that I plan on adding to this repository. No guarantee that these will make it.
Rendering a terrain using dynamic tessellation, texture arrays for textures, etc.
Omni directional shadows already use a dynamic cube map. The new example would use a dynamic cube map for reflections. Maybe combined with layered rendering for single pass dynamic cube maps using the geometry shader and doing a full mip map chain (refs #178).
Instanced rendering is already there, indirect with maybe multi draw is a pretty recent (GL) feature, so an example on this rendering multiple instances of different geom (need to store in one buffer) would be a nice addition.
Maybe also based on a terrain that loads sparse mip maps delayed to showcase the effect.
Already started one on the develop branch. Using a more sophisticated lighting model like Cook-Torrance and some HDR stuff.
Based on the defferred shading example. Maybe go with HBAO.
Demonstrate the use of shared memory to do a separable filter using e.g. for a prefix sum to do something like depth of field.
Example to show off cascaded shadow maps.
Based on deferred shading, add shadows maybe with multiple lights.
The normal debugging one is the most basic use case for a geometry shader. Additional demos would be nice, referenced by the dynamic cube map example. (update: partially done with deferred shadows using gs invocations for layered rendering)
Maybe OIT, which is the most common (?) use case for atomics. Would need to check if fragmentStoresAndAtomics is supported.
Maybe color picking. Some example that reads back from the framebuffer and uses that data to do something with it.
Because that's the latest hype and something that can be easily implemented with Vulkan. Hardest part will be finding a nice use case for a simple example.
The current skinning example does most of the calculations on the CPU. An additional one that does this one the GPU would make sense. Maybe with a more complex mesh?
Demonstrating a custom block (heap) allocator that allocates in large chunks rather than the small separate allocations done by the other examples (which is not the best way to allocate in Vulkan). Maybe also use the custom allocation callbacks.
As a base for stuff like GI. No native conservative rasterization support in Vulkan (yet), so maybe with GS?
Instead of loading offline generated mip maps, show how to generate a complete mip chain at runtime. Including multiple samplers to show off the difference.
Specialization constants can be used to change the behavior of a shader without having to change the shader itself and can be used to generate multiple pipelines from one shader with different branches that are determined by specialization constants.
Simple example that uses these for generating multiple pipelines from one "uber" shader.