Welcome to mirror list, hosted at ThFree Co, Russian Federation.

android_gl_utils.cpp « opengl « mapswithme « com « jni « android - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 13fed787bc61ff115b7352d17cbddb55b4db05a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "android_gl_utils.hpp"

#include "base/logging.hpp"
#include "base/src_point.hpp"
#include "base/string_utils.hpp"

namespace android
{

ConfigComparator::ConfigComparator(EGLDisplay display)
  : m_display(display)
{
}

bool ConfigComparator::operator()(EGLConfig const & l, EGLConfig const & r) const
{
  int const weight = configWeight(l) - configWeight(r);
  if (weight == 0)
    return configAlphaSize(l) < configAlphaSize(r);

  return weight < 0;
}

int ConfigComparator::configWeight(EGLConfig const & config) const
{
  int val = -1;
  eglGetConfigAttrib(m_display, config, EGL_CONFIG_CAVEAT, &val);

  switch (val)
  {
    case EGL_NONE:
      return 0;
    case EGL_SLOW_CONFIG:
      return 1;
    case EGL_NON_CONFORMANT_CONFIG:
      return 2;
    default:
      return 0;
  }
}

int ConfigComparator::configAlphaSize(EGLConfig const & config) const
{
  int val = 0;
  eglGetConfigAttrib(m_display, config, EGL_ALPHA_SIZE, &val);
  return val;
}

namespace
{

std::string GetEglError(EGLint error)
{
  switch (error)
  {
  case EGL_NOT_INITIALIZED :      return "EGL_NOT_INITIALIZED";
  case EGL_BAD_ACCESS :           return "EGL_BAD_ACCESS";
  case EGL_BAD_ALLOC :            return "EGL_BAD_ALLOC";
  case EGL_BAD_ATTRIBUTE :        return "EGL_BAD_ATTRIBUTE";
  case EGL_BAD_CONFIG :           return "EGL_BAD_CONFIG";
  case EGL_BAD_CONTEXT :          return "EGL_BAD_CONTEXT";
  case EGL_BAD_CURRENT_SURFACE :  return "EGL_BAD_CURRENT_SURFACE";
  case EGL_BAD_DISPLAY :          return "EGL_BAD_DISPLAY";
  case EGL_BAD_MATCH :            return "EGL_BAD_MATCH";
  case EGL_BAD_NATIVE_PIXMAP :    return "EGL_BAD_NATIVE_PIXMAP";
  case EGL_BAD_NATIVE_WINDOW :    return "EGL_BAD_NATIVE_WINDOW";
  case EGL_BAD_PARAMETER :        return "EGL_BAD_PARAMETER";
  case EGL_BAD_SURFACE :          return "EGL_BAD_SURFACE";
  case EGL_CONTEXT_LOST :         return "EGL_CONTEXT_LOST";
  default:                        return strings::to_string(error);
  }
}

}  // namespace

void CheckEGL(my::SrcPoint const & src)
{
  EGLint error = eglGetError();
  while (error != EGL_SUCCESS)
  {
    LOG(LERROR, ("SrcPoint : ", src, ". EGL error : ", GetEglError(error)));
    error = eglGetError();
  }
}

}  // namespace android