| /* |
| * 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 SkKeyContext_DEFINED |
| #define SkKeyContext_DEFINED |
| |
| #include "include/gpu/GrTypes.h" |
| |
| #ifdef SK_GRAPHITE_ENABLED |
| #include "include/core/SkM44.h" |
| |
| namespace skgpu::graphite { class Recorder; } |
| #endif |
| |
| #if SK_SUPPORT_GPU |
| class GrRecordingContext; |
| #endif |
| |
| class SkShaderCodeDictionary; |
| |
| // The key context must always be able to provide a valid SkShaderCodeDictionary. Depending |
| // on the calling context it can also supply a backend-specific resource providing |
| // object (e.g., a Recorder). |
| class SkKeyContext { |
| public: |
| // Constructor for the pre-compile code path |
| SkKeyContext(SkShaderCodeDictionary* dict) : fDictionary(dict) {} |
| #ifdef SK_GRAPHITE_ENABLED |
| SkKeyContext(skgpu::graphite::Recorder*, const SkM44& dev2Local); |
| skgpu::graphite::Recorder* recorder() const { return fRecorder; } |
| |
| // TODO: it is expected that 'dev2Local' will go away once we switch to the actual |
| // desired way of providing local coordinates to the fragment shaders. |
| const SkM44& dev2Local() const { return fDev2Local; } |
| #endif |
| #if SK_SUPPORT_GPU |
| SkKeyContext(GrRecordingContext*); |
| GrRecordingContext* recordingContext() const { return fRecordingContext; } |
| #endif |
| |
| SkShaderCodeDictionary* dict() const { return fDictionary; } |
| |
| private: |
| #ifdef SK_GRAPHITE_ENABLED |
| skgpu::graphite::Recorder* fRecorder = nullptr; |
| SkM44 fDev2Local; |
| #endif |
| |
| #if SK_SUPPORT_GPU |
| GrRecordingContext* fRecordingContext = nullptr; |
| #endif |
| |
| SkShaderCodeDictionary* fDictionary; |
| }; |
| |
| #endif // SkKeyContext_DEFINED |