Unreal Engine 4.13 OPENGL ES3.1

Hi Unreal Community,

I tried to package a simple project of third person template and only target specific Open GL ES3.1, package successful, launch to on NOTE 7 with Vulkan capability and open the game, loaded splash screen and closed. What is the problem? ES2 work flawlessly.

UPDATE : Change SDK to matchndk, NDK to android-21, as i research only starting this package start support OPENGL ES3.1, no luck as well, splash screen, then exit, while try disable ES3.1 and tick ES2 again works. Game open perfectly. Check packaging log, using android-21 to build as well. Note 7 is Exynos version.

Question 2 while trying out. Tried mobile preview for high end quality mobile preview, compiled material. And change to Android preview (i assume is old ES2) . Looks exactly same in view port. The scene in trying is “Sci-Fi Walkway”. I know it’s quite high spec, but in high end mobile preview and ES2 looks exactly the same, i know ES3.1 support 16 textures samplers, so I try to Package to my note 7 ASTC format, lots of textures are missing, but in view port preview ES2 and high end mobile is okay. Is it because ES2 only support 5 textures samplers? If that’s the case how can I test ES3.1 as I tried lots of times target only es3.1, open the app and close down when on splash screen…es2 is okay. Please advise asap. Already stuck here for a few days…

How can i check what OPENGL is running while on android? Please advise. Thanks.

Hi, can you please post the log output (adb logcat) from the device when running packaged for ES 3.1 only? It must be crashing but I can’t see why without the log file. You mention the device is Vulkan capable, but you didn’t enable the Vulkan checkbox did you?

In the log output, if you see the line “AndroidEGL::ResetDisplay()” that indicates ES2 is being shutdown and ES3.1 is being enabled.

For the second question, ES 3.1 will support 16 textures (13 usable by material) and ES 2 mode only supports 8 (5 usable). I just confirmed and the Mobile Preview modes in the editor and PIE do not take this limitation into account. I’ve made a ticket (UE-35591) to make sure the ES2 preview correctly limits the textures to the same as what you see on device. If you’re using source code, the fix for this is easy - update D3D11ShaderCompiler.cpp line 835 and change the 16 to an 8.

  • Jack

Dear Jack,

Thank you for the clarification.the latest note 7 should be vulkan capable as mentioned in their launch. And I check Mali T880 indeed did support vulkan and up to open gl es3.2. I didn’t try to turn on vulkan in 4.13 as its still grey out. And I do tried to specify es3.1 and untick es2 in android section. Android-21 in ndk and sdk is matchndk. And actually I use Package astc and successfully Package and installed on note 7. But if Package target only es3.1, the app open but at splash screen and exit. Not able to get into game n print log. Please advise.

Thank you for the clarification.the
latest note 7 should be vulkan capable
as mentioned in their launch.

This device will run in Vulkan mode if you check the checkbox. Did you compile source code from Github or are you using a binary downloaded from the Epic Launcher? In order to use Vulkan you must build from source code. However I wouldn’t try to get Vulkan working until you have solved the ES 3.1 problem.

But if Package target only es3.1, the
app open but at splash screen and
exit. Not able to get into game n
print log.

You can view the log even if the game does not fully start. One way to view the Android log is using the “adb logcat” command from your PC. An easier way would be to enable the Device Output Log (Editor Settings, Experimental) and then open it from the Window menu. Then you can select your device and should be able to see the device log output including the call stack.

  • Jack

Dear Jack, Please check below log, using Launch to device.link text

No i didn’t build from source, as i saw in 4.13 release note mentioned that it’s already available for ES3.1… so i use binary version from launcher.

Did you build from source? As per my understanding open gl 3.1 only works from source in 4.13

Thanks for the log. Unfortunately you’ve run into an engine bug with a situation we hadn’t run into.

Your Note 7 is reporting that it supports “OpenGL ES 3.2” but the engine is checking only for “OpenGL ES 3.1”. So the engine doesn’t think your device is capable of ES 3.1 and gives an error because the app wasn’t packaged with ES2 shaders. Unfortunately we haven’t received our Note 7s yet so we didn’t find this during testing.

I’m going to fix this issue (UE-35598) right now and it’ll be released in 4.13.1 hopefully next week.

Dear Jack,

Thank you so much for the clarifying. That helps a lot.

I would like to ask a question that between OpenGL ES2 and ES3.1, the only difference is the texture sampler difference right? If I limit my texture to 5 it won’t be difference even I pack specifically to ES3.1 right? As I guess there’s no other “specific” features that ES3.1 support where ES2 doesn’t? As in mobile preview there’s no difference if I switch between high - end mobile preview and mobile android preview (es2) if there’s no limitation in textures samplers.

As I understand vulkan api is far more efficient. And i think vulkan does not have specific features as well right, as I saw some live stream video of yours saying that vulkan is able to have lower overhead so we can render “more” things to provide more visual appealing graphic in mobile such as more particles and have more draw calls and PP effects.

Is it Actually all the API does the same thing and provide same features, just that every api( openGL and vulkan) have different nature of"translating" so the device can render “more” things?

On the other hand, when will vulkan be enable instead of compile from source? Thanks you so much for your time. Really appreciate it!!

As I guess there’s no other “specific”
features that ES3.1 support where ES2
doesn’t?

You’re correct that the main benefit is the extra texture samplers. We do use a few ES 3.1 shader features which are more efficient, but there is no added functionality.

As I understand vulkan api is far more
efficient. And i think vulkan does not
have specific features as well right,

Correct, it’s just more efficient on the CPU which helps with battery, thermal and allows for more draw calls if your are CPU bound. But the feature set is the same as ES 3.1.

Is it Actually all the API does the
same thing and provide same features,
just that every api( openGL and
vulkan) have different nature
of"translating" so the device can
render “more” things?

Correct. Vulkan more closely follows the way the hardware actually works, so the driver (run on the CPU) doesn’t have to do so much work to translate Unreal’s requests into something the hardware can process.

On the other hand, when will vulkan be
enable instead of compile from source?

We will do that for 4.14. We had some issues with our auto-detection code for Vulkan support in 4.13.0 and that must work reliably to allow binary versions to have it enabled by default. 4.13.1 fixes the auto-detection code so we should be able to distribute 4.14 with working Vulkan support without users having to compile by hand.

  • Jack

Hi Jack.

All doubts and questions cleared! Thank you so much!

I would really like it if somebody could clarify what is going on with the ES3.1 . I have finally accomplished building UE4 from source just to be able to use OpenGL ES3.1 . However the BaseEngine.ini doesnt even contain bBuildForES31 . Is it the ESDeferred that we have to go for in the 4.13?

  1. Do I need Source for ES3.1?
  2. ESDeferred = ES3.1?
  3. How to get Unreal to build my project for ES3.1?
  4. Is there an official “how to” somewhere?

Prior to 4.13, “the ES 3.1+AEP” checkbox indicated you wanted to run the deferred renderer on mobile, which really only worked well for Tegra-based mobile devices. That option required source code. In version 4.13 we renamed that option “OpenGL ES Deferred” because the terminology didn’t make it clear that it wasn’t a general purpose renderer for all ES 3.1 devices.

From 4.13 onwards, we added ES 3.1 support to the regular forward shading mobile renderer. It works well on all recent mobile devices that support ES 3.1 and it uses the same code as the default ES2 renderer and so it does not need source code to enable. This ES 3.1 mode has the same level of rendering features as the Metal and Vulkan renderers.

So the answers to 1) and 2) are No and No.

For 3), all you need to do is check the checkbox. That will package shaders which support the ES 3.1 feature set and use them on OpenGL ES 3.1-capable devices.

  1. Documentation here describes the differences between the ES2 and ES 3.1 forward renderers and some related info: https://docs.unrealengine.com/latest/INT/Platforms/Android/OpenGLES31MobileRenderer/index.html

Thank you JackP,

This clears the fog up somewhat.
So it doesnt matter that when I package the project I never get an apk named with es31 only ‘MyProject-armv7-es2.apk’, this still contains the es31 support?
Okay I just realized somthing… :frowning: I am testing on a Xiaomi MI3 and an LG G3 both on GPU Adreno330 which only supports ES3.0 not 3.1 … ■■■■…
Is there any workaround to enable 3.0 support, cannot be a huge difference; somewhere I ve read that is only texture handling what differs between the two versions.

anyways, thank you!