| 27 | #define GL_VER(major, minor) ((static_cast<uint32_t>(major) << 16) | static_cast<uint32_t>(minor)) |
| 28 | |
| 29 | uint32_t GetGLVersion(const char* versionString) { |
| 30 | if (versionString == nullptr) { |
| 31 | return GL_VER(-1, -1); |
| 32 | } |
| 33 | int major, minor; |
| 34 | int mesaMajor, mesaMinor; |
| 35 | int n = sscanf(versionString, "%d.%d Mesa %d.%d", &major, &minor, &mesaMajor, &mesaMinor); |
| 36 | if (4 == n) { |
| 37 | return GL_VER(major, minor); |
| 38 | } |
| 39 | n = sscanf(versionString, "%d.%d", &major, &minor); |
| 40 | if (2 == n) { |
| 41 | return GL_VER(major, minor); |
| 42 | } |
| 43 | int esMajor, esMinor; |
| 44 | n = sscanf(versionString, "OpenGL ES %d.%d (WebGL %d.%d", &esMajor, &esMinor, &major, &minor); |
| 45 | if (4 == n) { |
| 46 | return GL_VER(major, minor); |
| 47 | } |
| 48 | char profile[2]; |
| 49 | n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile + 1, &major, &minor); |
| 50 | if (4 == n) { |
| 51 | return GL_VER(major, minor); |
| 52 | } |
| 53 | n = sscanf(versionString, "OpenGL ES %d.%d", &major, &minor); |
| 54 | if (2 == n) { |
| 55 | return GL_VER(major, minor); |
| 56 | } |
| 57 | return GL_VER(-1, -1); |
| 58 | } |
| 59 | |
| 60 | /** |
| 61 | * 用例描述: 测试 PAGSurface 数据同步 |