Analyzing depth of scene fragments is an important part of composing effects like soft particles. However, this can easily become a bottleneck on mobile devices. In this article I’ll explain what OpenGL ES extensions can be used to substitute depth pre-pass on different mobile GPUs, and also will cover some additional optimizations which were applied to improve our apps.

As in previous articles, I use our 3D Buddha Live Wallpaper as a benchmark because this app uses soft particles, and overall scene is quite simple.

Scene with soft particles

Explanation of problem

Scene depth information is an important part of composing effects like soft particles. However, the…

Image source: ARM

ASTC is a very efficient texture compression format - it combines decent image quality with high compression. It helps saving a lot of memory bandwidth on modern mobile GPUs.

But can we crank it to 11 and make it run even faster? It appears we can (in certain scenarios and on supported hardware).

ARM Mali GPUs support the extension GL_EXT_texture_compression_astc_decode_mode. According to ASTC specifications, even LDR textures are decoded into 16-bit floating point values. This extension provides a possibility to switch the hardware ASTC decoder into faster mode, decoding textures into lower precision normalized 8-bit unsigned integers. …

A few days ago we released a new nature-themed app — Iceland 3D Live Wallpaper. It has an interactive WebGL demo too, which you can find here.

Terrain is based on this beautiful and detailed 3D model by Sergey Kuydin. Interestingly, this is not a real landscape of some part of Iceland. Even though it looks like a real thing, it actually is generated in World Machine. After analyzing model in Sketchfab we decided to create a live wallpaper with it, adding dynamic time of day. …

We’ve released a new live wallpaper for Android and simultaneously published a live demo page showcasing all features of an app. You can check the webpage here.

Historically, the web demo was created first — it was used as a prototyping playground to compose a scene and to fine-tune shaders. Also, this really helps in sharing work between a team of two people without necessity to learn Android Studio for both. And when everything was polished and looked good enough, an Android app was created quite fast based on the web demo code. …

Photo by Nikita Vantorin on Unsplash

Our Android apps are live wallpapers so it is very important for them to be lightweight. To achieve the best possible performance, smallest memory and power usage we constantly improve our apps by reducing the size of resources and using various compressions supported by hardware.

The latest update of 3D Buddha Live Wallpaper introduced a more compact storing 3D objects to save memory and improve performance. We’ve updated its WebGL demo counterpart in the same way, and in this article we will describe the process of this optimization.

Compact data types in OpenGL ES / WebGL

Previously in our apps we used only floats to store all per-vertex…

Particles are one of the easiest ways of improving the visual appearance of any scene. When we decided to update visuals of our 3D Buddha Live Wallpaper the most obvious way of filling in the empty space around Buddha statue was to add some smoke/fog particles. And we have achieved quite good looking results by using soft particles. In this article we will describe the implementation of soft particles in pure WebGL / OpenGL ES without any 3rd party library or engine used.

The difference between the old and updated app is even better than we expected. Simple smoke particles…

Right after we’ve released our latest 3D Buddha Live Wallpaper an idea to make a landing page for this app emerged. Because what is the best way to show features of live wallpaper? To run it right in user’s browser, of course. Thanks to WebGL users can preview exactly the same rich, fully 3D graphics and smooth performance as in full-featured Android app right in mobile browser. This experience is way beyond watching screenshots or video of an app on Google Play.

It was quite easy to implement this landing page because we share the same framework for both…

WebGL 2 is now available in latest Firefox and Chrome (even in mobile version) so it was tempting to try out some of its new features. One of the most important WebGL 2 (and OpenGL ES 3.0, which it is based upon) features is instanced rendering. This feature reduces draw calls overhead by drawing the same geometry multiple times with altered transformations. It was supported in certain implementations of WebGL 1 too but required a certain extension. Most useful for foliage and particles, this technique is also quite often used to simulate fur.


There are a lot of articles on…

Regular Bootstrap modals don’t look and feel like something native on mobile phones. They are basically the same windows from desktop version, only stretched properly to fit small mobile screens. Having enough content (for example, edit form with lots of fields) they require users scrolling all the way down to modal footer with buttons:

Regular Bootstrap modal with a lot of content on small screen

However, users are used to somewhat different UX on phones. On both iOS and Android all main buttons to perform certain actions are placed at the top navigation bar, alongside with current screen title. This makes them always accessible disregarding scrolling position of content.

To make…

In modern world cryptocurrencies have become a part of our lives. Money transfers with cryptocurrencies are faster and cheaper than bank wire transfers. Or, at least, they used to be faster and cheaper. A couple of months ago fees for small amounts of money have become comparable to fiat transfers. So the idea of creating site which will help people compare fees and choose the best solution for money transfer emerged.

CryptoFees is a FOSS project made with a single purpose — to showcase which cryptocurrency provides best fees for money transfers by analyzing the most recent transactions from two…

Oleksandr Popov

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store