-
Notifications
You must be signed in to change notification settings - Fork 435
/
changelog.dox
4221 lines (3935 loc) · 258 KB
/
changelog.dox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
namespace Magnum {
/** @page changelog Changelog
@tableofcontents
See also:
- @subpage changelog-plugins "Plugins changelog"
- @subpage changelog-integration "Integration changelog"
- @subpage changelog-extras "Extras changelog"
- @subpage changelog-examples "Examples changelog"
@section changelog-latest Changes since 2020.06
@subsection changelog-latest-dependencies Dependency changes
- Minimal supported CMake version is now 3.5, changed from 3.4, since CMake
3.27+ warns if a compatibility with CMake below 3.5 is requested. Older
versions are not supported anymore and all workarounds for them were
removed. This is a conservative change, as there are no known supported
distributions which would have anything older than 3.5.
- Minimal supported CMake version for Emscripten WebGL 2 compilation is now
3.13, in order to be able to set linker options for enabling WebGL 2
without having to pollute the global `CMAKE_EXE_LINKER_FLAGS` variable.
- Minimal supported Emscripten version is now 1.39.5 which implicitly sets
`-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1`, as the deprecated
code paths were removed.
@subsection changelog-latest-new New features
- MSVC 2022 support. See also [mosra/corrade#124](https://github.com/mosra/corrade/issues/124)
and [mosra/magnum#552](https://github.com/mosra/magnum/issues/552).
- New @ref NoAllocate constructor tag, to be used by the @ref Vk library
- New @ref DefaultInit constructor tag, simply an alias to the existing
@ref Corrade::DefaultInit tag
- New @ref PixelFormat::Depth16Unorm, @relativeref{PixelFormat,Depth24Unorm},
@relativeref{PixelFormat,Depth32F}, @relativeref{PixelFormat,Stencil8UI},
@relativeref{PixelFormat,Depth16UnormStencil8UI},
@relativeref{PixelFormat,Depth24UnormStencil8UI},
@relativeref{PixelFormat,Depth32FStencil8UI} generic pixel formats,
including mapping to @ref GL::PixelFormat / @ref GL::PixelType,
@ref GL::TextureFormat and @ref Vk::PixelFormat and (partial) support in
@ref DebugTools::CompareImage
- New @ref pixelFormatChannelFormat(), @ref pixelFormatChannelCount(),
@ref isPixelFormatNormalized(), @ref isPixelFormatIntegral(),
@ref isPixelFormatFloatingPoint(), @ref isPixelFormatSrgb(),
@ref isPixelFormatDepthOrStencil() and
@ref pixelFormat(PixelFormat, UnsignedInt, bool) helpers
- New @ref Degh, @ref Radh, @ref Range1Dh, @ref Range2Dh and @ref Range3Dh
typedefs for half-float angles and ranges
- New @ref Range1Dui, @ref Range2Dui and @ref Range3Dui typedefs for unsigned
integer ranges
- New @ref Nanoseconds and @ref Seconds typedefs for time values
- Added MSVC Natvis files and pretty-printers for GDB. See @ref debuggers,
[mosra/magnum#589](https://github.com/mosra/magnum/pull/589),
[mosra/magnum#595](https://github.com/mosra/magnum/pull/595),
[mosra/magnum#620](https://github.com/mosra/magnum/pull/620),
[mosra/magnum#623](https://github.com/mosra/magnum/pull/623) and
[mosra/corrade#179](https://github.com/mosra/corrade/issues/179) for more
information.
@subsubsection changelog-latest-new-debugtools DebugTools library
- Added @ref DebugTools::ColorMap::coolWarmSmooth() and
@ref DebugTools::ColorMap::coolWarmBent() (see [mosra/magnum#473](https://github.com/mosra/magnum/pull/473))
- New @ref DebugTools::CompareMaterial comparator for convenient comparison
of @ref Trade::MaterialData instances
@subsubsection changelog-latest-new-gl GL library
- New @ref GL::AbstractShaderProgram::draw(Mesh&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&)
overload for data-oriented multi-draw workflows without @ref GL::MeshView
and internal temporary allocations
- Implemented ANGLE- and WebGL-specific instanced multidraw with
@ref GL::AbstractShaderProgram::draw(Mesh&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&, const Containers::StridedArrayView1D<const UnsignedInt>&).
It's added mainly in order to provide a fast rendering path on
resource-constrainted systems and as such doesn't have an overload taking
@ref GL::MeshView instances or a fallback path when the multidraw
extensions are not available.
- New @ref GL::Context::Configuration class providing runtime alternatives to
the `--magnum-log`, `--magnum-gpu-validation`, `--magnum-disable-extensions`
and `--magnum-disable-workarounds` command line options. The class is then
inherited by all @ref Platform::Sdl2Application::GLConfiguration "Platform::*Application::GLConfiguration"
and @ref Platform::WindowlessEglApplication::Configuration "Platform::Windowless*Application::Configuration"
classes.
- The `--magnum-gpu-validation` option accepts a new value, `no-error`, which
creates OpenGL contexts without error reporting. Those may result in better
performance on certain drivers, however note that errors on such context
have undefined behavior and may cause stability issues. This option is also
programatically settable via a new
@ref GL::Context::Configuration::Flag::GpuValidationNoError flag.
- Implemented the GL 4.3 @gl_extension{ARB,framebuffer_no_attachments}
extension and matching GLES 3.1 functionality, exposed as
@ref GL::Framebuffer::setDefaultSize() and related APIs
- Implemented the GL 4.3 @gl_extension{ARB,texture_view} extension and
matching @gl_extension{OES,texture_view} and @gl_extension{EXT,texture_view}
extensions on GLES 3.1+, exposed as @ref GL::Texture::view() and similar
APIs on other texture types
- Implemented the GL 4.5 @gl_extension{ARB,clip_control} extension and
matching @gl_extension{EXT,clip_control} extension on GLES, exposed as
@ref GL::Renderer::setClipControl(). See also [mosra/magnum#543](https://github.com/mosra/magnum/issues/543).
- Implemented @gl_extension{EXT,texture_norm16} and
@webgl_extension{EXT,texture_norm16} ES and WebGL extensions, making
normalized 16-bit texture and renderbuffer formats available on all
platforms
- The @gl_extension{EXT,texture_sRGB_RG8} extension is now available on
desktop OpenGL as well, exposing a two-component sRGB format in addition to
the already present one-, three- and four-component formats
- Implemented @webgl_extension{WEBGL,blend_equation_advanced_coherent}
extension, making advanced @ref GL::Renderer::BlendEquation values
available on all platforms
- Implemented @webgl_extension{EXT,frag_depth} WebGL 1.0 extension (shading
language only)
- Implemented @webgl_extension{WEBGL,debug_renderer_info} as
@ref GL::Context::rendererStringUnmasked() and
@relativeref{GL::Context,vendorStringUnmasked()} together with printing
those in the engine startup log if the extension is available and expanding
the capabilities of @ref GL::Context::detectedDriver() on WebGL. It also
resulted in a new @cpp "firefox-deprecated-debug-renderer-info" @ce
workaround being added, see @ref opengl-workarounds for more info.
- Implemented the @webgl_extension{EXT,depth_clamp} WebGL extension, making
@ref GL::Renderer::Feature::DepthClamp available on all platforms
- Implemented the @gl_extension{EXT,texture_mirror_clamp_to_edge} ES and
WebGL extensions, making @ref GL::SamplerWrapping::MirrorClampToEdge
available on all platforms
- Implemented the @m_class{m-doc-external} [ANGLE_provoking_vertex](https://chromium.googlesource.com/angle/angle/+/main/extensions/ANGLE_provoking_vertex.txt)
and @m_class{m-doc-external} [ANGLE_polygon_mode](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_polygon_mode.txt)
ES extensions. Recognized also on WebGL as
@webgl_extension{WEBGL,provoking_vertex} and
@webgl_extension{WEBGL,polygon_mode} but with no implementation as
Emscripten doesn't have the required entrypoints yet.
- Implemented the @m_class{m-doc-external} [ANGLE_stencil_texturing](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_stencil_texturing.txt)
ES and @webgl_extension{WEBGL,stencil_texturing} WebGL extensions
- Implemented the @gl_extension{EXT,blend_func_extended} ES and
@webgl_extension{WEBGL,blend_func_extended} WebGL extensions
- Recognizing @webgl_extension{EXT,float_blend} and
@webgl_extension{WEBGL,debug_shaders} WebGL extensions, no implementation
done yet
- Implemented @ref GL-AbstractShaderProgram-async "Async shader compilation and linking"
including the @gl_extension{KHR,parallel_shader_compile} GL, GLES and
@webgl_extension{KHR,parallel_shader_compile} WebGL extension (see
[mosra/magnum#534](https://github.com/mosra/magnum/issues/534) and
[mosra/magnum#576](https://github.com/mosra/magnum/pull/576))
- Recognizing ANGLE GLES and WebGL base vertex, base instance and multi-draw
extensions and using them in @ref GL::AbstractShaderProgram::draw(Mesh&)
and @ref GL::AbstractShaderProgram::draw(const Containers::Iterable<MeshView>&):
- @gl_extension{EXT,draw_elements_base_vertex}
- @gl_extension{OES,draw_elements_base_vertex}
- @m_class{m-doc-external} [ANGLE_multi_draw](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_multi_draw.txt)
- @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt)
- @webgl_extension{WEBGL,multi_draw}
- @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance}
- @webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance}
- Recognizing @m_class{m-doc-external} [ANGLE_compressed_texture_etc](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_compressed_texture_etc.txt)
OpenGL ES and @webgl_extension{WEBGL,compressed_texture_etc} WebGL
extensions, making ETC and EAC @ref GL::CompressedPixelFormat and
@ref GL::TextureFormat values available also on OpenGL ES 2.0 and WebGL.
The values were already present in WebGL 2.0 builds by accident before,
without documenting corresponding extension requirements.
- Recognizing the @gl_extension{NV,geometry_shader_passthrough} extension
- Added a @ref GL::AbstractTexture::target() getter to simplify interaction
with raw GL code
- Exposed the @gl_extension{ARB,buffer_storage} desktop and
@gl_extension{EXT,buffer_storage} ES extensions as
@ref GL::Buffer::setStorage() together with additions to
@ref GL::Buffer::MapFlag
- It's now possible to modify index offset via @ref GL::Mesh::setIndexOffset()
directly on the mesh itself instead of just through @ref GL::MeshView
- Exposed missing @ref GL::Renderer::Feature::SampleAlphaToCoverage,
@relativeref{GL::Renderer,Feature::SampleAlphaToOne},
@relativeref{GL::Renderer,Feature::SampleCoverage} and
@ref GL::Renderer::setSampleCoverage() GL 1.3 APIs
- Using the non-clamping @gl_extension{NV,depth_buffer_float} entrypoints in
@ref GL::Renderer::setClearDepth() and a newly exposed
@ref GL::Renderer::setDepthRange() if the extension is available. See also
[mosra/magnum#543](https://github.com/mosra/magnum/issues/543) and
[mosra/magnum#558](https://github.com/mosra/magnum/issues/558).
- A new @cpp "nv-egl-crashy-query-device-attrib" @ce workaround for a crash
happening during EGL initialization in recent NVidia drivers. See
@ref opengl-workarounds and [mosra/magnum#491](https://github.com/mosra/magnum/pull/491)
for more information.
- A new @cpp "angle-chatty-shader-compiler" @ce workaround for silencing
useless linker output on ANGLE. See @ref opengl-workarounds for more
information.
- A new @cpp "android-generic-hostname-might-be-swiftshader" @ce workaround
needed for testing against Android Emulator SwiftShader GPU. See
@ref opengl-workarounds for more information.
- A new @cpp "angle-instanced-attributes-always-draw-instanced" @ce
workaround for ANGLE's draw validation bug, where it complained about
instanced buffers being too small when drawing such mesh as non-instanced.
See @ref opengl-workarounds for more information, see also
[mosra/magnum#539](https://github.com/mosra/magnum/pull/539).
- A new @cpp "adreno-glsl-version-stuck-at-300" @ce workaround for an
incorrect @glsl __VERSION__ @ce reported for GLSL ES 3.10 and 3.20 shaders
on Qualcomm Adreno drivers that caused builtin shaders to have broken
rendering or even crash. See @ref opengl-workarounds and
[mosra/magnum#618](https://github.com/mosra/magnum/issues/618) for more
information.
@subsubsection changelog-latest-new-math Math library
- Added @ref Math::fmod() (see [mosra/magnum#454](https://github.com/mosra/magnum/pull/454))
- Added @ref Math::binomialCoefficient() (see [mosra/magnum#461](https://github.com/mosra/magnum/pull/461))
- Added @ref Math::popcount()
- Added @ref Math::Color3::fromLinearRgbInt(),
@ref Math::Color4::fromLinearRgbInt() and
@ref Math::Color4::fromLinearRgbaInt() as counterparts to
@ref Math::Color3::fromSrgbInt(), @ref Math::Color4::fromSrgbInt() and
@ref Math::Color4::fromSrgbAlphaInt() that don't perform a sRGB conversion
- New @ref Math::DualComplex::from(const Complex<T>&, const Vector2<T>&) and
@ref Math::DualQuaternion::from(const Quaternion<T>&, const Vector3<T>&)
functions mirroring @ref Math::Matrix3::from(const Matrix2x2<T>&, const Vector2<T>&)
and @ref Math::Matrix4::from(const Matrix3x3<T>&, const Vector3<T>&) to
create a transformation from a rotation and translation part (see
[mosra/magnum#471](https://github.com/mosra/magnum/pull/471))
- Added @ref Math::Matrix4::orthographicProjection(const Vector2<T>&, const Vector2<T>&, T, T)
and @ref Math::Matrix3::projection(const Vector2<T>&, const Vector2<T>&) to
match the classic `glOrtho()` and `gluOrtho2D()` APIs, complementing
@ref Math::Matrix4::perspectiveProjection(const Vector2<T>&, const Vector2<T>&, T, T)
that got added in 2019.10
- New @ref Math::Matrix4::orthographicProjectionNear() const,
@ref Math::Matrix4::orthographicProjectionFar() const,
@ref Math::Matrix4::perspectiveProjectionNear() const and
@ref Math::Matrix4::perspectiveProjectionFar() const queries
- Added @ref Math::Intersection::rayRange() (see [mosra/magnum#484](https://github.com/mosra/magnum/pull/484))
- Added @ref Math::RectangularMatrix::RectangularMatrix(IdentityInitT, T)
constructor as it might be useful to create non-square identity matrices as
well
- Added @ref Math::Distance::pointPoint() and
@ref Math::Intersection::pointCircle() /
@relativeref{Math::Intersection,pointSphere()}, which are just wrappers
over trivial code but easier to discover
- Added an unary @cpp operator+() @ce to all @ref Math classes
- Added @ref Math::Quaternion::rotation(const Vector3<T>&, const Vector3<T>&)
for creating a quaternion that rotates from one vector to another
- Added @ref Math::Quaternion::reflection() and
@ref Math::Quaternion::reflectVector(), but mainly just for documentation
purposes as reflections cannot be combined with rotations and thus are
mostly useless in practice
- New @ref Magnum/Math/ColorBatch.h header with utilities for performing Y
flip of various block-compressed formats
- New @ref Math::Nanoseconds and @ref Math::Seconds classes for strongly
typed representation of time values
@subsubsection changelog-latest-new-materialtools MaterialTools library
- New @ref MaterialTools library providing various material conversion
utilities
@subsubsection changelog-latest-new-meshtools MeshTools library
- New @ref MeshTools::boundingSphereBouncingBubble() algorithm for
calculating a tight bounding sphere for a mesh, along with a trivial
@ref MeshTools::boundingRange() for AABBs (see [mosra/magnum#557](https://github.com/mosra/magnum/pull/557))
- Added @ref MeshTools::generateQuadIndices() for quad triangulation
including non-convex and non-planar quads
- New @ref MeshTools::filterAttributes(),
@ref MeshTools::filterOnlyAttributes() and
@ref MeshTools::filterExceptAttributes() utilities for filtering mesh data
attribute lists
- New family of @ref MeshTools::transform2D(), @ref MeshTools::transform3D()
and @ref MeshTools::transformTextureCoordinates2D() APIs for converting
positions, normals, tangents, bitangents and texture coordinates directly
in @ref Trade::MeshData instances
- New @ref MeshTools::compileLines() utility for creating meshes compatible
with the new @ref Shaders::LineGL. See also
[mosra/magnum#601](https://github.com/mosra/magnum/pull/601).
@subsubsection changelog-latest-new-platform Platform libraries
- It's now possible to have multiple @ref Platform::EmscriptenApplication
canvases on a single page (see [mosra/magnum#480](https://github.com/mosra/magnum/pull/480),
[mosra/magnum#481](https://github.com/mosra/magnum/pull/481))
- Added @relativeref{Platform::WindowlessEglContext,release()} as a
counterpart to @relativeref{Platform::WindowlessEglContext,makeCurrent()}
to all @cpp Platform::Windowless*Context @ce classes. Useful for
transferring OpenGL contexts between threads, see also
[mosra/magnum#495](https://github.com/mosra/magnum/pull/495).
- Implemented @relativeref{Platform::WindowlessEglApplication,Configuration::Flag::NoError}
in @ref Platform::WindowlessEglApplication,
@ref Platform::WindowlessGlxApplication,
@ref Platform::WindowlessWglApplication and
@ref Platform::Sdl2Application
- New @ref Platform::EmscriptenApplication::GLConfiguration::Flag::PowerPreferenceLowPower
and @relativeref{Platform::EmscriptenApplication::GLConfiguration,Flag::PowerPreferenceHighPerformance}
flags allowing to pick either a low power, high performance or default
behavior (see [mosra/magnum#500](https://github.com/mosra/magnum/issues/500)).
@subsubsection changelog-latest-new-scenegraph SceneGraph library
- Added @ref SceneGraph::Object::move()
@subsubsection changelog-latest-new-scenetools SceneTools library
- New @ref SceneTools library that'll be a home for various whole-scene
optimization algorithms such as hierarchy flattening, redundant node
removal and such
- The @ref magnum-sceneconverter "magnum-sceneconverter" utility now supports
whole-scene conversion instead of operating just on single meshes
- The @ref magnum-sceneconverter "magnum-sceneconverter" utility gained an
experimental `--concatenate-meshes` option, which will flatten the mesh
hierarchy and concatenate all meshes together. Note that it doesn't
correctly handle all corner cases yet and may assert on certain inputs.
- Added a `--phong-to-pbr` option to the @ref magnum-sceneconverter "magnum-sceneconverter"
utility to perform conversion of Phong materials to PBR, useful for example
when converting old OBJ and COLLADA files to glTF
- The @ref magnum-sceneconverter "magnum-sceneconverter" `--info` output is
now more compact and colored for better readability
- Added `--info-importer`, `--info-converter` and `--info-image-converter`
options to @ref magnum-sceneconverter "magnum-sceneconverter", listing
plugin features and configuration file contents
@subsubsection changelog-latest-new-shaders Shaders library
- New @ref Shaders::LineGL shader for rendering wide anti-aliased lines with
configurable join and cap rasterization. See also
[mosra/magnum#601](https://github.com/mosra/magnum/pull/601) and
[mosra/magnum#610](https://github.com/mosra/magnum/pull/610).
- All builtin shaders now have opt-in support for uniform buffers on desktop,
OpenGL ES 3.0+ and WebGL 2.0, as well as shader storage buffers on desktop
and ES 3.1+. This includes multi-draw functionality for massive driver
overhead reduction. The @ref shaders overview page was updated with an
introduction to the new features.
- All builtin shaders now have opt-in capability of
@ref shaders-async "async compilation and linking" (see
[mosra/magnum534](https://github.com/mosra/magnum/issues/534) and
[mosra/magnum#576](https://github.com/mosra/magnum/pull/576))
- @ref Shaders::FlatGL and @ref Shaders::PhongGL now support texture arrays,
available also in multi-draw and instanced scenarios
- @ref Shaders::FlatGL and @ref Shaders::PhongGL now support object ID
textures in addition to uniform and per-vertex object ID
- @ref Shaders::MeshVisualizerGL2D and @ref Shaders::MeshVisualizerGL3D now
supports object ID textures same as @ref Shaders::FlatGL and
@ref Shaders::PhongGL, including also support for object ID texture
transformation, instanced texture offset and texture arrays
- Support for instanced drawing in @ref Shaders::MeshVisualizerGL2D and
@ref Shaders::MeshVisualizerGL3D for better feature parity with the other
shaders
- New @ref Shaders::Generic::JointIds,
@ref Shaders::Generic::SecondaryJointIds, @ref Shaders::Generic::Weights
and @ref Shaders::Generic::SecondaryWeights attributes for GPU skinning
support (see also [mosra/magnum#441](https://github.com/mosra/magnum/pull/441))
- GPU skinning support in @ref Shaders::FlatGL, @ref Shaders::PhongGL and
@ref Shaders::MeshVisualizerGL2D / @ref Shaders::MeshVisualizerGL3D (see
also [mosra/magnum#444](https://github.com/mosra/magnum/pull/444) and
[mosra/magnum#506](https://github.com/mosra/magnum/issues/506))
- Added @ref Shaders::PhongGL::setNormalTextureScale(), consuming the
recently added @ref Trade::MaterialAttribute::NormalTextureScale material
attribute
- @ref Shaders::PhongGL was reworked to support directional and
range-attenuated point lights to follow the additions to
@ref Trade::LightData
- Added @ref Shaders::PhongGL::setLightSpecularColors() for better control
over specular highlights
- Added @ref Shaders::PhongGL::Flag::NoSpecular as a significantly faster
alternative to setting specular color to @cpp 0x00000000_rgbaf @ce in case
specular highlights are not desired
- Added @ref Shaders::PhongGL::Flag::DoubleSided for rendering double-sided
meshes
@subsubsection changelog-latest-new-shadertools ShaderTools library
- New @ref ShaderTools library that provides a
@ref ShaderTools::AbstractConverter plugin interface for shader validation,
conversion, compilation and optimization; together with a
@ref ShaderTools::AnyConverter "AnyShaderConverter" plugin and a
@ref magnum-shaderconverter "magnum-shaderconverter" utility
@subsubsection changelog-latest-new-text Text library
- New @ref Text::AbstractShaper interface returned by @ref Text::AbstractFont
and associated @ref Text::Script, @ref Text::Feature and
@ref Text::ShapeDirection enums allowing full control over script,
language, direction and used typographic features of shaped text
- Reworked @ref Text::AbstractGlyphCache on top of
@ref TextureTools::AtlasLandfill allowing more efficient and incremental
glyph packing together with support for texture arrays
- New @ref Text::renderLineGlyphPositionsInto(),
@ref Text::renderGlyphQuadsInto(), @ref Text::alignRenderedLine(),
@ref Text::alignRenderedBlock() and @ref Text::renderGlyphQuadIndicesInto()
APIs providing low-level access to the text renderer building blocks
@subsubsection changelog-latest-new-texturetools TextureTools library
- New @ref TextureTools::AtlasLandfill texture atlas packer (see
[mosra/magnum#2](https://github.com/mosra/magnum/issues/2))
- New @ref TextureTools::atlasArrayPowerOfTwo() utility for optimal packing
of power-of-two textures into a texture atlas array
- New @ref TextureTools::atlasTextureCoordinateTransformation() helper for
creating an appropriate texture coordinate transformation matrix for
textures placed into an atlas
- Added a @ref TextureTools::DistanceField::operator()() overload taking a
@ref GL::Framebuffer instead of a @ref GL::Texture as an output for an
easier ability to download the resulting image on OpenGL ES platforms;
the @ref magnum-distancefieldconverter "magnum-distancefieldconverter"
utility thus now compiles and works on OpenGL ES 3+ as well
@subsubsection changelog-latest-new-trade Trade library
- A new, redesigned @ref Trade::MaterialData class allowing to store custom
material attributes as well as more material types together in a single
instance; plus new @ref Trade::FlatMaterialData,
@ref Trade::PbrMetallicRoughnessMaterialData,
@ref Trade::PbrSpecularGlossinessMaterialData and
@ref Trade::PbrClearCoatMaterialData convenience accessor APIs similar to
@ref Trade::PhongMaterialData. See [mosra/magnum#459](https://github.com/mosra/magnum/pull/459).
- Added @ref Trade::PhongMaterialData::hasSpecularTexture(),
@ref Trade::PhongMaterialData::specularTextureSwizzle(),
@ref Trade::PhongMaterialData::normalTextureScale() and
@ref Trade::PhongMaterialData::normalTextureSwizzle() to make new features
added for PBR materials recognizable also in classic Phong workflows.
- A completely redesigned @ref Trade::SceneData class that stores data of
the whole scene in a data-oriented way, allowing for storing custom fields
as well. See [mosra/magnum#525](https://github.com/mosra/magnum/pull/525).
- New @ref Trade::SkinData class and @ref Trade::AbstractImporter::skin2D() /
@ref Trade::AbstractImporter::skin3D() family of APIs for skin import, as
well as support in @ref Trade::AnySceneImporter "AnySceneImporter"
- New builtin @ref Trade::MeshAttribute::JointIds and
@ref Trade::MeshAttribute::Weights attributes for skinning (see
[mosra/magnum#441](https://github.com/mosra/magnum/pull/441))
- The @ref Trade::AbstractSceneConverter plugin interface gained support for
batch conversion of whole scenes --- meshes, hierarchies, materials,
textures, animations and other data; @relativeref{Trade,AnySceneConverter}
is updated to support batch conversion as well
- 1D and 3D image support in @ref Trade::AbstractImageConverter
- @ref Trade::LightData got extended to support light attenuation and range
parameters as well and spot light inner and outer angle
- @ref Trade::AbstractImporter, @ref Trade::AbstractImageConverter and
@ref Trade::AbstractSceneConverter now has @relativeref{Trade::AbstractImporter,addFlags()} and
@relativeref{Trade::AbstractImporter,clearFlags()} convenience helpers that
are encouraged over @relativeref{Trade::AbstractImporter,setFlags()} as it
avoid accidentally clearing default flags potentially added in the future.
- New @ref Trade::AbstractImporter::openMemory() function for passing
non-temporary memory to the importer, allowing the implementations to avoid
allocating an internal copy; for benchmarking and testing purposes it's
also exposed via a `--map` option in the
@ref magnum-sceneconverter "magnum-sceneconverter" and
@ref magnum-imageconverter "magnum-imageconverter" utilities
- Added @ref Trade::animationTrackTypeSize() and
@ref Trade::animationTrackTypeAlignment() for API consistency with other
type enums
- Added @ref Trade::isAnimationTrackTargetCustom() and
@ref Trade::animationTrackTargetCustom() helpers as well as
@ref Trade::AbstractImporter::animationTrackTargetName() and
@ref Trade::AbstractImporter::animationTrackTargetForName() queries for
associating custom @ref Trade::AnimationTrackTarget values with string
names consistently with what's already done for @ref Trade::MeshAttribute
and @ref Trade::SceneField
- Ability to convert also 1D and 3D images with the
@ref magnum-imageconverter "magnum-imageconverter" utility, as well as
combining layers into images of one dimension more (or vice versa),
creating multi-level images from separate input files and chaining multiple
converters together
- The @ref magnum-imageconverter "magnum-imageconverter" `--info` output is
now more compact and colored for better readability
- Added `--info-importer` and `--info-converter` options to
@ref magnum-imageconverter "magnum-imageconverter", listing plugin features
and configuration file contents
@subsubsection changelog-latest-new-vk Vk library
- Boostrapping Vulkan support ([mosra/magnum#234](https://github.com/mosra/magnum/pull/234)), in particular:
- @ref Vk::LayerProperties, @ref Vk::InstanceExtensionProperties and
@ref Vk::enumerateInstanceVersion() APIs for querying instance-level
properties
- @ref Vk::DeviceProperties and @ref Vk::ExtensionProperties for querying
device-level properties
- @ref Vk::Instance and @ref Vk::Device APIs for instance and device
creation and fetching instance/device-specific function pointers,
@ref Vk::Queue setup. See also [mosra/magnum#549](https://github.com/mosra/magnum/pull/549).
- @ref Vk::CommandPool and @ref Vk::CommandBuffer wrappers
- Initial implementations of @ref Vk::Memory, @ref Vk::Buffer and
@ref Vk::Image
- @ref Vk::Shader wrapper
- New @ref magnum-vk-info "magnum-vk-info" utility, a Vulkan-specific
counterpart for @ref magnum-gl-info "magnum-gl-info"
- @ref vulkan "Initial documentation", in particular @ref vulkan-support,
@ref vulkan-wrapping and @ref vulkan-mapping
@subsection changelog-latest-changes Changes and improvements
- Added @ref MeshPrimitive::Meshlets as a placeholder for future meshlet
support in @ref Trade::MeshData
- @ref MeshIndexType was enlarged to 32 bits and can now wrap
implementation-specific values similar to @ref PixelFormat,
@ref CompressedPixelFormat, @ref VertexFormat and @ref MeshPrimitive
- @ref Image::size(), @ref CompressedImage::size(), @ref ImageView::size(),
@ref CompressedImageView::size() as well as @ref Trade::ImageData::size()
now return a @cpp const& @ce instead of a value to allow creating a
@relativeref{Corrade,Containers::StridedArrayView} slice onto this member.
- @ref Image, @ref CompressedImage, @ref ImageView, @ref CompressedImageView
as well as @ref Trade::ImageData are now able to annotate array, cube map
and cube map array images using @ref ImageFlags
- Removed unnecessary @ref std::string usage from certain
@relativeref{Corrade,Utility::ConfigurationValue} specializations (see
[mosra/magnum#582](https://github.com/mosra/magnum/pull/582))
- Added @ref Timeline::currentFrameTime() and
@relativeref{Timeline,currentFrameDuration()} counterparts to
@relativeref{Timeline,previousFrameTime()} and
@relativeref{Timeline,previousFrameDuration()} (see
[mosra/magnum#604](https://github.com/mosra/magnum/pull/604))
- Added @ref MAGNUM_AUDIO_ABSTRACTIMPORTER_PLUGIN_INTERFACE,
@ref MAGNUM_SHADERTOOLS_ABSTRACTCONVERTER_PLUGIN_INTERFACE,
@ref MAGNUM_TEXT_ABSTRACTFONT_PLUGIN_INTERFACE,
@ref MAGNUM_TEXT_ABSTRACTFONTCONVERTER_PLUGIN_INTERFACE,
@ref MAGNUM_TRADE_ABSTRACTIMPORTER_PLUGIN_INTERFACE,
@ref MAGNUM_TRADE_ABSTRACTIMAGECONVERTER_PLUGIN_INTERFACE and
@ref MAGNUM_TRADE_ABSTRACTSCENECONVERTER_PLUGIN_INTERFACE defines with
plugin interface strings to avoid having to update them by hand in every
plugin every time the interface version is bumped after an ABI break
@subsubsection changelog-latest-changes-animation Animation library
- Added a @ref Animation::Easingd typedef with
@ref Animation::BasicEasing "easing functions" implemented with
double precision, in addition to single-precision @ref Animation::Easing,
and similar in spirit to the @ref Constants and @ref Constantsd typedefs.
- Added @ref Animation::TrackViewStorage::interpolator() for getting a
type-erased interpolator pointer without having to cast to a concrete
@ref Animation::TrackView type
@subsubsection changelog-latest-changes-audio Audio library
- All configurable OpenAL context properties are now exposed via
@ref Audio::Context::frequency(),
@relativeref{Audio::Context,monoSourceCount()},
@relativeref{Audio::Context,stereoSourceCount()} and
@relativeref{Audio::Context,refreshRate()} getters. These are now also
listed in the @ref magnum-al-info "magnum-al-info" utility, along with a
possibility to override them there.
@subsubsection changelog-latest-changes-debugtools DebugTools library
- @ref DebugTools::bufferData() and @ref DebugTools::bufferSubData() now
falls back to @ref GL::Buffer::subData() on desktop GL instead of always
relying on memory-mapping, and is now available on WebGL 2 as well (see
[mosra/magnum#560](https://github.com/mosra/magnum/pull/560))
- @ref DebugTools::CompareImage now supports comparing half-float pixel
formats as well, pixel format autodetection for pixel views tries to
match sRGB and normalization properties of the expected image format
- @ref DebugTools::CompareImage now accepts @ref MutableImageView2D as well,
in addition to @ref Image2D, @ref ImageView2D and @ref Trade::ImageData2D
- @ref DebugTools::textureSubImage() now checks that the framebuffer is
complete before attempting to read from it to avoid silent failures when
the texture format isn't framebuffer readable
@subsubsection changelog-latest-changes-gl GL library
- @ref GL::AbstractShaderProgram::draw(),
@relativeref{GL::AbstractShaderProgram,drawTransformFeedback()} and
@relativeref{GL::AbstractShaderProgram,dispatchCompute()} APIs now return
a reference to self and all subclasses in @ref Shaders return a subclass
reference from these. The functions used to @cpp void @ce as that made more
sense in the classic workflow where a large set of uniforms had to be set
prior to every draw, however with the new multidraw workflows that's no
longer the case and the inability to chain draw calls proved to be
annoying.
- Single-value @ref GL::AbstractShaderProgram::setUniform() calls now go
directly instead of through the pointer variant of @fn_gl{Uniform} APIs,
leading to less garbage generated on WebGL and circumventing certain driver
bugs (see [mosra/magnum#591](https://github.com/mosra/magnum/issues/591)
and [mosra/magnum#592](https://github.com/mosra/magnum/pull/592))
- Added an @ref GL::AbstractShaderProgram::setTransformFeedbackOutputs()
overload taking a @relativeref{Corrade,Containers::ArrayView} instead of
a @ref std::initializer_list
- Added @ref GL::Buffer::bind() and @ref GL::TransformFeedback::attachBuffers()
overloads taking a @relativeref{Corrade,Containers::ArrayView} instead of a
@ref std::initializer_list (see [mosra/magnum#588](https://github.com/mosra/magnum/pull/588))
- @ref GL::Buffer::data() and @ref GL::Buffer::subData() is now available on
WebGL 2.0 as well if Emscripten 2.0.17+ is used (see
[mosra/magnum#560](https://github.com/mosra/magnum/pull/560))
- The @ref GL::Context class got significantly optimized in terms of compile
time, header size and runtime as well, significantly reducing the amount of
allocations done at startup.
- Added @ref GL::Context::DetectedDriver::QualcommAdreno
- To make working with cube map images easier,
@ref GL::CubeMapTexture::setSubImage() and
@ref GL::CubeMapTexture::subImage() taking 3D images are now exposed on all
platforms, not just desktop OpenGL 4.5+, with a fall back to slice-by-slice
upload/download where needed. The compressed variant is still only GL 4.5+,
as that needs the @ref CompressedImageView APIs to be aware of compression
format properties, which isn't implemented yet.
- Added @ref GL::DefaultFramebuffer::mapForDraw(),
@ref GL::Framebuffer::mapForDraw(),
@ref GL::DefaultFramebuffer::invalidate() and
@ref GL::Framebuffer::invalidate() overloads taking a
@relativeref{Corrade,Containers::ArrayView} instead of a
@ref std::initializer_list
- Added @ref GL::Framebuffer::Status::IncompleteDimensions for ES2. This enum
isn't available on ES3 or desktop GL, but NVidia drivers are known to emit
it, which is why it got added.
- Intel/Windows-specific code for silencing useless shader compiler output is
now advertised as a @cpp "intel-windows-chatty-shader-compiler" @ce
workaround, instead of being done silently. See @ref opengl-workarounds for
more information.
- @ref Platform::WindowlessEglApplication "Platform::Windowless*Application"
instances no longer touch default framebuffer state in order to avoid
potential race conditions with a windowed context on another thread. This
is also exposed via a new @ref GL::Context::Configuration::Flag::Windowless
flag for integration with custom-created OpenGL contexts. See also
[mosra/magnum#493](https://github.com/mosra/magnum/pull/493) and
[mosra/magnum#494](https://github.com/mosra/magnum/pull/494).
- The @ref GL::defaultFramebuffer global now deduplicates its state when a
statically-built Magnum is linked to multiple shared libraries, following
what the global @ref GL::Context::current() already does
- Added @ref GL::Framebuffer::InvalidationAttachment::DepthStencil to
complement @relativeref{GL::Framebuffer::InvalidationAttachment,Depth} and
@relativeref{GL::Framebuffer::InvalidationAttachment,Stencil} (see
[mosra/magnum#554](https://github.com/mosra/magnum/pull/554))
- @ref GL::Renderer::Feature::DepthClamp is now exposed on OpenGL ES as well,
using the @gl_extension{EXT,depth_clamp} extension
- Added @ref GL::Shader::wrap() and @relativeref{GL::Shader,release()}
- @ref GL::Shader now adds defines for driver workarounds that affect shader
code. Until now this was done only internally for builtin shaders, now it's
done for all.
- New @ref MAGNUM_GL_ABSTRACTSHADERPROGRAM_SUBCLASS_DRAW_IMPLEMENTATION() and
@ref MAGNUM_GL_ABSTRACTSHADERPROGRAM_SUBCLASS_DISPATCH_IMPLEMENTATION()
macros for easier and more robust implementation of method chaining in
@ref GL::AbstractShaderProgram subclasses
- Recognizing @webgl_extension{OES,draw_buffers_indexed} and
@webgl_extension{WEBGL,clip_cull_distance} WebGL extensions that were
renamed from `EXT_draw_buffers_indexed` and `EXT_clip_cull_distance` in
March 2020 and January 2023. The old names are still recognized and present
in @ref GL::Extensions for compatibility with older browsers.
- Re-enabled @fn_gl{DrawRangeElements} for WebGL 2, this time hopefully for
the last time (see [mosra/magnum#97](https://github.com/mosra/magnum/issues/97))
- Added @ref GL::genericPixelFormat() and
@ref GL::genericCompressedPixelFormat() helpers for convenient mapping of
@ref GL::PixelFormat, @ref GL::PixelType, @ref GL::CompressedPixelFormat
and @ref GL::TextureFormat values back to the generic @ref PixelFormat and
@ref CompressedPixelFormat
@subsubsection changelog-latest-changes-math Math library
- Assertions in all @ref Math APIs except for batch functions in
@ref Magnum/Math/PackingBatch.h and @ref Magnum/Math/FunctionsBatch.h
were changed to debug-only for better performance in release builds
- Added @ref Math::BitVector::set(std::size_t) and
@ref Math::BitVector::reset(std::size_t) for branchless bit setting
- Added @ref Math::castInto() overloads for casting between @ref UnsignedByte
and @ref UnsignedShort or @ref Byte and @ref Short, from and to
@ref UnsignedLong / @ref Long, between integral types and @ref Double and
for casting between @ref Float and @ref Double
- @ref Math::RectangularMatrix is now explicitly convertible from matrices of
different sizes, with a possibility to specify whether to fill the diagonal
or leave it as zeros. This was originally available only on (square)
@ref Math::Matrix from other square matrices where it implicitly filled the
diagonal to an identity, but is now generalized for arbitrary rectangular
matrices, and with the default on @ref Math::RectangularMatrix being
zero-fill while @ref Math::Matrix stays with the identity for consistency
with other constructors.
- @ref Math::Bezier::data(), @ref Math::BitVector::data(),
@ref Math::Complex::data(), @ref Math::CubicHermite::data(),
@ref Math::Dual::data(), @ref Math::DualComplex::data(),
@ref Math::DualQuaternion::data(), @ref Math::Frustum::data(),
@ref Math::Quaternion::data(), @ref Math::Range::data(),
@ref Math::RectangularMatrix::data() and @ref Math::Vector::data() now
return a reference to a fixed-size array instead of a pointer (i.e.,
@cpp T(&)[size] @ce instead of @cpp T* @ce) for more convenient usage in
APIs that take sized views.
- Added @ref Math::Range::scaled() and @ref Math::Range::scaledFromCenter()
overloads taking a scalar
- Added a @ref Math::join(const Range<dimensions, T>&, const Vector<dimensions, T>&)
overload for joining a range and a point
@subsubsection changelog-latest-changes-meshtools MeshTools library
- @ref MeshTools::interleavedLayout(const Trade::MeshData&, UnsignedInt, Containers::ArrayView<const Trade::MeshAttributeData>, InterleaveFlags),
@ref MeshTools::interleave(const Trade::MeshData&, Containers::ArrayView<const Trade::MeshAttributeData>, InterleaveFlags) and
@ref MeshTools::concatenate(const Containers::Iterable<const Trade::MeshData>&, InterleaveFlags)
optionally take a @ref MeshTools::InterleaveFlags parameter affecting the
output, in particular whether to preserve the original interleaved layout.
- @ref MeshTools::concatenate() now allows concatenating an array attribute
into an array attribute with more elements. The remaining elements are
zero-filled, similarly to how missing attributes are handled. To avoid
accidents and data loss, concatenating a bigger array into a smaller one
isn't allowed. There's also a restriction that non-array attributes can't
be concatenated into arrays, even though they would fit.
- Support for new @ref Trade::MeshAttribute::JointIds and
@ref Trade::MeshAttribute::Weights in @ref MeshTools::compile() as well as
a new @ref MeshTools::compiledPerVertexJointCount() helper utility (see
also [mosra/magnum#444](https://github.com/mosra/magnum/pull/444))
- @ref MeshTools::generateLineStripIndices(),
@relativeref{MeshTools,generateLineLoopIndices()},
@relativeref{MeshTools,generateTriangleStripIndices()},
@relativeref{MeshTools,generateTriangleFanIndices()} and
@relativeref{MeshTools,generateIndices()} now allow empty input, producing
an empty index buffer as a result. Disallowing empty input was an
unnecessary restriction that was inconsistent with other APIs.
- Added overloads to @ref MeshTools::generateLineStripIndices(),
@relativeref{MeshTools,generateLineLoopIndices()},
@relativeref{MeshTools,generateTriangleStripIndices()} and
@relativeref{MeshTools,generateTriangleFanIndices()} that take an existing
index buffer instead of vertex count as an input to generate an index
buffer for a mesh that's already indexed.
@subsubsection changelog-latest-changes-platform Platform libraries
- Added a @ref Platform::GlfwApplication::setWindowIcon() overload taking a
@ref Corrade::Containers::ArrayView in addition to @ref std::initializer_list
- @ref Platform::GlfwApplication now properly uses
@ref MAGNUM_TARGET_EGL "EGL" on @ref MAGNUM_TARGET_GLES "GLES builds" (see
[mosra/magnum#470](https://github.com/mosra/magnum/pull/470))
- @ref Platform::GlfwApplication and @ref Platform::Sdl2Application can now
work with EGL on desktop GL as well if @ref MAGNUM_TARGET_EGL is enabled
- On Emscripten, @ref Platform::EmscriptenApplication used an internal
allocation function, which changed signature in 2.0.5 and caused runtime
failures when `-s ASSERTIONS` was enabled. A public stable API is now used
instead, see [mosra/magnum#483](https://github.com/mosra/magnum/pull/483).
- Not too long after the above, Emscripten 2.0.10 doesn't export `dynCall()`
anymore, which caused @ref Platform::EmscriptenApplication to fail at
runtime with an error about `dynCall()` not being defined. A workaround was
put in place that uses `dynCall()` internals, which should be present
always.
- Because hardcoding canvas size using
@ref Platform::EmscriptenApplication::Configuration::setSize() "Platform::Application::Configuration::setSize()"
on WebGL is usually a wrong thing to do, both
@ref Platform::EmscriptenApplication and @ref Platform::Sdl2Application now
notify about that in the verbose output (enabled with `?magnum-log=verbose`),
previously only autodetected canvas size got printed
- Added @ref Platform::WindowlessIosContext::glContext() for consistency with
other context classes
- Undefining even more noise from `Xlib.h` (see
[mosra/magnum#498](https://github.com/mosra/magnum/pull/498))
- Added @ref Platform::EmscriptenApplication::Configuration::addWindowFlags()
and @ref Platform::EmscriptenApplication::Configuration::clearWindowFlags()
for consistency with other application implementations
- Added @ref Platform::Sdl2Application::KeyEvent::Key::CapsLock,
@relativeref{Platform::Sdl2Application::KeyEvent::Key,ScrollLock},
@relativeref{Platform::Sdl2Application::KeyEvent::Key,NumLock},
@relativeref{Platform::Sdl2Application::KeyEvent::Key,PrintScreen},
@relativeref{Platform::Sdl2Application::KeyEvent::Key,Pause} and
@relativeref{Platform::Sdl2Application::KeyEvent::Key,Menu} for consistency
with @ref Platform::EmscriptenApplication and
@ref Platform::GlfwApplication (see [mosra/magnum#547](https://github.com/mosra/magnum/pull/547))
- @ref Platform::Sdl2Application now overrides SDL's default behavior that
prevents computer from entering a power-saving mode while the application
is running, as that's generally undesirable for regular GUI applications.
See @ref Platform-Sdl2Application-usage-power for more information.
- @ref Platform::GlfwApplication now overrides GLFW's default behavior that
changes current working directory to `Resources/` in the app bundle on
Apple platforms.
- @ref Platform::EmscriptenApplication, @ref Platform::GlfwApplication and
@ref Platform::Sdl2Application now explicitly query DPI scaling values each
time they're accessed, either directly or via the viewport event, instead
of always returning the initially queried / calculated value. This makes
the behavior consistent with framebuffer and window sizes that are also
queried every time, and fixes a case where changing global UI scaling
would trigger a viewport event but the event would still have the previous
UI scale. However note that this does not yet properly handle DPI change
events themselves, which happen for example when moving windows across
displays with different DPI.
@subsubsection changelog-latest-changes-scenegraph SceneGraph library
- @ref SceneGraph trees are now destructed in a way that preserves
@ref SceneGraph::Object::parent() links up to the root as well as
@ref SceneGraph::AbstractFeature::object() references
@subsubsection changelog-latest-changes-scenetools SceneTools library
- Added a `--bounds` option to @ref magnum-sceneconverter "magnum-sceneconverter",
showing data ranges of known attributes
- @ref magnum-sceneconverter "magnum-sceneconverter" now has separate
`--info-animations`, `--info-images`, `--info-lights`, `--info-cameras`,
`--info-materials`, `--info-meshes`, `--info-skins` and `--info-textures`
for printing information just about particular data type, with `--info`
being a shortcut for all specified together
- Added a `--object-hierarchy` option to @ref magnum-sceneconverter "magnum-sceneconverter"
that visualizes scene hierarchy in each scene by indenting object info
- Added a `--prefer` option to @ref magnum-sceneconverter "magnum-sceneconverter",
allowing to specify what plugins should be preferred for particular import
and conversion plugin aliases
- Added a `--set` option to @ref magnum-sceneconverter "magnum-sceneconverter",
allowing to set configuration options to arbitrary plugins
@subsubsection changelog-latest-changes-shaders Shaders library
- In the original implementation of normal mapping in @ref Shaders::PhongGL,
there shader didn't provide a way to supply bitangent direction, forcing
users to patch normal maps. This is now possible using newly added
@ref Shaders::PhongGL::Tangent4, @ref Shaders::PhongGL::Bitangent
attributes and a @ref Shaders::PhongGL::Flag::Bitangent flag, implementing
support for both four-component tangents (used by glTF, for example) and
separate tangent and bitangent direction (used by Assimp).
- Added missing @ref Shaders::MeshVisualizerGL3D::setObjectId() "Shaders::MeshVisualizerGL*D::setObjectId()"
and a corresponding @ref Shaders::MeshVisualizerDrawUniform3D::objectId
"Shaders::MeshVisualizerDrawUniform*D::objectId"
member for UBO workflows. Originally the uniform wasn't present with the
assumption that users could easily adjust color map offset to achieve the
same effect. That was however unnecessarily annoying and error-prone in
cases where it's essential to have the same object IDs from multiple
draws have a matching color, and it was complicating multidraw workflows as
the color map offset was not a part of per-draw data, but rather material
data.
@subsubsection changelog-latest-changes-text Text library
- Added @ref Text::AbstractFont::glyphCount() and
@relativeref{Text::AbstractFont,glyphSize()}
- Added @ref Text::Renderer::fontSize()
- @ref Text::Alignment now has separate values for alignment based on font
metrics and cursor position alone, which is the more commonly expected
behavior, and `*GlyphBounds` values that align based on actual glyph
bounds. There's a set of new `Bottom*` values that were for some reason
missing before, and @ref Text::Alignment::TopCenterIntegral, which is also
needed in order to prevent aligning pixel-perfect fonts to fractional
positions.
- Added a @ref Text::GlyphCache::GlyphCache(NoCreateT) and
@ref Text::DistanceFieldGlyphCache::DistanceFieldGlyphCache(NoCreateT)
constructor allowing to construct the object without a GL context present
@subsubsection changelog-latest-changes-texturetools TextureTools library
- Added a @ref TextureTools::DistanceField::DistanceField(NoCreateT)
constructor allowing to construct the object without a GL context present
@subsubsection changelog-latest-changes-trade Trade library
- A changed signature of the @ref Trade::AbstractImporter::doOpenData(Containers::Array<char>&&, DataFlags)
function and a new @ref Trade::DataFlag::ExternallyOwned flag that allows
importers to reason about ownership of passed data instead of being forced
to allocate a local copy, saving as much as half memory in certain
importer implementations
- New @ref Trade::DataFlag::Global flag to annotate data referencing global
memory, such as @ref Primitives::cubeSolid()
- @ref Trade::AbstractImageConverter::doConvertToFile() and
@ref Trade::AbstractSceneConverter::doConvertToFile() are now
@cpp protected @ce instead of @cpp private @ce to allow calling them from
plugin implementations and reuse the provided fallback to
@relativeref{Trade::AbstractImageConverter,doConvertToData()}, for example
when the implementation only neeeds to do a format detection based on file
extension
- New @ref Trade::AbstractImageConverter::extension() and
@relativeref{Trade::AbstractImageConverter,mimeType()} interfaces to get
a file extension and MIME type corresponding to a file format produced by
a particular plugin.
- Recognizing BMP and TIFF file header magic in @relativeref{Trade,AnyImageImporter}
- Recognizing ASTC and WebP files and data in
@relativeref{Trade,AnyImageImporter}
- Recognizing KTX2 files and data in @relativeref{Trade,AnyImageImporter} and
@relativeref{Trade,AnyImageConverter} (see also
[mosra/magnum#529](https://github.com/mosra/magnum/pull/529))
- Recognizing KTX2 for (compressed) 1D/2D/3D and multi-level 1D/2D/3D images
in @relativeref{Trade,AnyImageConverter}
- Recognizing glTF files in @relativeref{Trade,AnySceneConverter}
- Recognizing 3MF files in @relativeref{Trade,AnySceneImporter}
- Recognizing OpenVBD files in @relativeref{Trade,AnyImageImporter} and
@relativeref{Trade,AnyImageConverter}
- @ref Audio::AnyImporter "AnyAudioImporter",
@relativeref{Trade,AnyImageImporter}, @relativeref{Trade,AnyImageConverter},
@relativeref{Trade,AnySceneImporter}, @relativeref{Trade,AnySceneConverter}
and @ref ShaderTools::AnyConverter "AnyShaderConverter" are now capable of
propagating configuration options to the concrete plugin, which is useful
mainly when using @ref magnum-imageconverter and other utilities as you can
now specify just the `-i` / `-c` options without having to specify which
plugin to apply the option to with `-I` / `-C`. For better usability, the
plugins also warn if the user specifies and option that is not present in
the target implementation.
- @relativeref{Trade,AnyImageImporter} and
@relativeref{Trade,AnySceneImporter} now can propagate also file callbacks
to the concrete plugin.
- @relativeref{Trade,AnyImageConverter} now implements also conversion of 3D
and multi-level 2D/3D images for formats that support it (such as Basis
Universal or OpenEXR)
- Added @ref Trade::PhongMaterialData::hasCommonTextureTransformation(),
@ref Trade::PhongMaterialData::ambientTextureMatrix(),
@ref Trade::PhongMaterialData::diffuseTextureMatrix(),
@ref Trade::PhongMaterialData::specularTextureMatrix() and
@ref Trade::PhongMaterialData::normalTextureMatrix() exposing also
per-texture coordinate transformation, similarly to per-texture coordinate
sets added in 2020.06
- Added @ref Trade::PhongMaterialData::hasCommonTextureCoordinates() and
@ref Trade::PhongMaterialData::commonTextureCoordinates() exposing a
common texture coordinate set as a complement to a per-texture property
added in 2020.06
- @ref Trade::MeshData now allows strided index buffers and zero and negative
attribute strides for better data layout flexibility. This is however not
commonly supported by GPU APIs and tools like @ref MeshTools::compile()
assert in that case.
- @ref Trade::MeshData now allows array attributes to have
implementation-specific vertex formats as well. The restriction didn't make
sense, as there was nothing in the design preventing them from being used.
- @ref Trade::MeshData can now store morph target attributes next to the
base attributes, they're then accessed using a concrete morph target ID in
name-based lookup APIs
- Added @ref Trade::MeshData::findAttributeId() for an ability to check that
an attribute exists and retrieve its ID in a single step, avoiding a double
lookup compared to @relativeref{Trade::MeshData,hasAttribute()} +
@relativeref{Trade::MeshData,attributeId()}. This also makes the API
consistent with @ref Trade::SceneData::findFieldId().
- Added @ref Trade::MeshData::attributeId() that returns ID of an attribute
in a set of attributes of the same name
- Added @ref Trade::TextureType::Texture1DArray,
@relativeref{Trade::TextureType,Texture2DArray} and
@relativeref{Trade::TextureType,CubeMapArray} in order to be able to
distinguish what's the intended texture use, e.g. whether it's a 3D texture
with filtering along Z or if it's a 2D array with discrete slices.
- @relativeref{Trade,TgaImporter} now recognizes and skips TGA 2 file footers
instead of treating them as actual image data
- @relativeref{Trade,TgaImageConverter} now implements RLE for smaller output
size
- @ref magnum-imageconverter "magnum-imageconverter" has a new `--in-place`
option for converting images in-place
- In order to reduce the amount of exported symbols, a single no-op
@relativeref{Corrade,Containers::Array} deleter function was used for
various types via a @cpp reinterpret_cast @ce. But in an effort to be
UBSan-clean, this is no longer done. See also [mosra/magnum#531](https://github.com/mosra/magnum/issues/531).
@subsection changelog-latest-buildsystem Build system
- The oldest supported Clang version is now 6.0 (available on Ubuntu 18.04),
or equivalently Apple Clang 10.0 (Xcode 10). Oldest supported GCC version
is still 4.8.
- Fixed compilation of the @ref GL library on macOS with ANGLE --- new code
assumed macOS is always desktop GL (see [mosra/magnum#452](https://github.com/mosra/magnum/issues/452))
- Avoiding conflicts of Magnum's own GL headers with `GLES3/gl32.h` (see
[mosra/magnum#460](https://github.com/mosra/magnum/issues/460))
- The `version.h` header now gets populated from Git correctly also when
inside a CMake subproject
- Suppressed a warning specific to MinGW GCC 8+ (see
[mosra/magnum#474](https://github.com/mosra/magnum/issues/474))
- Attempted a switch of Emscripten build on Travis CI from macOS to Ubuntu +
Docker for 2x faster build times in a futile attempt to not use the
extremely expensive features of a no-longer-free service. Ultimately,
Travis banned everyone from using their CI and so all Linux, macOS,
Emscripten, Android and iOS builds were migrated from Travis to Circle CI,
together with adding also an explicit ARM64 build and an ability to test
GLES and Vulkan functionality on Android. See
[mosra/magnum#350](https://github.com/mosra/magnum/issues/350) and
[mosra/magnum#523](https://github.com/mosra/magnum/issues/523).
- `UseEmscripten` is no longer implicitly included on Emscripten as it's not
needed for anything (see [mosra/magnum#490](https://github.com/mosra/magnum/issues/490))
- Fixed an assertion in @relativeref{Trade,AnySceneImporter} when
@relativeref{Trade::AbstractImporter,meshAttributeName()} or
@relativeref{Trade::AbstractImporter,meshAttributeForName()} was called
without a file opened
- @ref Trade::ObjImporter "ObjImporter" uses exceptions internally and needs
an explicit exception-enabling flag when built with Emscripten 1.39.0 and
newer
- It's now possible to use `<PackageName>_ROOT` to point to install locations
of dependencies such as Corrade on CMake 3.12+, in addition to putting them
all together inside `CMAKE_PREFIX_PATH`. See also [mosra/magnum#614](https://github.com/mosra/magnum/issues/614).
- On CMake 3.16 and newer, `FindMagnum.cmake` can provide additional details
if some component is not found.
- The Homebrew package now uses `std_cmake_args` instead of hardcoded build
type and install prefix, which resolves certain build issues (see
[mosra/homebrew-magnum#6](https://github.com/mosra/homebrew-magnum/pull/6))
- Various changes to Vcpkg packages to account for newly added libraries and
plugin interfaces ([mosra/magnum#485](https://github.com/mosra/magnum/issues/485))
- The `FindSDL2.cmake` module was updated to allow using SDL2 as a
subproject. See the @ref Platform-Sdl2Application-usage "Platform::Sdl2Application docs"
for more information. See also [mosra/magnum#496](https://github.com/mosra/magnum/issues/496).
- With CMake 3.20 and newer it's possible to compile for Android NDK r19+
without explicitly supplying various system paths. Additionally, when `CMAKE_INSTALL_PREFIX` points to Android NDK sysroot, the `LIB_SUFFIX`
gets autodetected to a correct triplet + API level version subdirectory,
making the installed project discoverable by both vanilla CMake and Gradle.
On CMake 3.16 to 3.19 it's required to set two extra variables for the
same effect. See @ref building-cross-android, @ref platforms-android and
[mosra/magnum#310](https://github.com/mosra/magnum/issues/310) for more
information.
- Suppressing a CMake policy-related warning if the global `CMAKE_AUTOMOC` is
set on CMake 3.10+ (see [mosra/magnum#504](https://github.com/mosra/magnum/pull/504))
- Updated Debian build instructions to pass `--no-sign` to
`dpkg-buildpackage`, avoiding a confusing error message that might lead
people to think the packaging failed (see [mosra/magnum-plugins#105](https://github.com/mosra/magnum-plugins/issues/105))
- Due to STL removal in @ref Corrade::PluginManager, deprecated APIs in
@ref Trade library that use @ref std::string stopped compiling on MSVC as
there was no remaining transitive @cpp #include <string> @ce left (see
[mosra/magnum#556](https://github.com/mosra/magnum/pull/556))
- Changed handling of `CMAKE_*_OUTPUT_DIRECTORY` to make plugins pick it up
also if only e.g. `CMAKE_RUNTIME_OUTPUT_DIRECTORY` is set, but not
`ARCHIVE` or `LIBRARY_OUTPUT_DIRECTORY`. Similarly it now also handles
config-specific `CMAKE_*_OUTPUT_DIRECTORY_<CONFIG>` variables. See