• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 
11 #ifndef GrGpuGLShaders_DEFINED
12 #define GrGpuGLShaders_DEFINED
13 
14 #include "GrGpuGL.h"
15 #include "GrGLProgram.h"
16 
17 class GrGpuGLProgram;
18 
19 // Programmable OpenGL or OpenGL ES 2.0
20 class GrGpuGLShaders : public GrGpuGL {
21 public:
22              GrGpuGLShaders(const GrGLContextInfo& ctxInfo);
23     virtual ~GrGpuGLShaders();
24 
25     virtual void abandonResources();
26 
27     bool programUnitTest();
28 
29 protected:
30     // overrides from GrGpu
31     virtual void onResetContext() SK_OVERRIDE;
32     virtual bool flushGraphicsState(GrPrimitiveType type);
33     virtual void setupGeometry(int* startVertex,
34                                int* startIndex,
35                                int vertexCount,
36                                int indexCount);
37     virtual void postDraw();
38 
39 private:
40 
41     // for readability of function impls
42     typedef GrGLProgram::ProgramDesc ProgramDesc;
43     typedef ProgramDesc::StageDesc   StageDesc;
44     typedef GrGLProgram::CachedData  CachedData;
45 
46     class ProgramCache;
47 
48     // Helpers to make code more readable
49     const GrMatrix& getHWViewMatrix();
50     void recordHWViewMatrix(const GrMatrix& matrix);
51     const GrMatrix& getHWSamplerMatrix(int stage);
52     void recordHWSamplerMatrix(int stage, const GrMatrix& matrix);
53 
54     // sets the texture matrix uniform for currently bound program
55     void flushTextureMatrix(int stage);
56 
57     // sets the texture domain uniform for currently bound program
58     void flushTextureDomain(int stage);
59 
60     // sets the color specified by GrDrawState::setColor()
61     void flushColor(GrColor color);
62 
63     // sets the color specified by GrDrawState::setCoverage()
64     void flushCoverage(GrColor color);
65 
66     // sets the MVP matrix uniform for currently bound program
67     void flushViewMatrix();
68 
69     // flushes the parameters to two point radial gradient
70     void flushRadial2(int stage);
71 
72     // flushes the parameters for convolution
73     void flushConvolution(int stage);
74 
75     // flushes the normalized texel size
76     void flushTexelSize(int stage);
77 
78     // flushes the edges for edge AA
79     void flushEdgeAAData();
80 
81     // flushes the color matrix
82     void flushColorMatrix();
83 
84     static void DeleteProgram(const GrGLInterface* gl,
85                               CachedData* programData);
86 
87     void buildProgram(GrPrimitiveType typeBlend,
88                       BlendOptFlags blendOpts,
89                       GrBlendCoeff dstCoeff);
90 
91     ProgramCache*               fProgramCache;
92     CachedData*                 fProgramData;
93     GrGLuint                    fHWProgramID;
94     GrGLProgram                 fCurrentProgram;
95     // If we get rid of fixed function subclass this should move
96     // to the GLCaps struct in parent class
97     GrGLint                     fMaxVertexAttribs;
98 
99     typedef GrGpuGL INHERITED;
100 };
101 
102 #endif
103 
104