Example #1
0
void EglDisplayImpl::Initialize() {
  Mutex::Autolock mutex(&lock_);
  if (initialized_) {
    return;
  }

  window_ = Native::CreateNativeWindow();
  LOG_ALWAYS_FATAL_IF(!window_, "Could not create native window.");

  EGLConfig cfg = NULL;
  for (ConfigSet::iterator it = configs_.begin(); it != configs_.end(); ++it) {
    const EGLint r = it->GetValue(EGL_RED_SIZE);
    const EGLint g = it->GetValue(EGL_GREEN_SIZE);
    const EGLint b = it->GetValue(EGL_BLUE_SIZE);
    if (r > 0 && g > 0 && b > 0) {
      cfg = it->GetKey();
      break;
    }
  }

  EGLint err = 0;
  global_context_ = EglContextImpl::Create(kDefaultDisplay, cfg, NULL, 2, &err);

  // Bind the window surface here in order for the compositor to be associated
  // with the correct context.  (The compositor associates itself to the first
  // surface that is bound.)
  ContextPtr ctx = contexts_.Get(global_context_);
  Native::BindNativeWindow(window_, ctx->GetNativeContext());

  // Force the GlesContext owned by the global context to be initialized at
  // least once.
  EglThreadInfo& info = EglThreadInfo::GetInstance();
  info.SetCurrentContext(ctx);
  ctx->GetGlesContext()->OnMakeCurrent();
  info.SetCurrentContext(ContextPtr());

  initialized_ = true;
}
Example #2
0
void EglDisplayImpl::DrawFullscreenQuadLocked(GLuint texture, bool flip_v) {
  ContextPtr ctx = contexts_.Get(global_context_);
  ctx->GetGlesContext()->DrawFullscreenQuad(texture, flip_v);
}