OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2014 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 GrGLPathRendering_DEFINED |
| 9 #define GrGLPathRendering_DEFINED |
| 10 |
| 11 #include "SkRefCnt.h" |
| 12 #include "gl/GrGLFunctions.h" |
| 13 |
| 14 class GrGLNameAllocator; |
| 15 struct GrGLInterface; |
| 16 |
| 17 /** |
| 18 * This class wraps the NV_path_rendering extension and manages its various |
| 19 * API versions. If a method is not present in the GrGLInterface (because the |
| 20 * driver version is old), it tries to provide a backup implementation. But if |
| 21 * a backup implementation is not practical, it marks the method as not |
| 22 * supported. |
| 23 */ |
| 24 class GrGLPathRendering { |
| 25 public: |
| 26 /** |
| 27 * Create a new GrGLPathRendering object from a given GL interface. Unless |
| 28 * otherwise specified in the caps, every method will work properly, even |
| 29 * if it did not exist in the GL interface. |
| 30 */ |
| 31 static GrGLPathRendering* Create(const GrGLInterface*); |
| 32 virtual ~GrGLPathRendering(); |
| 33 |
| 34 /** |
| 35 * Mark certain functionality as not supported if the driver version is too |
| 36 * old and a backup implementation is not practical. |
| 37 */ |
| 38 struct Caps { |
| 39 bool fragmentInputGenSupport : 1; |
| 40 }; |
| 41 const Caps& caps() const { return fCaps; } |
| 42 |
| 43 /** |
| 44 * Called when the GPU resources have been lost and need to be abandoned |
| 45 * (for example after a context loss). |
| 46 */ |
| 47 void abandonGpuResources(); |
| 48 |
| 49 // NV_path_rendering |
| 50 GrGLuint genPaths(GrGLsizei range); |
| 51 GrGLvoid deletePaths(GrGLuint path, GrGLsizei range); |
| 52 GrGLvoid pathCommands(GrGLuint path, GrGLsizei numCommands, const GrGLubyte
*commands, |
| 53 GrGLsizei numCoords, GrGLenum coordType, const GrGLvoi
d *coords); |
| 54 GrGLvoid pathCoords(GrGLuint path, GrGLsizei numCoords, |
| 55 GrGLenum coordType, const GrGLvoid *coords); |
| 56 GrGLvoid pathParameteri(GrGLuint path, GrGLenum pname, GrGLint value); |
| 57 GrGLvoid pathParameterf(GrGLuint path, GrGLenum pname, GrGLfloat value); |
| 58 GrGLboolean isPath(GrGLuint path); |
| 59 GrGLvoid pathStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask); |
| 60 GrGLvoid stencilFillPath(GrGLuint path, GrGLenum fillMode, GrGLuint mask); |
| 61 GrGLvoid stencilStrokePath(GrGLuint path, GrGLint reference, GrGLuint mask); |
| 62 GrGLvoid stencilFillPathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
| 63 const GrGLvoid *paths, GrGLuint pathBase,
GrGLenum fillMode, |
| 64 GrGLuint mask, GrGLenum transformType, |
| 65 const GrGLfloat *transformValues); |
| 66 GrGLvoid stencilStrokePathInstanced(GrGLsizei numPaths, GrGLenum pathNameTyp
e, |
| 67 const GrGLvoid *paths, GrGLuint pathBase
, |
| 68 GrGLint reference, GrGLuint mask, GrGLen
um transformType, |
| 69 const GrGLfloat *transformValues); |
| 70 GrGLvoid pathTexGen(GrGLenum texCoordSet, GrGLenum genMode, |
| 71 GrGLint components, const GrGLfloat *coeffs); |
| 72 GrGLvoid coverFillPath(GrGLuint path, GrGLenum coverMode); |
| 73 GrGLvoid coverStrokePath(GrGLuint name, GrGLenum coverMode); |
| 74 GrGLvoid coverFillPathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
| 75 const GrGLvoid *paths, GrGLuint pathBase, Gr
GLenum coverMode, |
| 76 GrGLenum transformType, const GrGLfloat *tra
nsformValues); |
| 77 GrGLvoid coverStrokePathInstanced(GrGLsizei numPaths, GrGLenum pathNameType, |
| 78 const GrGLvoid *paths, GrGLuint pathBase,
GrGLenum coverMode, |
| 79 GrGLenum transformType, const GrGLfloat* t
ransformValues); |
| 80 |
| 81 // NV_path_rendering v1.2 |
| 82 virtual GrGLvoid stencilThenCoverFillPath(GrGLuint path, GrGLenum fillMode, |
| 83 GrGLuint mask, GrGLenum coverMode)
; |
| 84 virtual GrGLvoid stencilThenCoverStrokePath(GrGLuint path, GrGLint reference
, |
| 85 GrGLuint mask, GrGLenum coverMod
e); |
| 86 virtual GrGLvoid stencilThenCoverFillPathInstanced( |
| 87 GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvo
id *paths, |
| 88 GrGLuint pathBase, GrGLenum fillMode, GrGLuint mask, Gr
GLenum coverMode, |
| 89 GrGLenum transformType, const GrGLfloat *transformValue
s); |
| 90 virtual GrGLvoid stencilThenCoverStrokePathInstanced( |
| 91 GrGLsizei numPaths, GrGLenum pathNameType, const GrGLvo
id *paths, |
| 92 GrGLuint pathBase, GrGLint reference, GrGLuint mask, Gr
GLenum coverMode, |
| 93 GrGLenum transformType, const GrGLfloat *transformValue
s); |
| 94 |
| 95 // NV_path_rendering v1.3 |
| 96 virtual GrGLvoid programPathFragmentInputGen(GrGLuint program, GrGLint locat
ion, |
| 97 GrGLenum genMode, GrGLint compo
nents, |
| 98 const GrGLfloat *coeffs); |
| 99 |
| 100 protected: |
| 101 GrGLPathRendering(const GrGLInterface*); |
| 102 |
| 103 SkAutoTUnref<const GrGLInterface> fGLInterface; |
| 104 SkAutoTDelete<GrGLNameAllocator> fPathNameAllocator; |
| 105 Caps fCaps; |
| 106 }; |
| 107 |
| 108 #endif |
OLD | NEW |