Index: src/gpu/gl/GrGLPathRendering.h |
diff --git a/src/gpu/gl/GrGLPathRendering.h b/src/gpu/gl/GrGLPathRendering.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..53b8750356bfd3caa347dba382fedca586f83b9c |
--- /dev/null |
+++ b/src/gpu/gl/GrGLPathRendering.h |
@@ -0,0 +1,108 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef GrGLPathRendering_DEFINED |
+#define GrGLPathRendering_DEFINED |
+ |
+#include "SkRefCnt.h" |
+#include "gl/GrGLFunctions.h" |
+ |
+class GrGLNameAllocator; |
+struct GrGLInterface; |
+ |
+/** |
+ * 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. |
+ */ |
+class GrGLPathRendering { |
+public: |
+ /** |
+ * Create a new GrGLPathRendering object from a given GL interface. Unless |
+ * otherwise specified in the caps, every method will work properly, even |
+ * if it did not exist in the GL interface. |
+ */ |
+ static GrGLPathRendering* Create(const GrGLInterface*); |
+ virtual ~GrGLPathRendering(); |
+ |
+ /** |
+ * Mark certain functionality as not supported if the driver version is too |
+ * old and a backup implementation is not practical. |
+ */ |
+ struct Caps { |
+ bool fragmentInputGenSupport : 1; |
+ }; |
+ const Caps& caps() const { return fCaps; } |
+ |
+ /** |
+ * Called when the GPU resources have been lost and need to be abandoned |
+ * (for example after a context loss). |
+ */ |
+ void abandonGpuResources(); |
+ |
+ // NV_path_rendering |
+ GrGLuint genPaths(GrGLsizei range); |
+ GrGLvoid deletePaths(GrGLuint path, GrGLsizei range); |
+ GrGLvoid pathCommands(GrGLuint path, GrGLsizei numCommands, const GrGLubyte *commands, |
+ GrGLsizei numCoords, GrGLenum coordType, const GrGLvoid *coords); |
+ GrGLvoid pathCoords(GrGLuint path, GrGLsizei numCoords, |
+ GrGLenum coordType, const GrGLvoid *coords); |
+ GrGLvoid pathParameteri(GrGLuint path, GrGLenum pname, GrGLint value); |
+ GrGLvoid pathParameterf(GrGLuint path, GrGLenum pname, GrGLfloat value); |
+ GrGLboolean isPath(GrGLuint path); |
+ GrGLvoid pathStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask); |
+ GrGLvoid stencilFillPath(GrGLuint path, GrGLenum fillMode, GrGLuint mask); |
+ GrGLvoid stencilStrokePath(GrGLuint path, GrGLint reference, GrGLuint mask); |
+ GrGLvoid stencilFillPathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
+ const GrGLvoid *paths, GrGLuint pathBase, GrGLenum fillMode, |
+ GrGLuint mask, GrGLenum transformType, |
+ const GrGLfloat *transformValues); |
+ GrGLvoid stencilStrokePathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
+ const GrGLvoid *paths, GrGLuint pathBase, |
+ GrGLint reference, GrGLuint mask, GrGLenum transformType, |
+ const GrGLfloat *transformValues); |
+ GrGLvoid pathTexGen(GrGLenum texCoordSet, GrGLenum genMode, |
+ GrGLint components, const GrGLfloat *coeffs); |
+ GrGLvoid coverFillPath(GrGLuint path, GrGLenum coverMode); |
+ GrGLvoid coverStrokePath(GrGLuint name, GrGLenum coverMode); |
+ GrGLvoid coverFillPathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
+ const GrGLvoid *paths, GrGLuint pathBase, GrGLenum coverMode, |
+ GrGLenum transformType, const GrGLfloat *transformValues); |
+ GrGLvoid coverStrokePathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
+ const GrGLvoid *paths, GrGLuint pathBase, GrGLenum coverMode, |
+ GrGLenum transformType, const GrGLfloat* transformValues); |
+ |
+ // NV_path_rendering v1.2 |
+ virtual GrGLvoid stencilThenCoverFillPath(GrGLuint path, GrGLenum fillMode, |
+ GrGLuint mask, GrGLenum coverMode); |
+ virtual GrGLvoid stencilThenCoverStrokePath(GrGLuint path, GrGLint reference, |
+ GrGLuint mask, GrGLenum coverMode); |
+ virtual GrGLvoid stencilThenCoverFillPathInstanced( |
+ GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, |
+ GrGLuint pathBase, GrGLenum fillMode, GrGLuint mask, GrGLenum coverMode, |
+ GrGLenum transformType, const GrGLfloat *transformValues); |
+ virtual GrGLvoid stencilThenCoverStrokePathInstanced( |
+ GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvoid *paths, |
+ GrGLuint pathBase, GrGLint reference, GrGLuint mask, GrGLenum coverMode, |
+ GrGLenum transformType, const GrGLfloat *transformValues); |
+ |
+ // NV_path_rendering v1.3 |
+ virtual GrGLvoid programPathFragmentInputGen(GrGLuint program, GrGLint location, |
+ GrGLenum genMode, GrGLint components, |
+ const GrGLfloat *coeffs); |
+ |
+protected: |
+ GrGLPathRendering(const GrGLInterface*); |
+ |
+ SkAutoTUnref<const GrGLInterface> fGLInterface; |
+ SkAutoTDelete<GrGLNameAllocator> fPathNameAllocator; |
+ Caps fCaps; |
+}; |
+ |
+#endif |