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

Side by Side Diff: src/effects/SkColorCubeFilter.cpp

Issue 1368423003: Use child processors to implement compose color filter. (Closed) Base URL: https://skia.googlesource.com/skia.git@upm
Patch Set: Address comments Created 5 years, 2 months 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 | « src/core/SkColorFilter.cpp ('k') | src/effects/SkColorFilters.cpp » ('j') | 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 2014 Google Inc. 2 * Copyright 2014 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 "SkColorCubeFilter.h" 8 #include "SkColorCubeFilter.h"
9 #include "SkColorPriv.h" 9 #include "SkColorPriv.h"
10 #include "SkOnce.h" 10 #include "SkOnce.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 void SkColorCubeFilter::toString(SkString* str) const { 153 void SkColorCubeFilter::toString(SkString* str) const {
154 str->append("SkColorCubeFilter "); 154 str->append("SkColorCubeFilter ");
155 } 155 }
156 #endif 156 #endif
157 157
158 /////////////////////////////////////////////////////////////////////////////// 158 ///////////////////////////////////////////////////////////////////////////////
159 #if SK_SUPPORT_GPU 159 #if SK_SUPPORT_GPU
160 160
161 class GrColorCubeEffect : public GrFragmentProcessor { 161 class GrColorCubeEffect : public GrFragmentProcessor {
162 public: 162 public:
163 static GrFragmentProcessor* Create(GrTexture* colorCube) { 163 static const GrFragmentProcessor* Create(GrTexture* colorCube) {
164 return (nullptr != colorCube) ? new GrColorCubeEffect(colorCube) : nullp tr; 164 return (nullptr != colorCube) ? new GrColorCubeEffect(colorCube) : nullp tr;
165 } 165 }
166 166
167 virtual ~GrColorCubeEffect(); 167 virtual ~GrColorCubeEffect();
168 168
169 const char* name() const override { return "ColorCube"; } 169 const char* name() const override { return "ColorCube"; }
170 170
171 int colorCubeSize() const { return fColorCubeAccess.getTexture()->width(); } 171 int colorCubeSize() const { return fColorCubeAccess.getTexture()->width(); }
172 172
173 173
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 const GrColorCubeEffect& colorCube = proc.cast<GrColorCubeEffect>(); 296 const GrColorCubeEffect& colorCube = proc.cast<GrColorCubeEffect>();
297 SkScalar size = SkIntToScalar(colorCube.colorCubeSize()); 297 SkScalar size = SkIntToScalar(colorCube.colorCubeSize());
298 pdman.set1f(fColorCubeSizeUni, SkScalarToFloat(size)); 298 pdman.set1f(fColorCubeSizeUni, SkScalarToFloat(size));
299 pdman.set1f(fColorCubeInvSizeUni, SkScalarToFloat(SkScalarInvert(size))); 299 pdman.set1f(fColorCubeInvSizeUni, SkScalarToFloat(SkScalarInvert(size)));
300 } 300 }
301 301
302 void GrColorCubeEffect::GLProcessor::GenKey(const GrProcessor& proc, 302 void GrColorCubeEffect::GLProcessor::GenKey(const GrProcessor& proc,
303 const GrGLSLCaps&, GrProcessorKeyBui lder* b) { 303 const GrGLSLCaps&, GrProcessorKeyBui lder* b) {
304 } 304 }
305 305
306 bool SkColorCubeFilter::asFragmentProcessors(GrContext* context, GrProcessorData Manager*, 306 const GrFragmentProcessor* SkColorCubeFilter::asFragmentProcessor(GrContext* con text,
307 SkTDArray<const GrFragmentProcessor *>* array) const { 307 GrProcessorDat aManager*) const {
308 static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); 308 static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
309 GrUniqueKey key; 309 GrUniqueKey key;
310 GrUniqueKey::Builder builder(&key, kDomain, 2); 310 GrUniqueKey::Builder builder(&key, kDomain, 2);
311 builder[0] = fUniqueID; 311 builder[0] = fUniqueID;
312 builder[1] = fCache.cubeDimension(); 312 builder[1] = fCache.cubeDimension();
313 builder.finish(); 313 builder.finish();
314 314
315 GrSurfaceDesc desc; 315 GrSurfaceDesc desc;
316 desc.fWidth = fCache.cubeDimension(); 316 desc.fWidth = fCache.cubeDimension();
317 desc.fHeight = fCache.cubeDimension() * fCache.cubeDimension(); 317 desc.fHeight = fCache.cubeDimension() * fCache.cubeDimension();
318 desc.fConfig = kRGBA_8888_GrPixelConfig; 318 desc.fConfig = kRGBA_8888_GrPixelConfig;
319 319
320 SkAutoTUnref<GrTexture> textureCube( 320 SkAutoTUnref<GrTexture> textureCube(
321 context->textureProvider()->findAndRefTextureByUniqueKey(key)); 321 context->textureProvider()->findAndRefTextureByUniqueKey(key));
322 if (!textureCube) { 322 if (!textureCube) {
323 textureCube.reset(context->textureProvider()->createTexture( 323 textureCube.reset(context->textureProvider()->createTexture(
324 desc, true, fCubeData->data(), 0)); 324 desc, true, fCubeData->data(), 0));
325 if (textureCube) { 325 if (textureCube) {
326 context->textureProvider()->assignUniqueKeyToTexture(key, textureCub e); 326 context->textureProvider()->assignUniqueKeyToTexture(key, textureCub e);
327 } else {
328 return nullptr;
327 } 329 }
328 } 330 }
329 331
330 GrFragmentProcessor* frag = textureCube ? GrColorCubeEffect::Create(textureC ube) : nullptr; 332 return GrColorCubeEffect::Create(textureCube);
331 if (frag) {
332 if (array) {
333 *array->append() = frag;
334 } else {
335 frag->unref();
336 SkDEBUGCODE(frag = nullptr;)
337 }
338 return true;
339 }
340 return false;
341 } 333 }
342 #endif 334 #endif
OLDNEW
« no previous file with comments | « src/core/SkColorFilter.cpp ('k') | src/effects/SkColorFilters.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698