1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkSLSlide_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkSLSlide_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkM44.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkRuntimeEffect.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTemplates.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "tools/viewer/Slide.h" 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker #include <utility> 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas; 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker namespace skui { 26*c8dee2aaSAndroid Build Coastguard Worker enum class InputState; 27*c8dee2aaSAndroid Build Coastguard Worker enum class ModifierKey; 28*c8dee2aaSAndroid Build Coastguard Worker } // namespace sk 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker class SkSLSlide : public Slide { 31*c8dee2aaSAndroid Build Coastguard Worker public: 32*c8dee2aaSAndroid Build Coastguard Worker SkSLSlide(); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas* canvas) override; 35*c8dee2aaSAndroid Build Coastguard Worker bool animate(double nanos) override; 36*c8dee2aaSAndroid Build Coastguard Worker resize(SkScalar winWidth,SkScalar winHeight)37*c8dee2aaSAndroid Build Coastguard Worker void resize(SkScalar winWidth, SkScalar winHeight) override { 38*c8dee2aaSAndroid Build Coastguard Worker fResolution = { winWidth, winHeight, 1.0f }; 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker void load(SkScalar winWidth, SkScalar winHeight) override; 41*c8dee2aaSAndroid Build Coastguard Worker void unload() override; 42*c8dee2aaSAndroid Build Coastguard Worker onMouse(SkScalar x,SkScalar y,skui::InputState state,skui::ModifierKey modifiers)43*c8dee2aaSAndroid Build Coastguard Worker bool onMouse(SkScalar x, SkScalar y, skui::InputState state, 44*c8dee2aaSAndroid Build Coastguard Worker skui::ModifierKey modifiers) override { return true; } 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker private: 47*c8dee2aaSAndroid Build Coastguard Worker bool rebuild(); 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker SkString fSkSL; 50*c8dee2aaSAndroid Build Coastguard Worker bool fCodeIsDirty; 51*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkRuntimeEffect> fEffect; 52*c8dee2aaSAndroid Build Coastguard Worker skia_private::AutoTMalloc<char> fInputs; 53*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<sk_sp<SkShader>> fChildren; 54*c8dee2aaSAndroid Build Coastguard Worker float fSeconds = 0.0f; 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker enum Geometry { 57*c8dee2aaSAndroid Build Coastguard Worker kFill, 58*c8dee2aaSAndroid Build Coastguard Worker kCircle, 59*c8dee2aaSAndroid Build Coastguard Worker kRoundRect, 60*c8dee2aaSAndroid Build Coastguard Worker kCapsule, 61*c8dee2aaSAndroid Build Coastguard Worker kText, 62*c8dee2aaSAndroid Build Coastguard Worker }; 63*c8dee2aaSAndroid Build Coastguard Worker int fGeometry = kFill; 64*c8dee2aaSAndroid Build Coastguard Worker SkV3 fResolution = { 1, 1, 1 }; 65*c8dee2aaSAndroid Build Coastguard Worker SkV4 fMousePos; 66*c8dee2aaSAndroid Build Coastguard Worker int fTraceCoord[2] = {64, 64}; 67*c8dee2aaSAndroid Build Coastguard Worker bool fShadertoyUniforms = true; 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker // Named shaders that can be selected as inputs 70*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<std::pair<const char*, sk_sp<SkShader>>> fShaders; 71*c8dee2aaSAndroid Build Coastguard Worker }; 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker #endif 74