blob: 05bf63e0ec1a5486d8b73f29d2fe06961f14c8a0 [file] [log] [blame]
/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_RuntimeEffectDictionary_DEFINED
#define skgpu_graphite_RuntimeEffectDictionary_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/effects/SkRuntimeEffect.h"
#include "src/core/SkTHash.h"
class SkRuntimeEffect;
namespace skgpu::graphite {
// We keep track of all SkRuntimeEffects that are used by a recording, along with their code
// snippet ID. This ensures that we have a live reference to every effect that we're going to
// paint, and gives us a way to retrieve their shader text when we see their code-snippet ID.
//
// Each runtime effect dictionary lives for just one Recording. While recording,
// it is filled with runtime effects. In snap(), ownership of it is assumed by the
// PipelineCreationTasks that could require its contents and a new one takes its place
// in the Recorder.
class RuntimeEffectDictionary : public SkRefCnt {
public:
const SkRuntimeEffect* find(int codeSnippetID) const {
sk_sp<const SkRuntimeEffect>* effect = fDict.find(codeSnippetID);
return effect ? effect->get() : nullptr;
}
void set(int codeSnippetID, sk_sp<const SkRuntimeEffect> effect);
bool empty() const { return fDict.empty(); }
private:
skia_private::THashMap<int, sk_sp<const SkRuntimeEffect>> fDict;
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_RuntimeEffectDictionary_DEFINED