void SkRuntimeBlender::flatten(SkWriteBuffer& buffer) const { if (SkKnownRuntimeEffects::IsSkiaKnownRuntimeEffect(fEffect->fStableKey)) { // We only serialize Skia-internal stableKeys. First party stable keys are not serialized.
buffer.write32(fEffect->fStableKey);
} else {
buffer.write32(0);
buffer.writeString(fEffect->source().c_str());
}
buffer.writeDataAsByteArray(fUniforms.get());
SkRuntimeEffectPriv::WriteChildEffects(buffer, fChildren);
}
sk_sp<SkFlattenable> SkRuntimeBlender::CreateProc(SkReadBuffer& buffer) { if (!buffer.validate(buffer.allowSkSL())) { return nullptr;
}
bool SkRuntimeBlender::onAppendStages(const SkStageRec& rec) const { if (!SkRuntimeEffectPriv::CanDraw(SkCapabilities::RasterBackend().get(), fEffect.get())) { // SkRP has support for many parts of #version 300 already, but for now, we restrict its // usage in runtime effects to just #version 100. returnfalse;
} if (const SkSL::RP::Program* program = fEffect->getRPProgram(/*debugTrace=*/nullptr)) {
SkSpan<constfloat> uniforms = SkRuntimeEffectPriv::UniformsAsSpan(
fEffect->uniforms(),
fUniforms, /*alwaysCopyIntoAlloc=*/false,
rec.fDstCS,
rec.fAlloc);
SkShaders::MatrixRec matrix(SkMatrix::I());
matrix.markCTMApplied();
RuntimeEffectRPCallbacks callbacks(rec, matrix, fChildren, fEffect->fSampleUsages); bool success = program->appendStages(rec.fPipeline, rec.fAlloc, &callbacks, uniforms); return success;
} returnfalse;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.