GL renderer info gives me "OpenGL ES 2.0" --- wondering how I can finally get to OpenGL ES 3.0? I have Android 4.3 and a GL ES 3.x-certified GPU (Adreno 320) --- there should be nothing to stop me from digging into the GL ES 3.0 goodness! Alas, seems like whatever driver comes out of box with the HTC One's "Google Play Edition" of Android 4.3 won't give me that.
Is there a custom developer driver we can install? My device has S-OFF, unlocked Bootloader and I know how to adb and fastboot.. how do I get GL ES 3.0 on my Adreno 320?
Try through eglGetProcAddress ? (Available only in NDK btw)
There's some helper files that comes with the Android 4.3 SDK called gl3stub.h/.c that contains all the differences from GLES 2 to GLES3. If all function fetching succeeds you should have an OpenGL ES 3 ready implementation.
Those files are mainly to support GLES3 functionality on devices that support it but don't have the Android 4.3 OS update.
Good ideas but here's the fun part, I don't do native dev here at all, I'm relying on Unity Pro 4.2.2 for GL ES 3.x graphics; that generally works if GL ES 3.x is reported properly by the driver, which on my device simply isn't happening:
In addition to my own simple test app made in Unity ---that simply prints out SystemInfo.graphicsDeviceVersion which is really just a call to glGetString(GL_VERSION)--- I have installed from Play Store numerous "GL benchmarks", "GL ES info" apps etc (only installed recently updated ones where the description is clearly stating they support and detect GL ES 3.x if present).
In all those apps only GL ES 2.x is ever reported as being present.
So I was hoping to find out on the forum of the manufacturer of my mobile GPU what the big deal is about this.. do I have to wait for HTC for updated drivers, even when using "stock android" (Google Play Edition)? If so, I'm screwed and probably get an update in 8 months or never.
Sure I could check out HTC support but let's face it they will have even less of a clue than me. Ultimately, those mobile chips get drivers from the chip manufacturer, even if distributed by the phone manufacturer, but there must be a shortcut for coders..
So .... surely there must be some kind of "Qualcomm developers network" up-to-the-minute Adreno-320 Android drivers for us developers somewhere ...... right? ;) :D
If you look on this page under "Drivers"
https://developer.qualcomm.com/mobile-development/mobile-technologies/ga...
You'll see some of them, but to be honest, I have no idea how to install them, as I found no how-tos on the matter and I'm a bit afraid to just overwrite them with what I have as I don't wanna brick my device and spend dozens of hours fixing it back.
As for the "other apps" that report GL version they just report GL_VERSION . That's the standard GL way to report the version. However, I think there's some OS problems if the driver reports 3 instead of 2, hence why they needed OS support in 4.3. I'm not 100% sure on this, just guesses from my experiences. Heck, with a GLES 3 device you're still requesting the EGL layer to give you a GLES 2 context which is absurd ! and btw, as a note, having Android 4.3 does not mean that all future 4.3 devices will support GLES3, just that they could.
And again from assumptions and talks with driver guys, the Manufacturer/SoC provider (HTC here) does indeed need to take the latest GPU driver and integrate it into their kernel/Android build/whatever, and from what I can tell it's not as easy as copy-pasting things (although I think it should be, as the interfaces should be identical, it's the same EGL 1.4, there's no OS based extensions in GLES3, so no idea what's taking them so much time).
If you take a look at the recent Adreno SDK (3.4), you find a OpenGLES3_QuickRef_Guide_Adreno.pdf which describes how to support GLES 3.0 in your app even when the ES 3 is not exposed.
https://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools-and-resources
The general strategy is to use an extension library.
The Qualcomm Adreno SDK v3.2 contains an extension library which simplifies targeting OpenGL ES 3.0 and can be used with versions of Android prior to 4.3. This library exposes GLES3 functions and extensions, it is easy to use. Simple steps of its use include:
Call Create() method of library object
Use OpenGL ES 3 functions and extensions
Also you find that the ES 3 examples in the Adreno SDK can use this extension library.
QCOM doesn't post reference binaries very often, but their kernels are very lenient. Unlike Imagination Technologies PowerVR GPUs, where the kernel drivers and binaries must match, that is not the case here. I ran HTC One Google Play Edition, HTC One, and Nexus 4 EGLs on my Optimus G without any kernel changes. You should be fine with running HTC One EGLs, but I don't think that's your problem. I suspect that the problem is that libGLESv3.so is not a symlink to libGLESv2.so. Make sure it is using any root explorer or adb.
@xboxfanj
Oh really ?
I just looked at /system/lib/libGLESv3.so on my Nexus 4 with 4.3, it has exactly 0.00 bytes while libGLESv2.so has 29.03KB. One weird thing though is that the file permissions for GLES2 and GLES3 libs are different.
It's different permissions for me. I guess that could be due to the symlink. If you look at the file in Explorer (free Root Explorer by the same author), it should say libGLESv2.so instead of the size for libGLESv3.so. If not, perhaps delete it and manually make a new symlink.