Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2016 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 GrResourceHandle_DEFINED
      9 #define GrResourceHandle_DEFINED
     10 
     11 #include "SkTypes.h"
     12 
     13 // Opaque handle to a resource. Users should always use the macro below to create a specific
     14 // template instantiation of GrResourceHandle.
     15 template <typename kind> class GrResourceHandle {
     16 public:
     17     GrResourceHandle(int value) : fValue(value) {
     18         SkASSERT(this->isValid());
     19     }
     20 
     21     GrResourceHandle() : fValue(kInvalid_ResourceHandle) {}
     22 
     23     bool operator==(const GrResourceHandle& other) const { return other.fValue == fValue; }
     24     bool isValid() const { return kInvalid_ResourceHandle != fValue; }
     25     int toIndex() const { SkASSERT(this->isValid()); return fValue; }
     26 
     27 private:
     28     static const int kInvalid_ResourceHandle = -1;
     29     int fValue;
     30 };
     31 
     32 // Creates a type "name", which is a specfic template instantiation of GrResourceHandle.
     33 #define GR_DEFINE_RESOURCE_HANDLE_CLASS(name) \
     34     struct name##Kind {};  \
     35     using name = GrResourceHandle<name##Kind>;
     36 #endif
     37