| Index: src/gpu/gl/GrGLUniformManager.h
 | 
| diff --git a/src/gpu/gl/GrGLUniformManager.h b/src/gpu/gl/GrGLUniformManager.h
 | 
| index ee693a6a5bba7d8554416a07f5b43b9e9c3504a7..863d66facdcec40c9d6fa054c6403dc8f93696ab 100644
 | 
| --- a/src/gpu/gl/GrGLUniformManager.h
 | 
| +++ b/src/gpu/gl/GrGLUniformManager.h
 | 
| @@ -22,8 +22,29 @@ class SkMatrix;
 | 
|  class GrGLUniformManager {
 | 
|  public:
 | 
|      // Opaque handle to a uniform
 | 
| -    typedef int UniformHandle;
 | 
| -    static const UniformHandle kInvalidUniformHandle = 0;
 | 
| +    class UniformHandle {
 | 
| +    public:
 | 
| +        static UniformHandle CreateFromUniformIndex(int i);
 | 
| +
 | 
| +        bool isValid() const { return 0 != fValue; }
 | 
| +
 | 
| +        bool operator==(const UniformHandle& other) const { return other.fValue == fValue; }
 | 
| +
 | 
| +        UniformHandle()
 | 
| +            : fValue(0) {
 | 
| +        }
 | 
| +
 | 
| +    private:
 | 
| +        UniformHandle(int value)
 | 
| +            : fValue(~value) {
 | 
| +            GrAssert(isValid());
 | 
| +        }
 | 
| +
 | 
| +        int toUniformIndex() const { GrAssert(isValid()); return ~fValue; }
 | 
| +
 | 
| +        int fValue;
 | 
| +        friend class GrGLUniformManager; // For accessing toUniformIndex().
 | 
| +    };
 | 
|  
 | 
|      GrGLUniformManager(const GrGLContext& context) : fContext(context) {}
 | 
|  
 | 
| @@ -65,6 +86,11 @@ public:
 | 
|       */
 | 
|      void getUniformLocations(GrGLuint programID, const BuilderUniformArray& uniforms);
 | 
|  
 | 
| +    /**
 | 
| +     * Called by the GrGLShaderBuilder to access the array by the handle (index).
 | 
| +     */
 | 
| +    const BuilderUniform& getBuilderUniform(const BuilderUniformArray&, GrGLUniformManager::UniformHandle) const;
 | 
| +
 | 
|  private:
 | 
|      enum {
 | 
|          kUnusedUniform = -1,
 | 
| 
 |