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

Side by Side Diff: src/gpu/effects/GrTextureDomainEffect.h

Issue 98893006: Make texture domain a helper so that it can be incorporated into other effects. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rename GrTextureDomainEffect.[h|cpp] to GrTextureDomain.[h|cpp] Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/effects/GrTextureDomain.cpp ('k') | src/gpu/effects/GrTextureDomainEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef GrTextureDomainEffect_DEFINED
9 #define GrTextureDomainEffect_DEFINED
10
11 #include "GrSingleTextureEffect.h"
12
13 class GrGLTextureDomainEffect;
14 struct SkRect;
15
16 /**
17 * Limits a texture's lookup coordinates to a domain. Samples outside the domain are either clamped
18 * the edge of the domain or result in a vec4 of zeros. The domain is clipped to normalized texture
19 * coords ([0,1]x[0,1] square). Bilinear filtering can cause texels outside the domain to affect the
20 * read value unless the caller considers this when calculating the domain. TODO : This should be a
21 * helper that can assist an effect rather than effect unto itself.
22 */
23 class GrTextureDomainEffect : public GrSingleTextureEffect {
24
25 public:
26 /**
27 * If SkShader::kDecal_TileMode sticks then this enum could be replaced by S kShader::TileMode.
28 * We could also consider replacing/augmenting Decal mode with Border mode w here the color
29 * outside of the domain is user-specifiable. Decal mode currently has a har d (non-lerped)
30 * transition between the border and the interior.
31 */
32 enum WrapMode {
33 kClamp_WrapMode,
34 kDecal_WrapMode,
35 };
36
37 static GrEffectRef* Create(GrTexture*,
38 const SkMatrix&,
39 const SkRect& domain,
40 WrapMode,
41 GrTextureParams::FilterMode filterMode,
42 GrCoordSet = kLocal_GrCoordSet);
43
44 virtual ~GrTextureDomainEffect();
45
46 static const char* Name() { return "TextureDomain"; }
47
48 typedef GrGLTextureDomainEffect GLEffect;
49
50 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
51 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE;
52
53 const SkRect& domain() const { return fTextureDomain; }
54 WrapMode wrapMode() const { return fWrapMode; }
55
56 /* Computes a domain that bounds all the texels in texelRect. Note that with bilerp enabled
57 texels neighboring the domain may be read. */
58 static const SkRect MakeTexelDomain(const GrTexture* texture, const SkIRect& texelRect) {
59 SkScalar wInv = SK_Scalar1 / texture->width();
60 SkScalar hInv = SK_Scalar1 / texture->height();
61 SkRect result = {
62 texelRect.fLeft * wInv,
63 texelRect.fTop * hInv,
64 texelRect.fRight * wInv,
65 texelRect.fBottom * hInv
66 };
67 return result;
68 }
69
70 protected:
71 WrapMode fWrapMode;
72 SkRect fTextureDomain;
73
74 private:
75 GrTextureDomainEffect(GrTexture*,
76 const SkMatrix&,
77 const SkRect& domain,
78 WrapMode,
79 GrTextureParams::FilterMode filterMode,
80 GrCoordSet);
81
82 virtual bool onIsEqual(const GrEffect&) const SK_OVERRIDE;
83
84 GR_DECLARE_EFFECT_TEST;
85
86 typedef GrSingleTextureEffect INHERITED;
87 };
88
89 #endif
OLDNEW
« no previous file with comments | « src/gpu/effects/GrTextureDomain.cpp ('k') | src/gpu/effects/GrTextureDomainEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698