Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: samplecode/PerlinPatch.cpp

Issue 1410863006: Update sample to use new perlin noise shader, and make cloud like (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: more nits Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gyp/SampleApp.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SampleCode.h" 8 #include "SampleCode.h"
9 #include "SkAnimTimer.h" 9 #include "SkAnimTimer.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
11 #include "SkGradientShader.h" 11 #include "SkGradientShader.h"
12 #include "SkPatchUtils.h" 12 #include "SkPatchUtils.h"
13 #include "SkPerlinNoiseShader.h" 13 #include "SkPerlinNoiseShader2/SkPerlinNoiseShader2.h"
14 #include "SkComposeShader.h" 14 #include "SkComposeShader.h"
15 15
16 static void draw_control_points(SkCanvas* canvas, const SkPoint cubics[12]) { 16 static void draw_control_points(SkCanvas* canvas, const SkPoint cubics[12]) {
17 //draw control points 17 //draw control points
18 SkPaint paint; 18 SkPaint paint;
19 SkPoint bottom[SkPatchUtils::kNumPtsCubic]; 19 SkPoint bottom[SkPatchUtils::kNumPtsCubic];
20 SkPatchUtils::getBottomCubic(cubics, bottom); 20 SkPatchUtils::getBottomCubic(cubics, bottom);
21 SkPoint top[SkPatchUtils::kNumPtsCubic]; 21 SkPoint top[SkPatchUtils::kNumPtsCubic];
22 SkPatchUtils::getTopCubic(cubics, top); 22 SkPatchUtils::getTopCubic(cubics, top);
23 SkPoint left[SkPatchUtils::kNumPtsCubic]; 23 SkPoint left[SkPatchUtils::kNumPtsCubic];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 //bottom points 87 //bottom points
88 fPts[6].set(300, 300); 88 fPts[6].set(300, 300);
89 fPts[7].set(250, 250); 89 fPts[7].set(250, 250);
90 //left points 90 //left points
91 fPts[8].set(150, 350); 91 fPts[8].set(150, 350);
92 fPts[9].set(100, 300); 92 fPts[9].set(100, 300);
93 fPts[10].set(50, 250); 93 fPts[10].set(50, 250);
94 fPts[11].set(150, 150); 94 fPts[11].set(150, 150);
95 95
96 const SkColor colors[SkPatchUtils::kNumCorners] = { 96 const SkColor colors[SkPatchUtils::kNumCorners] = {
97 SK_ColorBLUE, SK_ColorYELLOW 97 0xFF5555FF, 0xFF8888FF, 0xFFCCCCFF
98 }; 98 };
99 99 const SkPoint points[2] = { SkPoint::Make(0.0f, 0.0f),
100 fShader0 = SkGradientShader::CreateRadial(SkPoint::Make(128.0f, 128.0f), 100 SkPoint::Make(100.0f, 100.0f) };
101 180.0f, 101 fShader0 = SkGradientShader::CreateLinear(points,
102 colors, 102 colors,
103 NULL, 103 NULL,
104 2, 104 3,
105 SkShader::kMirror_TileMode, 105 SkShader::kMirror_TileMode,
106 0, 106 0,
107 NULL); 107 NULL);
108 fShader1 = SkPerlinNoiseShader::CreateTurbulence(fXFreq, fYFreq, 2, fSee d, NULL);
109 fShaderCompose = new SkComposeShader(fShader0, fShader1);
110 } 108 }
111 109
112 virtual ~PerlinPatchView() { 110 virtual ~PerlinPatchView() {
113 SkSafeUnref(fShader0); 111 SkSafeUnref(fShader0);
114 SkSafeUnref(fShader1);
115 SkSafeUnref(fShaderCompose);
116 } 112 }
117 protected: 113 protected:
118 // overrides from SkEventSink 114 // overrides from SkEventSink
119 bool onQuery(SkEvent* evt) override { 115 bool onQuery(SkEvent* evt) override {
120 if (SampleCode::TitleQ(*evt)) { 116 if (SampleCode::TitleQ(*evt)) {
121 SampleCode::TitleR(evt, "PerlinPatch"); 117 SampleCode::TitleR(evt, "PerlinPatch");
122 return true; 118 return true;
123 } 119 }
124 return this->INHERITED::onQuery(evt); 120 return this->INHERITED::onQuery(evt);
125 } 121 }
126 122
127 bool onAnimate(const SkAnimTimer& timer) override { 123 bool onAnimate(const SkAnimTimer& timer) override {
124 fSeed += 0.005f;
128 return true; 125 return true;
129 } 126 }
130 127
131 128
132 void onDrawContent(SkCanvas* canvas) override { 129 void onDrawContent(SkCanvas* canvas) override {
133 if (!canvas->getTotalMatrix().invert(&fInvMatrix)) { 130 if (!canvas->getTotalMatrix().invert(&fInvMatrix)) {
134 return; 131 return;
135 } 132 }
136 133
137 SkPaint paint; 134 SkPaint paint;
138 135
139 SkScalar texWidth = fTexScale * TexWidth; 136 SkScalar texWidth = fTexScale * TexWidth;
140 SkScalar texHeight = fTexScale * TexHeight; 137 SkScalar texHeight = fTexScale * TexHeight;
141 const SkPoint texCoords[SkPatchUtils::kNumCorners] = { 138 const SkPoint texCoords[SkPatchUtils::kNumCorners] = {
142 { fTexX - texWidth, fTexY - texHeight}, 139 { fTexX - texWidth, fTexY - texHeight},
143 { fTexX + texWidth, fTexY - texHeight}, 140 { fTexX + texWidth, fTexY - texHeight},
144 { fTexX + texWidth, fTexY + texHeight}, 141 { fTexX + texWidth, fTexY + texHeight},
145 { fTexX - texWidth, fTexY + texHeight}} 142 { fTexX - texWidth, fTexY + texHeight}}
146 ; 143 ;
147 144
148 SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(SkXfermode::kSrc_Mode)) ; 145 SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(SkXfermode::kSrc_Mode)) ;
149 146
147 SkScalar scaleFreq = 2.0;
148 fShader1 = SkPerlinNoiseShader2::CreateImprovedNoise(fXFreq/scaleFreq, f YFreq/scaleFreq, 4,
149 fSeed);
150 fShaderCompose = new SkComposeShader(fShader0, fShader1);
151
150 paint.setShader(fShaderCompose); 152 paint.setShader(fShaderCompose);
151 canvas->drawPatch(fPts, nullptr, texCoords, xfer, paint); 153 canvas->drawPatch(fPts, nullptr, texCoords, xfer, paint);
152 154
153 draw_control_points(canvas, fPts); 155 draw_control_points(canvas, fPts);
156 SkSafeUnref(fShader1);
157 SkSafeUnref(fShaderCompose);
154 } 158 }
155 159
156 class PtClick : public Click { 160 class PtClick : public Click {
157 public: 161 public:
158 int fIndex; 162 int fIndex;
159 PtClick(SkView* view, int index) : Click(view), fIndex(index) {} 163 PtClick(SkView* view, int index) : Click(view), fIndex(index) {}
160 }; 164 };
161 165
162 static bool hittest(const SkPoint& pt, SkScalar x, SkScalar y) { 166 static bool hittest(const SkPoint& pt, SkScalar x, SkScalar y) {
163 return SkPoint::Length(pt.fX - x, pt.fY - y) < SkIntToScalar(5); 167 return SkPoint::Length(pt.fX - x, pt.fY - y) < SkIntToScalar(5);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 this->inval(nullptr); 203 this->inval(nullptr);
200 return true; 204 return true;
201 } 205 }
202 206
203 private: 207 private:
204 typedef SampleView INHERITED; 208 typedef SampleView INHERITED;
205 }; 209 };
206 210
207 DEF_SAMPLE( return new PerlinPatchView(); ) 211 DEF_SAMPLE( return new PerlinPatchView(); )
208 212
OLDNEW
« no previous file with comments | « gyp/SampleApp.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698