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 } } }
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; } } }
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); }
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 } } }