void OpenGLComponent::updateContext()
{
    if (needToDeleteContext)
        deleteContext();

    if (context == nullptr)
    {
        const ScopedLock sl (contextLock);

        if (context == nullptr)
        {
            context = createContext();

            if (context != nullptr)
            {
               #if JUCE_LINUX
                if (! isUsingDedicatedThread())
               #endif
                    updateContextPosition();

                if (context->makeActive())
                {
                    newOpenGLContextCreated();
                    context->makeInactive();
                }
            }
        }
    }
}
Beispiel #2
0
void OpenGLComponent::updateContext()
{
  //request to delete the context
  if (needToDeleteContext)
  {
    if (context.nativeContext!=nullptr)
    {
      context.nativeContext->shutdownOnRenderThread();
      delete context.nativeContext;
      context.nativeContext=nullptr;
    }
    needToDeleteContext = false;
  }

  //do not create the context if not visible!
  if (!this->isVisible()) 
    return;

  //recreate native context
  if (context.nativeContext==nullptr)
  {
    const ScopedLock sl(contextLock);
    if (context.nativeContext==nullptr)
    {
      context.nativeContext = new OpenGLContext::NativeContext (*this, preferredPixelFormat,
        contextToShareListsWith != nullptr ? contextToShareListsWith->nativeContext: nullptr);

      if (!context.nativeContext->createdOk())
      {
        delete context.nativeContext;
        context.nativeContext=nullptr;
      }

      if (context.nativeContext!=nullptr)
      {
        context.nativeContext->initialiseOnRenderThread();
        updateContextPosition();
        glViewport (0, 0, getWidth(), getHeight());
        
        if (context.makeActive())
        {
          context.extensions.initialise();
          newOpenGLContextCreated();
          makeCurrentContextInactive();
        }
      }
    }
  }
}