/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file.
*/ #include"src/shaders/SkRuntimeShader.h"
bool SkRuntimeShader::appendStages(const SkStageRec& rec, const SkShaders::MatrixRec& mRec) 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(fDebugTrace.get())) {
std::optional<SkShaders::MatrixRec> newMRec = mRec.apply(rec); if (!newMRec.has_value()) { returnfalse;
}
SkSpan<constfloat> uniforms =
SkRuntimeEffectPriv::UniformsAsSpan(fEffect->uniforms(),
this->uniformData(rec.fDstCS), /*alwaysCopyIntoAlloc=*/fUniformData == nullptr,
rec.fDstCS,
rec.fAlloc);
RuntimeEffectRPCallbacks callbacks(rec, *newMRec, fChildren, fEffect->fSampleUsages); bool success = program->appendStages(rec.fPipeline, rec.fAlloc, &callbacks, uniforms); return success;
} returnfalse;
}
// We want to invoke the uniforms-callback each time a paint occurs.
SkASSERT(fUniformsCallback);
sk_sp<const SkData> uniforms = fUniformsCallback({dstCS});
SkASSERT(uniforms && uniforms->size() == fEffect->uniformSize()); return uniforms;
}
sk_sp<SkFlattenable> SkRuntimeShader::CreateProc(SkReadBuffer& buffer) { if (!buffer.validate(buffer.allowSkSL())) { return nullptr;
}
if constexpr (kLenientSkSLDeserialization) { if (!effect) { // If any children were SkShaders, return the first one. This is a reasonable fallback. for (int i = 0; i < children.size(); i++) { if (children[i].shader()) {
SkDebugf("Serialized SkSL failed to compile. Replacing shader with child %d.\n",
i); return sk_ref_sp(children[i].shader());
}
}
// We don't know what to do, so just return nullptr (but *don't* poison the buffer).
SkDebugf("Serialized SkSL failed to compile. Ignoring/dropping SkSL shader.\n"); return nullptr;
}
}
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.