| Index: src/gpu/gl/GrGLPathRendering.h
|
| diff --git a/src/gpu/gl/GrGLPathRendering.h b/src/gpu/gl/GrGLPathRendering.h
|
| index 53b8750356bfd3caa347dba382fedca586f83b9c..e16f0591a7706e7e4fa1ff85e80b9f05c275add3 100644
|
| --- a/src/gpu/gl/GrGLPathRendering.h
|
| +++ b/src/gpu/gl/GrGLPathRendering.h
|
| @@ -9,28 +9,40 @@
|
| #define GrGLPathRendering_DEFINED
|
|
|
| #include "SkRefCnt.h"
|
| +#include "GrPathRendering.h"
|
| +#include "GrStencil.h"
|
| #include "gl/GrGLFunctions.h"
|
| +#include "gl/GrGLProgram.h"
|
|
|
| class GrGLNameAllocator;
|
| -struct GrGLInterface;
|
| +class GrGpuGL;
|
|
|
| /**
|
| * This class wraps the NV_path_rendering extension and manages its various
|
| - * API versions. If a method is not present in the GrGLInterface (because the
|
| - * driver version is old), it tries to provide a backup implementation. But if
|
| - * a backup implementation is not practical, it marks the method as not
|
| - * supported.
|
| + * API versions. If a method is not present in the GrGLInterface of the GrGpuGL
|
| + * (because the driver version is old), it tries to provide a backup
|
| + * implementation. But if a backup implementation is not practical, it marks the
|
| + * method as not supported.
|
| */
|
| -class GrGLPathRendering {
|
| +class GrGLPathRendering : public GrPathRendering {
|
| public:
|
| /**
|
| - * Create a new GrGLPathRendering object from a given GL interface. Unless
|
| + * Create a new GrGLPathRendering object from a given GrGpuGL. Unless
|
| * otherwise specified in the caps, every method will work properly, even
|
| - * if it did not exist in the GL interface.
|
| + * if it did not exist in the GL interface of the gpu.
|
| */
|
| - static GrGLPathRendering* Create(const GrGLInterface*);
|
| + static GrGLPathRendering* Create(GrGpuGL* gpu);
|
| virtual ~GrGLPathRendering();
|
|
|
| + // GrPathRendering implementations.
|
| + virtual GrPath* createPath(const SkPath&, const SkStrokeRec&) SK_OVERRIDE;
|
| + virtual GrPathRange* createPathRange(size_t size, const SkStrokeRec&) SK_OVERRIDE;
|
| + virtual void stencilPath(const GrPath*, SkPath::FillType) SK_OVERRIDE;
|
| + virtual void drawPath(const GrPath*, SkPath::FillType) SK_OVERRIDE;
|
| + virtual void drawPaths(const GrPathRange*, const uint32_t indices[], int count,
|
| + const float transforms[], PathTransformType,
|
| + SkPath::FillType) SK_OVERRIDE;
|
| +
|
| /**
|
| * Mark certain functionality as not supported if the driver version is too
|
| * old and a backup implementation is not practical.
|
| @@ -40,12 +52,29 @@ public:
|
| };
|
| const Caps& caps() const { return fCaps; }
|
|
|
| +
|
| + /* Called when the 3D context state is unknown. */
|
| + void resetContext();
|
| +
|
| /**
|
| * Called when the GPU resources have been lost and need to be abandoned
|
| * (for example after a context loss).
|
| */
|
| void abandonGpuResources();
|
|
|
| + enum PathTexGenComponents {
|
| + kS_PathTexGenComponents = 1,
|
| + kST_PathTexGenComponents = 2,
|
| + kSTR_PathTexGenComponents = 3
|
| + };
|
| + void enablePathTexGen(int unitIdx, PathTexGenComponents, const GrGLfloat* coefficients);
|
| + void enablePathTexGen(int unitIdx, PathTexGenComponents, const SkMatrix& matrix);
|
| + void flushPathTexGenSettings(int numUsedTexCoordSets);
|
| + void setProjectionMatrix(const SkMatrix& matrix,
|
| + const SkISize& renderTargetSize,
|
| + GrSurfaceOrigin renderTargetOrigin);
|
| +
|
| +
|
| // NV_path_rendering
|
| GrGLuint genPaths(GrGLsizei range);
|
| GrGLvoid deletePaths(GrGLuint path, GrGLsizei range);
|
| @@ -98,11 +127,24 @@ public:
|
| const GrGLfloat *coeffs);
|
|
|
| protected:
|
| - GrGLPathRendering(const GrGLInterface*);
|
| + GrGLPathRendering(GrGpuGL* gpu);
|
|
|
| - SkAutoTUnref<const GrGLInterface> fGLInterface;
|
| + GrGpuGL* fGpu;
|
| SkAutoTDelete<GrGLNameAllocator> fPathNameAllocator;
|
| Caps fCaps;
|
| + GrGLProgram::MatrixState fHWProjectionMatrixState;
|
| + GrStencilSettings fHWPathStencilSettings;
|
| + struct PathTexGenData {
|
| + GrGLenum fMode;
|
| + GrGLint fNumComponents;
|
| + GrGLfloat fCoefficients[3 * 3];
|
| + };
|
| + int fHWActivePathTexGenSets;
|
| + SkTArray<PathTexGenData, true> fHWPathTexGenSettings;
|
| +
|
| +private:
|
| + void flushPathStencilSettings(SkPath::FillType fill);
|
| +
|
| };
|
|
|
| #endif
|
|
|