bool CCSingleThreadProxy::commitAndComposite() { ASSERT(CCProxy::isMainThread()); if (!m_layerTreeHost->initializeRendererIfNeeded()) return false; // Unlink any texture backings that were deleted CCPrioritizedTextureManager::BackingVector evictedContentsTexturesBackings; { DebugScopedSetImplThread implThread; m_layerTreeHost->getEvictedContentTexturesBackings(evictedContentsTexturesBackings); } m_layerTreeHost->unlinkEvictedContentTexturesBackings(evictedContentsTexturesBackings); { DebugScopedSetImplThreadAndMainThreadBlocked implAndMainBlocked; m_layerTreeHost->deleteEvictedContentTexturesBackings(); } CCTextureUpdateQueue queue; m_layerTreeHost->updateLayers(queue, m_layerTreeHostImpl->memoryAllocationLimitBytes()); if (m_layerTreeHostImpl->contentsTexturesPurged()) m_layerTreeHostImpl->resetContentsTexturesPurged(); m_layerTreeHost->willCommit(); doCommit(queue); bool result = doComposite(); m_layerTreeHost->didBeginFrame(); return result; }
// Called by the legacy scheduling path (e.g. where render_widget does the scheduling) void CCSingleThreadProxy::compositeImmediately() { if (!recreateContextIfNeeded()) return; commitIfNeeded(); if (doComposite()) m_layerTreeHostImpl->swapBuffers(); }
bool CCSingleThreadProxy::commitAndComposite() { ASSERT(CCProxy::isMainThread()); CCTextureUpdater updater; if (!m_layerTreeHost->updateLayers(updater)) return false; doCommit(updater); return doComposite(); }
bool CCSingleThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect) { ASSERT(CCProxy::isMainThread()); if (!recreateContextIfNeeded()) return false; commitIfNeeded(); if (!doComposite()) return false; m_layerTreeHostImpl->readback(pixels, rect); if (m_layerTreeHostImpl->isContextLost()) return false; return true; }
bool CCSingleThreadProxy::compositeAndReadback(void *pixels, const IntRect& rect) { TRACE_EVENT("CCSingleThreadProxy::compositeAndReadback", this, 0); ASSERT(CCProxy::isMainThread()); if (!recreateContextIfNeeded()) { TRACE_EVENT("compositeAndReadback_EarlyOut_ContextLost", this, 0); return false; } if (!commitIfNeeded()) return false; if (!doComposite()) return false; m_layerTreeHostImpl->readback(pixels, rect); if (m_layerTreeHostImpl->isContextLost()) return false; return true; }
void SelObjIds::select(TimeValue t, CompMap &compMap, Bitmap *bm, RenderGlobalContext *gc) { float fTemp; ULONG chanType; mp_srcObjId = (WORD *)bm->GetChannel(BMM_CHAN_NODE_ID, chanType); if (chanType != BMM_CHAN_TYPE_16) mp_blurMgr->blurError(IDS_ERR_GBUF_INVALID); mp_srcColor = (Color24*)bm->GetChannel(BMM_CHAN_COLOR, chanType); if (chanType != BMM_CHAN_TYPE_24) mp_blurMgr->blurError(IDS_ERR_GBUF_INVALID); // if source bitmap has changed since last call if ( m_lastBMModifyID != bm->GetModifyID() ) { m_lastBMModifyID = bm->GetModifyID(); m_selectValid = m_featherValid = m_compValid = false; if ( (bm->Width() != m_imageW) || (bm->Height() != m_imageH) ) { m_imageW = bm->Width(); m_imageH = bm->Height(); m_imageSz = m_imageW * m_imageH; if (m_imageSz > m_mapSz) { if (mp_radMap) delete[] mp_radMap; mp_radMap = new float[m_imageSz]; m_mapSz = m_imageSz; } } } if (!m_selectValid) { // make list of desired ids m_idCount = mp_blurMgr->getSelTabCount(prmObjIdsIds); if (m_idCount > m_idListSz) { if (mp_idList) delete[] mp_idList; mp_idList = new int[m_idCount]; m_idListSz = m_idCount; } for (int i=0; i<m_idCount; i++) mp_blurMgr->getSelValue(prmObjIdsIds, t, mp_idList[i], FOREVER, i); // get luminance parameters mp_blurMgr->getSelValue(prmObjIdsLumMin, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_min = fTemp*PERCENT2DEC; mp_blurMgr->getSelValue(prmObjIdsLumMax, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_max = fTemp*PERCENT2DEC; // select the appropriate pixels m_selectValid = doSelect(); } if (!m_featherValid) { mp_blurMgr->getSelValue(prmObjIdsFeathRad, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 1000.0f); // mjm - 9.30.99 m_feathRad = (int)floor(max(m_imageW, m_imageH)*(fTemp*PERCENT2DEC)); m_featherValid = doFeather(); } mp_blurMgr->getSelValue(prmObjIdsBrighten, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 1000.0f); // mjm - 9.30.99 m_brighten = fTemp*PERCENT2DEC; mp_blurMgr->getSelValue(prmObjIdsBlend, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_blend = fTemp*PERCENT2DEC; m_compValid = doComposite(t, compMap); }
void SelMaps::select(TimeValue t, CompMap &compMap, Bitmap *bm, RenderGlobalContext *gc) { int type; mp_srcAlpha = (WORD*)bm->GetAlphaPtr(&type); mp_srcMap = (WORD*)bm->GetStoragePtr(&type); assert(type == BMM_TRUE_48); m_shadeContext.globContext = gc; // if source bitmap has changed since last call if ( m_lastBMModifyID != bm->GetModifyID() ) { m_lastBMModifyID = bm->GetModifyID(); m_selectValid = m_featherValid = m_compValid = false; if ( (bm->Width() != m_imageW) || (bm->Height() != m_imageH) ) { m_imageW = bm->Width(); m_imageH = bm->Height(); m_imageSz = m_imageW * m_imageH; if (m_imageSz > m_mapSz) { if (mp_radMap) delete[] mp_radMap; mp_radMap = new float[m_imageSz]; m_mapSz = m_imageSz; } } } float fTemp; if (!m_selectValid) { m_brightenMap = NULL; mp_blurMgr->getSelValue(prmMaskMap, 0, m_brightenMap, FOREVER); if (!m_brightenMap) return; m_shadeContext.scale = 1.0f; m_shadeContext.duvw = Point3(1.0f/float(m_imageW), 1.0f/float(m_imageH), 0.0f); m_shadeContext.uvw.z = 0.0f; m_shadeContext.filterMaps = TRUE; m_brightenMap->Update(t, Interval()); m_brightenMap->LoadMapFiles(t); mp_blurMgr->getSelValue(prmMaskChannel, t, m_channel, FOREVER); mp_blurMgr->getSelValue(prmMaskMin, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_min = fTemp*PERCENT2DEC; mp_blurMgr->getSelValue(prmMaskMax, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_max = fTemp*PERCENT2DEC; m_selectValid = doSelect(); } if (!m_featherValid) { mp_blurMgr->getSelValue(prmMaskFeathRad, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 1000.0f); // mjm - 9.30.99 m_feathRad = (int)floor(max(m_imageW, m_imageH)*(fTemp*PERCENT2DEC)); m_featherValid = doFeather(); } mp_blurMgr->getSelValue(prmMaskBrighten, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 1000.0f); // mjm - 9.30.99 m_brighten = fTemp*PERCENT2DEC; mp_blurMgr->getSelValue(prmMaskBlend, t, fTemp, FOREVER); LimitValue(fTemp, 0.0f, 100.0f); // mjm - 9.30.99 m_blend = fTemp*PERCENT2DEC; m_compValid = doComposite(t, compMap); }