Ejemplo n.º 1
0
void
Init::getContextListingHTML(std::string &text)
{
  static const char *const br = "<br/>\n";

  Thread::ScopedLock lock(th2rcMutex);
  for (TH2RC::const_iterator i = th2rc.begin(); i!=th2rc.end(); ++i)
  {
    RegalContext *ctx = i->second;

    // Need a per-context read-lock?

    text += print_string("ctx = ",ctx,br);
    text += br;
    if (ctx)
    {
      if (ctx->info)
      {
        text += print_string("<b>Vendor     </b>:",ctx->info->regalVendor,br);
        text += print_string("<b>Renderer   </b>:",ctx->info->regalRenderer,br);
        text += print_string("<b>Version    </b>:",ctx->info->regalVersion,br);
        text += print_string("<b>Extensions </b>:",ctx->info->regalExtensions,br);
        text += br;
      }

#if REGAL_EMULATION
      if (ctx->ppa)
      {
        text += print_string("<b>GL_ACCUM_BUFFER_BIT</b><br/>",   ctx->ppa->State::AccumBuffer::toString(br),br);
        text += print_string("<b>GL_COLOR_BUFFER_BIT</b><br/>",   ctx->ppa->State::ColorBuffer::toString(br),br);
        text += print_string("<b>GL_DEPTH_BIT</b><br/>",          ctx->ppa->State::Depth::toString(br),br);
        text += print_string("<b>GL_ENABLE_BIT</b><br/>",         ctx->ppa->State::Enable::toString(br),br);
        text += print_string("<b>GL_EVAL_BIT</b><br/>",           ctx->ppa->State::Eval::toString(br),br);
        text += print_string("<b>GL_FOG_BIT</b><br/>",            ctx->ppa->State::Fog::toString(br),br);
        text += print_string("<b>GL_HINT_BIT</b><br/>",           ctx->ppa->State::Hint::toString(br),br);
        text += print_string("<b>GL_LIGHTING_BIT</b><br/>",       ctx->ppa->State::Lighting::toString(br),br);
        text += print_string("<b>GL_LINE_BIT</b><br/>",           ctx->ppa->State::Line::toString(br),br);
        text += print_string("<b>GL_LIST_BIT</b><br/>",           ctx->ppa->State::List::toString(br),br);
        text += print_string("<b>GL_MULTISAMPLE_BIT</b><br/>",    ctx->ppa->State::Multisample::toString(br),br);
        text += print_string("<b>GL_PIXEL_MODE_BIT</b><br/>",     ctx->ppa->State::PixelMode::toString(br),br);
        text += print_string("<b>GL_POINT_BIT</b><br/>",          ctx->ppa->State::Point::toString(br),br);
        text += print_string("<b>GL_POLYGON_BIT</b><br/>",        ctx->ppa->State::Polygon::toString(br),br);
        text += print_string("<b>GL_POLYGON_STIPPLE_BIT</b><br/>",ctx->ppa->State::PolygonStipple::toString(br),br);
        text += print_string("<b>GL_SCISSOR_BIT</b><br/>",        ctx->ppa->State::Scissor::toString(br),br);
        text += print_string("<b>GL_STENCIL_BUFFER_BIT</b><br/>", ctx->ppa->State::Stencil::toString(br),br);
        text += print_string("<b>GL_TRANSFORM_BIT</b><br/>",      ctx->ppa->State::Transform::toString(br),br);
        text += print_string("<b>GL_VIEWPORT_BIT</b><br/>",       ctx->ppa->State::Viewport::toString(br),br);
        text += br;
      }
#endif
    }
  }
}
Ejemplo n.º 2
0
void
Init::destroyContext(RegalSystemContext sysCtx)
{
  if (_init && sysCtx)
  {
    RegalContext *context = getContext(sysCtx);

    if (context)
    {
      RegalAssert(context->sysCtx==sysCtx);

      Thread::ScopedLock thLock(th2rcMutex);
      Thread::ScopedLock scLock(sc2rcMutex);

      th2rc.erase(context->thread);
      sc2rc.erase(sysCtx);

      // TODO - clear TLS for other threads too?

      if (context==Thread::CurrentContext())
      {
        context->Cleanup();
        setContextTLS(NULL);
      }

      delete context;
    }
  }
}
Ejemplo n.º 3
0
void
Init::setContext(RegalContext *context)
{
  Thread::Thread thread = Thread::Self();

  Internal("Init::setContext","thread=",::boost::print::hex(Thread::threadId())," context=",context," ",context ? context->info->version : "");

  // std::map lookup

  Thread::ScopedLock lock(th2rcMutex);
  TH2RC::iterator i = th2rc.find(thread);

  // Associate this thread with the Regal context

  if (i!=th2rc.end())
  {
    // If some other context is associated
    // with this thread, disassociate it.

    if (i->second!=context)
    {
      if (i->second)
      {
        RegalAssert(i->second->thread==thread);
        i->second->thread = 0;
      }

      i->second = context;
    }
  }
  else
    th2rc[thread] = context;

  if (context)
  {
    // If some other thread is associated
    // with this context, disassociate it.

    th2rc.erase(context->thread);

    // Associate the context with this thread.

    context->thread = thread;
  }

  setContextTLS(context);
}
Ejemplo n.º 4
0
void
Init::getContextListingHTML(std::string &text)
{
  static const char *const br = "<br/>\n";

  Thread::ScopedLock lock(th2rcMutex);
  for (TH2RC::const_iterator i = th2rc.begin(); i!=th2rc.end(); ++i)
  {
    RegalContext *ctx = i->second;

    // Need a per-context read-lock?

    text += print_string("ctx = ",ctx,br);
    text += br;
    if (ctx)
    {
      if (ctx->info)
      {
        text += print_string("<b>Vendor     </b>:",ctx->info->regalVendor,br);
        text += print_string("<b>Renderer   </b>:",ctx->info->regalRenderer,br);
        text += print_string("<b>Version    </b>:",ctx->info->regalVersion,br);
        text += print_string("<b>Extensions </b>:",ctx->info->regalExtensions,br);
        text += br;
      }

#if REGAL_EMULATION
      if (ctx->ppa)
      {
        text += print_string("<b>GL_STENCIL_BIT</b><br/>",ctx->ppa->State::Stencil::toString(br),br);
        text += print_string("<b>GL_DEPTH_BIT</b><br/>",  ctx->ppa->State::Depth::toString(br),br);
        text += print_string("<b>GL_POLYGON_BIT</b><br/>",ctx->ppa->State::Polygon::toString(br),br);
        text += br;
      }
#endif
    }
  }
}