WHELM Mac OS
Whelm gives you a simple 1-9 scale to rate your under/over-whelmedness, or for those places that whelmed you just right, there's a spot right in the middle. Wemo app free download - Wemo, WeMo, WeMo, and many more programs. View all Mac apps. Popular Android Apps TubeMate 3. XXX Video Player - HD X Player. Diablo II will work on OS X EL Captain, but it is best to check whether the Mac OS you are using is compatible with the game before downloading the installer for Mac.
When looking at the changelog for the latest version, it’s hard to believe thatonly six months passed since the last release, 2018.04.The list is — as usual — very long, so I’m only cherry-picking the mostinteresting bits. Scroll way down for the full detailed change lists.
Whelm Mac Os X
Animation import and playback
This long-awaited feature finally managed to rise to the top of the prioritylist and so the new release contains a brand-new Animation namespace.Some design ideas are borrowed from Ozz-Animation,with one end goal being high-performance playback of animations imported fromglTF files (with other formats cominglater). The other goal is being able to quickly iterate on hand-craftedanimations of arbitrary values when writing a gameplay or UI transitions.
The animation library supports interleaved or separate keyframe data forcache-optimized data access; float
s, std::chrono, frame index(or just anything) for representing time, and yes, you can also animatestrings, enum values, bool
s or even the state of another animation —and why not animating a time value to make the playback non-linear! There’s aset of builtin interpolation modes —constant, linear, spherical linear and spline-based; but you can also supplyyour own interpolator function if you need some ease-in/ease-out, or, forexample, unpack a quaternion from a 10–10–10–2 representation first.
At the moment the Animation library is marked as experimentalas its API is not set in stone yet. There’s a lot to explain, so stay tuned fordetailed introductory blogposts (and examples) for all features. For a briefoverview, check the Animation::Track and Animation::Player classdocs.
Animation import is done through the new Trade::AnimationData class andat the moment the Trade::AbstractImporter interfaces handle just basicobject transformation. Skinning and morphing will need some more-or-lessbreaking changes to some Trade APIs and so these features are scheduledfor next releases. Along with that, the goal for the Trade library isallowing zero-copy asset import — for example playing back an animationdirectly from a memory-mapped glTF file, with no data copies in between. Seemosra/magnum#240 for further work in this area.
The fun barely started!
I had to stop adding new features because the release would otherwise nevermake it out. There’s already more in the buffer — builtin easingfunctions, interpolator chaining and more. See mosra/magnum#101help wanted for details. There’s lot of small andself-contained things to work on, so if you feel brave and want to help,let us know!
Magnum Player
While the Animation API itself doesn’t have any dedicated example yet,there’s now a new app, Magnum Player, that can play back a scene fileyou throw at it. The final goal for this app will be showcasing the full Magnumfeature set — debugging and introspection tools, material tweaking etc. Checkout the online version below — it supports multi-file drag&drop, so simplydrop a glTF file on it to play it. If you don’t have any glTF file handy,there’s the official Khronos glTF sample model repositoryon GitHub. Sketchfab also has 1000s of modelsdownloadable as glTF.
Initial work on the Vulkan backend
After the hard work of removing mandatory OpenGL dependency was done in2018.04, Magnum is slowly gaining bits and pieces needed for Vulkan support. InJune I took over a maintainership of flextGL and addedVulkan support to it. Shortly after, Magnum gained a Vk library thatprovides platform-independent function pointer loading. It gives you a choicewhether you want global function pointers (like with OpenGL) or manage themlocally. See the original post about flextGLfor details.
The Vk library also provides conversion of generic PixelFormat,SamplerFilter, MeshPrimitive, … enums to Vulkan-specificVkFormat, VkFilter, VkPrimitiveTopology, … values.That allows you to use Magnum asset management APIs to load image and scenedata and use them directly without time-consuming manual format conversion.There is also a new example focused on rendering a simple triangle to anoffscreen buffer using a handcrafted SPIR-V shader and then saving it as a PNGusing the Magnum PngImageConverter plugin.
There will be more
Further additions like shader/SPIR-V tools, device/instance abstractionsand initial pieces of the Vulkan backend are scheduled for next releases.Subscribe to mosra/magnum#234 for updates.
HiDPI support
Long gone are the days of a standard 1024×768 resolution and fixed 96 DPI— dense screens are now a common feature for higher-end laptops and desktops.In the 2018.10 release, Magnum is DPI-aware on macOS, iOS, Linux andEmscripten. The usability goal is that requesting an 800×600 window willmake it the same physical size as an 800×600 window would have on a 96DPI screen — so basically with no extra involvement from the user. For weband mobile, Magnum simply ensures that for given canvas / screen size you’llget all the pixels that are there, with no scaling on top. If you have a HiDPIscreen, check out the WebGL demos on the Showcasepage — everything should be nicely crisp. This topic is way more complex thanit might seem, see DPI awareness for a detailed overviewof DPI-awareness on all platforms and what that means for you as a developer.
Unfortunately out-of-the-box Windows support didn’t make it to the release(though you are able to force arbitrary scaling with a --magnum-dpi-scaling
parameter). Full Android support and advanced things like DPI change eventswhen dragging a window across differently dense monitors are also waiting to bedone, see mosra/magnum#243help wanted for details.
Math goodies
Introduction of the Animation library required quite a few additions tothe Math library — there’s a new Math::CubicHermite class forCubic Hermite splines. As a generic base for TCB curves and Catmull-Rom splinesthey are easily convertible to and from Math::Bezier.
Cubic spline interpolation is henceforth referred to as splerp
— Thew (@AmazingThew) December 24, 2016And because spline storage is useless on its own, the zoo of interpolationfunctions got extended with Math::splerp() variants. Besides that, theexisting Math::lerp() was extended to allow linear interpolation ofMath::CubicHermite points, if you ever need that, and there’s a newMath::select() utility that does constant interpolation of all existingmath types. And also strings, enums or booleans. See thefull list in the documentation. There’salso a recent blog post aboutneglected optimization opportunities in quaternion interpolation.
As a side-product of Squareys’ bachelor thesis,Magnum gained a large collection of cone intersection functions in theMath::Intersection namespace. The Math::Range class gotintersection methods as well, along with other niceties.
Many projects either use or interface with the GLMlibrary and so it made sense to be interoperable with it. Simply include one ofthe headers in the GlmIntegration library and you’ll get conversion ofall vector, matrix and quaternion types and also an ability to print the GLMtypes using Utility::Debug:
Listing all the additions to Math library would be beyond overwhelming, jumpto the complete changelog for the rest.
Little big details
Yes, it’s now possible to get a GL::Mesh directly fromTrade::MeshDatawith a single click —just use the brand new MeshTools::compile() reimplementation and it’lldrag all GL::Buffer instances along with itself, without you needing tomanage them. Of course there are flexibility tradeoffs, so when using the meshAPIs directly, you have the option of GL::Mesh::addVertexBuffer() eithertaking a non-owning reference to the buffer or fully taking over its ownership.
There’s a new Containers::ScopedExit class that simply calls a passedexit / close / destroy function on given value at the end of scope. Very usefulwhen interacting with low-level C APIs and much easier than wrestling withstd::unique_ptr, trying to convince it to do the same.
If you ever need to iterate on a array of interleaved values and take alwaysthe third value, there’s now Containers::StridedArrayView that abstractsit away. It’s used internally by the Animation::TrackView APIs to allowfor both flexible and cache-efficient layout of keyframe data.
There’s a new Utility::format() family offunctions for Python-style type-safe string formatting. The reason I’m addingthis is because std::ostream (and to some extent printf())is notoriously inefficient, negatively affecting executable size especially onasm.js / WebAssembly targets. However the full implementation didn’t make itinto the release, only the surface APIs, Magnum is not ported away from streamsjust yet — there will be a detailed post about all this later 😉
More of an internal thing, the DebugTools::CompareImage utility got aCompareImageToFile counterpart,together with other combinations. In subsequent updates, these will get usedfor fuzzy shader output verification — very important for implementing PBRshaders that are later on the roadmap.
Prototyping
Shown above is a new Primitives::gradient2D() function (together withits 3D counterpart), useful for simple backdrops. The Shaders::Phongshader got a long-requested support for multiple lights and there’s now alphamasking support in both Shaders::Phong and Shaders::Flat —useful for quick’n’dirty prototyping when you don’t want to bother yourselfwith depth sorting or OIT.
Asset management improvements
Since the TinyGltfImporter plugin initialrelease in 2018.04, it’s receiving an endless stream of updates. While thebiggest new feature is animation import, it also received support formulti-primitive meshes, name mapping for all data, camera aspect ratio importand various conformance fixes and performance improvements. It’s now easier toaccess its internal state, in case youwant to parse custom glTF properties or access data that the importer does notsupport yet.
To support loading data from memory, from AAssetManager
on Android orfor example voa drag&drop on Emscripten, all scene and image importers nowsupport file loading callbacks.For you it means you can continue loading assets as usual — using theirfilenames — and only set up a different file callback for each platform. Theimplementation was done in a way that makes all existing (and future) pluginsimplicitly work with file callbacks, moreover theTinyGltfImporter,AssimpImporter andOpenGexImporter also use provided filecallbacks for external data referenced from scene files (such as images or databuffers).
There’s finally a JpegImageConverter pluginfor compressing JPEG files, using a libJPEG implementation of your choice —be it the vanilla implementation, libjpeg-turboor, for example, MozJPEG. Similarly, thestb_image-based StbImageConvertergot updated to support JPEG output as well — and you can load either of themusing the JpegImageConverter
alias. Both plugins support specifying theoutput quality via a runtime setting; more encoding options may be added in thefuture.
Among other things, the StbTrueTypeFont wasupdated to a new version of stb_truetype
, gaining OTF support, and you cannow load it (along with the other HarfBuzzFont andFreeTypeFont implementations) via the genericOpenTypeFont
alias.
There’s always something to improve in the docs
If you happen to be using Magnum with a buildsystem other than CMake, there’snow a high-level guide, pointing out the biggestpain points. The Math::Matrix4 and Matrix3 docsare improved with equations visualizing most operations; theMath::Intersection and Math::Distance functions andMath::Constants got updated equations as well.
Whelm Mac Os Download
The Using the scene graph guide now has a visual intro, explaining the basicconcepts; the JavaScript, HTML5 and WebGL and Android guideswere extended with further tips and troubleshooting items. Oh, and theShaders and Primitives docs now have images that look properlycrisp on HiDPi screens.
Not all roads led to Rome
Magnum is now over eight years old and it became apparent that some earlyfunctionality didn’t stand the test of time — either because it depended ona now-outdated toolkit, because the required time investment for continuedmaintenance was not worth it or simply because it was a design experiment thatfailed. The following libraries are now marked as deprecated, are not built bydefault (in case they ever were) and will be completely removed in about sixmonths time.
The
Shapes
obsolete library, together withDebugTools::ShapeRenderer
obsolete and theBulletIntegration::convertShape()
obsolete function.Failed design experiment that couldn’t ever be made performant (and abusing%
operators for collision queries was just plain wrong).Related geometry algorithms were moved to Math::Distance andMath::Intersection namespaces. If you need a full-fledged physicslibrary, please have look at Bullet, whichhas Magnum integration in BulletIntegration (together with debugdraw implemented in BulletIntegration::DebugDraw), or atBox2D, which has a Magnum exampleas well.
The
Platform::GlutApplication
obsolete application. It’sbased on an outdated GLUT toolkit, has portability issues and doesn’t makesense on the path forward to Vulkan. Consider switching to eitherPlatform::Sdl2Application or Platform::GlfwApplication.The
ColladaImporter
obsolete plugin, because it’s based onan outdated Qt4 toolkit. Moreover, due to the sheer complexity of theCOLLADA format and poor conformance of various exporters it’s not feasibleto maintain a builtin importer anymore. Consider either usingAssimpImporter for COLLADA import orswitching to better-designed and better-supported formats such as glTF orOpenGEX using TinyGltfImporter orOpenGexImporter. There’s also the officialCOLLADA2GLTF converter.
Visual Studio 2017
With a heavy heart I have to say that recent updates of MSVC 2017 wereregressing instead of improving with their C++11 conformance, crashing withInternal Compiler Error on code involving constexpr
. While wemanaged to reproduce and work around all reported issues so far, it mayhappen that your code triggers some new corner case. Try to update to thelatest version first and if the problem persists,let us know. Thank you and sorry for the bumps.
Note that MSVC 2015 is not affected by these.
New examples
Two new examples were contributed by our great community, namely an integrationof the Box2D physics engine and an advanced depth-aware mouse interactionexample. Both are ported to WebGL and you can play with them right now:
HTTPS 🔒
The Magnum website is never storing any cookies or doing user tracking (anddoesn’t plan to be doing that), so there’s no need to be worried about yourdata being compromised. Nevertheless, it’s now served over HTTPS, with acertificate from Let’s Encrypt. Some tradeoffswere made as it’s either full security or supporting the not-most-recentbrowsers (but not both), so if you experience any issues, please let us know.
Sometimes ahard kickis all it takes to get things done.
Contributions welcome
Magnum is now partnering with a few universities with a goal of improvingcomputer graphics courses by offering students things that are fun to playwith. You’re invited to the party as well — each GitHub repositorynow has issues marked with a help wanted label and theseissues are specifically picked to be self-contained, excercise a well-definedarea of knowledge and to not require deep understanding of Magnum internals.The most rewarding among these are various examples, you can also implement afancy algorithm, integrate support for a new file format or share yourexpertise in an area you know the best. If you pick something, let us knowand we’ll help you get on the right path.
There’s also a possibility to write a guest postfor this very blog and share interesting details about a Magnum-related thingyou’re working on.
Upgrading from previous versions
In contrast to 2018.04, this release is more of an evolutional one.Nevertheless, even though we’re always going to extreme lengths to preservebackwards compatibility, it may happen that some changes will have negativeaffect on your code. Please check the Deprecated APIs and Potentialcompatibility issues sections in the complete changelog below for moreinformation.
Thanks to @matjam there’s now aPPA repositorycontaining prebuilt packages for Ubuntu 14.04, 16.04 and 18.04. If you followthe #movingtogitlab movement,Magnum now has a mirror on GitLab, butnote that primary development, roadmap and milestone planning is stillhappening on GitHub and will stay there for the foreseeable future.
The 2018.10 release is already available in Homebrewand ArchLinux AUR. At thetime of writing, the PPA repository, Vcpkg andArchLinux repos are not updated yet, we’reworking on getting the latest version there as well.
Complete changelog
It’s longer than you might expect 😉
Special thanks
Lots of work in this release is done thanks to external contributors:
- Jonathan Hale (@Squareys) — tireless maintenance of all thingsVR, intersection algorithms, glTF, OpenGEX, Assimp importer updates andVcpkg expertise
- @scturtle — the Mouse Interaction example
- Michal Mikula — the Box2D example
- Nathan Ollerenshaw (@matjam) — Ubuntu PPA repository maintenance
- Alexander F Rødseth (@xyproto) — continued ArchLinux
[community]
package maintenance - Patrick Werner (@boonto) — Android port of theModel Viewer example
- Ivan P. (@uzername) — ongoing effort with improving thedocumentation and making the library more approachable for newcomers
Again thanks a lot to everyone, not to forget all people who reported issues,suggested improvements or just wrote encouraging messages on theGitter chat. Cheers!
Discussion: Twitter,Reddit r/cpp,r/gamedev,r/gltf,Hacker News,mailing list