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

Side by Side Diff: src/gpu/effects/GrEllipseEdgeEffect.cpp

Issue 12462008: Add GrEllipseEdgeEffect (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Cleaned up nits, adjusted some interfaces Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 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 #include "GrEllipseEdgeEffect.h"
9 #include "gl/GrGLEffect.h"
10 #include "gl/GrGLEffectMatrix.h"
11 #include "gl/GrGLSL.h"
12 #include "gl/GrGLTexture.h"
13 #include "GrTBackendEffectFactory.h"
14 #include "GrTexture.h"
15
16 #define ELLIPSE_EDGE_ATTR0 "aEllipseEdge"
17
18 class GrGLEllipseEdgeEffect : public GrGLEffect {
19 public:
20 GrGLEllipseEdgeEffect(const GrBackendEffectFactory& factory, const GrEffectR ef&)
21 : INHERITED (factory) {}
22
23 virtual void emitCode(GrGLShaderBuilder* builder,
24 const GrEffectStage&,
25 EffectKey key,
26 const char* vertexCoords,
27 const char* outputColor,
28 const char* inputColor,
29 const TextureSamplerArray& samplers) SK_OVERRIDE {
30 const char *vsName, *fsName;
31 builder->addVarying(kVec4f_GrSLType, "EllipseEdge", &vsName, &fsName);
32 builder->addAttribute(kVec4f_GrSLType, ELLIPSE_EDGE_ATTR0);
33
34 builder->fVSCode.appendf("\t%s = " ELLIPSE_EDGE_ATTR0 ";\n", vsName);
35
36 builder->fFSCode.append("\tfloat edgeAlpha;\n");
37 // translate to origin
38 builder->fFSCode.appendf("\tvec2 offset = (%s.xy - %s.xy);\n", builder-> fragmentPosition(), fsName);
39 // scale y by xRadius/yRadius
40 builder->fFSCode.appendf("\toffset.y *= %s.w;\n", fsName);
41 builder->fFSCode.append("\tfloat d = length(offset);\n");
42 // compare length against xRadius
43 builder->fFSCode.appendf("\tedgeAlpha = smoothstep(d - 0.5, d + 0.5, %s. z);\n", fsName);
44 builder->fFSCode.appendf("\t%s = ", outputColor);
45 GrGLSLModulate4f(&builder->fFSCode, inputColor, "edgeAlpha");
46 builder->fFSCode.append(";\n");
47
48 }
49
50 static inline EffectKey GenKey(const GrEffectStage& stage, const GrGLCaps&) {
51 return 0;
52 }
53
54 virtual void setData(const GrGLUniformManager& uman, const GrEffectStage& st age) SK_OVERRIDE {
55 }
56
57 private:
58 typedef GrGLEffect INHERITED;
59 };
60
61 ///////////////////////////////////////////////////////////////////////////////
62
63 GrEllipseEdgeEffect::GrEllipseEdgeEffect() : GrEffect() {
64 this->addVertexAttribName(ELLIPSE_EDGE_ATTR0);
65 }
66
67 void GrEllipseEdgeEffect::getConstantColorComponents(GrColor* color, uint32_t* v alidFlags) const {
68 *validFlags = 0;
69 }
70
71 const GrBackendEffectFactory& GrEllipseEdgeEffect::getFactory() const {
72 return GrTBackendEffectFactory<GrEllipseEdgeEffect>::getInstance();
73 }
74
75 ///////////////////////////////////////////////////////////////////////////////
76
77 GR_DEFINE_EFFECT_TEST(GrEllipseEdgeEffect);
78
79 GrEffectRef* GrEllipseEdgeEffect::TestCreate(SkMWCRandom* random,
80 GrContext* context,
81 GrTexture* textures[]) {
82 return GrEllipseEdgeEffect::Create();
83 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698