luminance-0.27 was released lately and a bunch of new and interesting things was added.
The CHANGELOG is available to read but one of the most important change was the refactoring of
the pipeline system and of the overall API to make it less confusing. For instance, the
Framebuffer::default is now renamed
Framebuffer::back_buffer. Another example is the face
culling, that was in pre-0.27 enabled by default (causing people who don’t now about it to be
confused because of a black screen). This is now disabled by default; hence less confusion.
The pipeline system types are now easier to use. For instance, redundancy was removed with the
Bound* objects. When you want a bound buffer of
f32 for instance, you just have to
use the type
BoundBuffer<'a, f32> instead of the pre-0.27
BoundBuffer<'a, Buffer<f32>>. That is
a small change but it will eventually make working with luminance more comfortable.
Another change that I think is beneficial is the new
TessSlice type – that replaces the pre-0.27
TessRender. This type represents a GPU tessellation slice. Such a slice can be used to render
part of a tessellation. What’s great is that the legacy methods to build such slices
TessRender::one_whole for instance) have a new, more generalized way to do it:
TessSliceIndex<Idx>. This trait gives you a
slice method which argument has type
impl TessSliceIndex<Range<usize>> for Tess.
impl TessSliceIndex<RangeFrom<usize>> for Tess.
impl TessSliceIndex<RangeTo<usize>> for Tess.
impl TessSliceIndex<RangeFull<usize>> for Tess.
They all give you a
TessSlice to work with (with the appropriate lifetime). The four
implementations listed above can be invoked with:
For those who wonder:
Why have you not implemented Index instead?
The current Index trait doesn’t give you enough power to index a value by returning something else than a direct reference. Everything is summed up in the RFC I wrote to fix Index.
Feel free to have a look at the CHANGELOG for further information.
One of the most important feature people have asked is adding examples. The online documentation is not enough – even if I spent lots of hours enhancing it. So I added several examples:
You can find them in this place.
Please do contribute if you thing something is missing, either by opening an issue or by opening a PR. Any kind of contribution is highly welcomed!