From Apple PresentationApple has updated documentation for developers. The
“What's New?” Section is dedicated to the key changes in macOS 10.14: this is Dark Mode's dark color scheme, Create ML new technology for creating and training neural networks on Mac, updated Mac App Store with new programming interfaces for ratings and reviews (under macOS 10.14 SDK) The new Network Framework, which provides direct access to TLS, TCP and UDP network protocols from applications, the Natural Language framework for analyzing natural speech and isolating language-specific metadata for a specific language (the framework can be used in conjunction with Create ML when training neural networks).
But the most interesting thing is hidden in the basement, namely in the section “Deprecations and Removed APIs”. It mentions the rejection of the "obsolete" technologies of OpenGL and OpenCL. These technologies are given a "black mark", that is, Apple strongly discourages using OpenGL and OpenCL in the development of new products.
"Periodically, Apple adds obsolescence macros to the API to indicate that these APIs should no longer be used in active development," the documentation says. - When obsolescence occurs, this does not mean an immediate end to the life of the specified software interfaces. This means the beginning of the transition period (grace) for the transition from these APIs to a newer and more up-to-date alternative that comes to replace. ”
Apple notes that outdated APIs usually remain in the system and can be used for a “reasonable time” after release, when they are declared obsolete. However, active development on them stops, and the API receives only minor security updates or other critical errors. Developers warn that
obsolete APIs can be completely removed from a future version of the operating system .
Apple recommends that you get rid of obsolete APIs in your code as soon as possible. At a minimum, the new code should in no case use OpenGL and OpenCL. And if these interfaces are used by some old code, then it should be replaced as quickly as possible.
Alternative: Metal
Applications created using OpenGL and OpenCL will continue to work in macOS 10.14, but these are already outdated technologies. “Games and graphics applications using OpenGL should now use Metal. Similarly, applications using OpenCL for computational tasks must now use Metal and Metal Performance Shaders. ”
Metal - new software interfaces developed from scratch, lacking backward compatibility. According to Apple, they provide better access to modern graphics processors on iOS, macOS, as well as tvOS devices: “Metal allows you to avoid the overheads of older technologies and introduces the latest graphics processing features. Metal’s unified graphics support and computing enables applications to leverage the latest visualization technologies. For information on developing applications and games using Metal, see the
Metal ,
Metal Performance Shaders and
MetalKit developer documentation. ”
Information on the migration of OpenGL code to Metal is published in the article
Mixing Metal and OpenGL Rendering in a View .
The developers at Hacker News are
skeptical about Apple's actions. In general, the consensus is this: this company either really hates computer games, or suffers severely from the
development syndrome of someone else's (NIH-syndrome). This is a position in social, corporate or organizational cultures that avoids the use of third-party developments for various reasons: fear of patent infringement, lack of understanding of someone else’s work, unwillingness to recognize or appreciate the work of others, jealousy or as part of a wider “war for territory”. Allegedly, Metal technology confirms the presence of NIH syndrome.
Commentators also remind that because of the careless support of OpenGL, the Elite Dangerous for Mac project recently
had to be closed .
On the other hand, today most games are created on Unity3D, Unreal Engine and other engines that support Metal. Well, whoever invested time and money in development for OpenGL / OpenCL - he himself is to blame.