Skip to content

Commit 56b06b6

Browse files
committed
DetectGLVendors: detect GL4ES translation layer and underlying technology
1 parent 0cddd7e commit 56b06b6

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/engine/renderer/DetectGLVendors.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ std::string GetGLDriverVendorName( glDriverVendor_t driverVendor )
7373
"Mesa",
7474
"Nvidia",
7575
"Moore Threads",
76+
"GL4ES",
7677
"OutOfRange",
7778
};
7879

@@ -89,6 +90,16 @@ std::string GetGLDriverVendorName( glDriverVendor_t driverVendor )
8990
return driverVendorNames[ index ];
9091
}
9192

93+
static std::string StripPrefix( const std::string &prefix, const std::string &string )
94+
{
95+
if ( Str::IsPrefix( prefix, string ) )
96+
{
97+
return string.substr( prefix.length() );
98+
}
99+
100+
return string;
101+
}
102+
92103
void DetectGLVendors(
93104
const std::string& vendorString,
94105
const std::string& versionString,
@@ -309,4 +320,39 @@ void DetectGLVendors(
309320
hardwareVendor = glHardwareVendor_t::INTEL;
310321
return;
311322
}
323+
324+
// Newer GL4ES strings disclosing the underlying technology.
325+
if ( Str::IsPrefix( "GL4ES wrapping ", vendorString ) )
326+
{
327+
std::string subVendorString = StripPrefix( "GL4ES wrapping ", vendorString );
328+
std::string subRendererString = StripPrefix( "GL4ES using ", rendererString );
329+
DetectGLVendors( subVendorString, versionString, subRendererString, hardwareVendor, driverVendor );
330+
driverVendor = glDriverVendor_t::GL4ES;
331+
}
332+
333+
/* Older GL4ES string not disclosing the underlying technology,
334+
also had “ptitSeb” as vendorString. */
335+
if ( rendererString == "GL4ES wrapper" )
336+
{
337+
driverVendor = glDriverVendor_t::GL4ES;
338+
// Older GL4ES doesn't disclose the underlying hardware.
339+
if ( hardwareVendor == glHardwareVendor_t::UNKNOWN )
340+
{
341+
hardwareVendor = glHardwareVendor_t::TRANSLATION;
342+
}
343+
return;
344+
}
345+
346+
/* GL4ES always use such kind of version string:
347+
> 2.1 gl4es wrapper 1.1.7
348+
And this is unlikely to change. */
349+
if ( versionString.find( "gl4es wrapper" ) != std::string::npos )
350+
{
351+
driverVendor = glDriverVendor_t::GL4ES;
352+
if ( hardwareVendor == glHardwareVendor_t::UNKNOWN )
353+
{
354+
hardwareVendor = glHardwareVendor_t::TRANSLATION;
355+
}
356+
return;
357+
}
312358
}

src/engine/renderer/DetectGLVendors.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum class glDriverVendor_t
6969
MESA,
7070
NVIDIA,
7171
MTHREADS,
72+
GL4ES,
7273
NUM_DRIVER_VENDORS,
7374
};
7475

0 commit comments

Comments
 (0)