GrResourceIOProcessor::ImageStorageAccess::ImageStorageAccess(sk_sp<GrTexture> texture, GrIOType ioType, GrSLMemoryModel memoryModel, GrSLRestrict restrict, GrShaderFlags visibility) { SkASSERT(texture); fTexture.set(texture.release(), ioType); fMemoryModel = memoryModel; fRestrict = restrict; fVisibility = visibility; // We currently infer this from the config. However, we could allow the client to specify // a format that is different but compatible with the config. switch (fTexture.get()->config()) { case kRGBA_8888_GrPixelConfig: fFormat = GrImageStorageFormat::kRGBA8; break; case kRGBA_8888_sint_GrPixelConfig: fFormat = GrImageStorageFormat::kRGBA8i; break; case kRGBA_half_GrPixelConfig: fFormat = GrImageStorageFormat::kRGBA16f; break; case kRGBA_float_GrPixelConfig: fFormat = GrImageStorageFormat::kRGBA32f; break; default: SkFAIL("Config is not (yet) supported as image storage."); break; } }
void SkInternalAtlasTextTarget::deleteOps() { for (int i = 0; i < fOps.count(); ++i) { if (fOps[i]) { fOpMemoryPool->release(std::move(fOps[i])); } } fOps.reset(); }
bool GrRenderTargetPriv::attachStencilAttachment(sk_sp<GrStencilAttachment> stencil) { if (!stencil && !fRenderTarget->fStencilAttachment) { // No need to do any work since we currently don't have a stencil attachment and // we're not actually adding one. return true; } fRenderTarget->fStencilAttachment = stencil.release(); if (!fRenderTarget->completeStencilAttachment()) { SkSafeSetNull(fRenderTarget->fStencilAttachment); return false; } return true; }
sk_sp<SkPixelRef> SkMallocPixelRef::MakeWithData(const SkImageInfo& info, size_t rowBytes, sk_sp<SkColorTable> ctable, sk_sp<SkData> data) { SkASSERT(data != nullptr); if (!is_valid(info, ctable.get())) { return nullptr; } if ((rowBytes < info.minRowBytes()) || (data->size() < info.getSafeSize(rowBytes))) { return nullptr; } // must get this address before we call release void* pixels = const_cast<void*>(data->data()); SkPixelRef* pr = new SkMallocPixelRef(info, pixels, rowBytes, std::move(ctable), sk_data_releaseproc, data.release()); pr->setImmutable(); // since we were created with (immutable) data return sk_sp<SkPixelRef>(pr); }
void SkInternalAtlasTextTarget::addDrawOp(const GrClip& clip, std::unique_ptr<GrAtlasTextOp> op) { SkASSERT(clip.quickContains(SkRect::MakeIWH(fWidth, fHeight))); // The SkAtlasTextRenderer currently only handles grayscale SDF glyphs. if (op->maskType() != GrAtlasTextOp::kGrayscaleDistanceField_MaskType) { return; } const GrCaps& caps = *this->context()->internal().grContext()->contextPriv().caps(); op->finalizeForTextTarget(fColor, caps); int n = SkTMin(kMaxBatchLookBack, fOps.count()); for (int i = 0; i < n; ++i) { GrAtlasTextOp* other = fOps.fromBack(i).get(); if (other->combineIfPossible(op.get(), caps) == GrOp::CombineResult::kMerged) { fOpMemoryPool->release(std::move(op)); return; } if (GrRectsOverlap(op->bounds(), other->bounds())) { break; } } op->visitProxies([](GrSurfaceProxy*) {}); fOps.emplace_back(std::move(op)); }
CGDataProviderRef SkCreateDataProviderFromData(sk_sp<SkData> data) { const void* addr = data->data(); size_t size = data->size(); return CGDataProviderCreateWithData(data.release(), addr, size, unref_proc); }
void SkFontConfigInterface::SetGlobal(sk_sp<SkFontConfigInterface> fc) { SkAutoMutexAcquire ac(gFontConfigInterfaceMutex); SkSafeUnref(gFontConfigInterface); gFontConfigInterface = fc.release(); }