What is difference between ANGLE and Skia Graphics Engine? - graphics

ANGLE is an cross-platform graphics engine abstraction layer
developed by Google. ANGLE team has described it as a portable
OpenGL. The API is mainly designed to bring high-performance
OpenGL compatibility to Windows computers and to web
browsers such as Chromium/Google Chrome by translating OpenGL
calls to Direct3D, which has much better driver support.
Skia Graphics Engine is a graphics library written in C++
which abstracts away platform-specific graphics API.
Both are abstraction layer developed by Google to support openGL and both are getting used in Google Chrome.
What exactly is difference between both?

Some context first.
OpenGL is an API to program graphics cards. The API calls to OpenGL get translated into commands for the GPU card in the computer, by the driver of the GPU vendor (usually Nvidia, AMD or Intel).
(other APIs to program GPUs are Direct3D on Windows, Metal on macOS, Vulkan, etc.)
These APIs are somewhat "low-level", in the sense that they give calls to instruct the GPU what to do at a raw "geometry"/"pixels" level; these APIs don't have anything like "draw a rectangle here", or "draw this image there".
Web browsers like Chrome provide the WebGL API for HTML5 pages. WebGL is mostly the OpenGL ES 2.0 API.
ANGLE is a library that converts the OpenGL ES 2.0 API to one of the GPU APIs: you make OpenGL ES 2 calls and ANGLE converts to equivalent calls in desktop OpenGL, or to Direct3D on Windows, or to Metal on macOS.
This gives you a consistent implementation of OpenGL ES 2.0, which Chrome wants for the web. (This is super useful because the Windows OpenGL implementations differ from vendor to vendor, and macOS stopped updating its OpenGL implementation at version 4.1 a long time ago).
Skia is a higher level API that lets you "draw a rectangle here" and "draw this image there" and much more (draw text; draw paths; draw curves; etc.) This is the usual high-level API that you'd get in higher level languages, and on the Web Canvas API.
To implement those calls, Skia converts the drawing commands to lower-level APIs like GL, Metal, etc. One of the APIs that Skia can target is ANGLE, so that Skia drawings get consistent output across platforms.

Related

Window Manager with transparency X11 / Wayland

I have a specialized display device, which provides an RGBA video sink (meaning: with alpha channel) via the DRM driver interface. I want to run a window manager and a windowed application with transparency (meaning: desktop background is transparent, application can also have transparent areas).
Which window managers support transparency all the way down to the DRM device (can be X11, Wayland, or others...)?
From my own research: Wayland basically supports RGBA but not weston(?), X11 does not support RGBA, however Xrenderlib does - but which desktop supports it?
Thanks and have a great day!

Cross platform bluetooth development solutions

I made a little heart rate monitor app with Unity, but trying to ship it to Windows, the bluetooth part isn't cross platform.
Are there existing cross platform (mac/windows, linux too would be nice but not a dealbreaker) bluetooth solutions?
Unfortunately there isn't a "pure" cross-platform solution where you can write one application that works across multiple platforms. This is because the underlying stack for different OSes/platforms is different because the hardware is different for them. The closest thing to a cross-platform solution might be Xamarin as theoretically you can write an application that works for Android/iOS/Windows. Have a look at the links below:-
Developing Cross-platform BLE Apps
ble.net: cross platform BLE library
BLE on Xamarin Cross-platform
The smart BLE Guide: Add BLE to your app with Qt and Flego

What is Kinect + Linux being used for?

An article on Hackaday piqued my curiosity, and I see Kinect + Linux questions being asked here (mostly about configuration), so I'll venture this question:
It is clear to me that Kinect can be used together with Linux on a "regular pc" -- but I can't help wondering why, that is, what might you actually use this for?
I don't suppose people really like the human/computer interface presented in movies such as "Minority Report" -- surely, nobody is actually doing text editing, coding, or business data processing by "hand-waving". So besides just games & exercises, what are examples of actual, real-world, useful (ie. 'professional') applications of such a setup?
For instance, can it be used for 3D scanning of real-world objects to obtain digital models? What sort of accuracy would such a scan yield?
The Kinect can be used for a wide variety of useful applications. I'm not sure if you are asking specifically about Linux or if Windows ("regular PC") is acceptable, but I'll provide you with some examples that come to mind.
For Linux specifically, it is likely that applications on Linux are using the sensor's raw sensor data only, rather the skeletal tracking feature. Many Kinect applications are on Windows because Microsoft's Kinect SDK is available only on Windows, and it provides the best skeletal tracking accuracy to-date.
You are right that the Kinect is rarely used where a keyboard & mouse would be faster and more accurate, but note that it is potentially relevant for accessibility.
And yes, it can be used for 3D scanning of real-world objects. I'm not sure about the exact accuracy, but I think it is acceptable for many applications. The main benefits are its low cost and speed.
For examples of 3D scanning, check out:
KinectFusion, a Microsoft Research project
Occipital Structure sensor for 3D scanning. (This is not the Kinect sensor, but provides an example application for 3D scanning. The company has a Kinect-related history as well.)
Styku - 3D body scanning for clothes fitting
Aside from 3D scanning, here are some other examples of applications:
Atlas5D - at-home patient monitoring
GestSure - 'Minority Report' interface for surgical rooms
Jintronix - games, exercises, assessments for physical therapy
There are many depth sensors like the Kinect3D on the market. The latest notable application would be iPhone X's depth sensor and FaceID. Many companies in the space are working actively in FaceID now, which would also be useful on Linux. Check out Microsoft's Window Hello biometric facial ID system - see Microsoft's official website:
Manufacturing of the Kinect sensor and adapter has been discontinued,
but the Kinect technology continues to live on in products like the
HoloLens, Cortana voice assistant, the Windows Hello biometric facial
ID system, and a context-aware user interface.
Kinect has applications in the robotics community as well, though I don't know the specifics. I assume many in robotics community use Linux when working with the Kinect. The depth and color cameras can be used to provide vision and the microphone array for audio input.
Generally, the Kinect had a big impact when it was released not just because of its technology but also because of its low price point, even if it's not the most accurate for every application. As this technology improves, I hope many other applications will emerge and become mainstream.
EDIT: also, check out this Hacker News discussion: "Microsoft Has Stopped Manufacturing The Kinect"

Windows 8 - low latency audio

I'm considering developing an app for the upcoming Windows 8. The app requires low-latency audio recording and playback, and I'm trying find out whether the OS will support that (as opposed to other platforms).
So what I'd like to know is:
Is there a low-latency audio API in Windows 8?
Will it be supported on platforms other than PC (e.g. tablets)?
Thanks!
WASAPI was introduced with Windows Vista as the low-latency audio API. It is available both to desktop and to Metro style applications on Windows 8. Because it is a very low-level API, using it is not simple, but it gives you the most power. It will work on both Windows 8 and the newly-minted Windows RT (Arm).
Also available is XAudio2 which is a slightly higher-level API which will be easier to work with. It is the replacement for DirectSound and is designed for game developers, but may work for your purposes. This also is available to both Windows 8 and Windows RT.
There is a bit of comparison of the two APIs at the bottom of this article. I would start with XAudio2 and move to WASAPI only if you find XAudio2 doesn't meet your needs.
I would consider using XAudio2. Microsoft providers Basic audio playback sample for easy start
Yes, there is a low latency API you can access. It's called WASAPI
From my understanding, all tablets/Laptops/Desktops/anything running Windows 8, will have access to it. The only downside is that it's harder to work with (because it's lower level), but you get to directly interact with the byte arrays getting send to the speaker, and the latency is very low.

Low level audio programming

I wonder; does audio software like Cubase and Audacity use PlaySound calls??
Where can I learn about low level audio programming? As far as I've found information on the web, MCI seems to be the lowest level audio API in Windows...
Thanks
Edit: I don't ask for information specific for Windows only.
There's several audio APIs to choose from. The oldest and most widely supported is the waveOut API - look for functions starting with waveOut in MSDN. A slightly newer one is DirectSound which is geared more towards games, but it's main feature over waveOut is positional 3D sound which professional audio software doesn't use (it was also supposed to have lower latency than waveOut, but that never really materialized). For low latency audio, there is ASIO. Professional audio apps support this API, but not all drivers do (it's a standard feature in professional sound cards, but not gaming or on-board hardware). ASIO can provide much lower latency than waveOut or DirectSound. Finally, there's the kernel streaming interface, which is the lowest-level audio interface still accessible from user-mode code. This is a direct pipe into Windows's internal mixer which combines output from all apps that are currently playing sound into the signal that gets sent to the sound card. It's scarcely documented though. There's a driver called ASIO4ALL (just google it) that provides ASIO support on soundcards without ASIO drivers by implementing the ASIO API on top of the kernel streaming interface.
I'm a little late to the game here, but I posted a Windows API history last week that might add a little more context. The choice of API really depends on your needs. If you want to avoid 3rd party libraries, it really only comes down to MME, XAudio2, and Core Audio (WASAPI).
A Brief History of Windows Audio APIs
Hope this helps!
Actually, if you are looking for more than Windows-only output support, then the best way to start is to review Phil Burk's PortAudio, available as of this writing at http://www.portaudio.com/ .
ASIO is a good quality interface, but it's proprietary and owned by Steinberg.
There are many lower-level interfaces to audio output than MCI in modern Windows. These include, at least, DirectSound, XAudio and WASAPI.
I recommend avoiding the Windows APIs as much as possible, and learning PortAudio instead.

Resources