blob: 170283102c1902e916cc23bf84d0191ae5c711bf [file] [log] [blame]
joshualitt3df1e212015-07-14 11:02:45 -07001/*
2 * Copyright 2015 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 GrStagedProcessorStage_DEFINED
9#define GrStagedProcessorStage_DEFINED
10
11#include "GrFragmentProcessor.h"
12#include "SkRefCnt.h"
13
14/**
15 * Wraps a GrFragmentProcessor, basically a copyable SkAutoTUnref
16 * Templatized based on the ref type so backends can use the same wrapper
17 */
18template<template<typename> class T>
19class GrStagedProcessor {
20public:
21 explicit GrStagedProcessor(const GrFragmentProcessor* proc) : fProc(SkRef(proc)) {}
22
23 GrStagedProcessor(const GrStagedProcessor& other) { fProc.reset(SkRef(other.fProc.get())); }
24
25 const GrFragmentProcessor* processor() const { return fProc.get(); }
26
27 bool operator==(const GrStagedProcessor& that) const {
28 return this->processor() == that.processor();
29 }
30
31 bool operator!=(const GrStagedProcessor& that) const { return !(*this == that); }
32
33 const char* name() const { return fProc->name(); }
34
35protected:
36 GrStagedProcessor() {}
37
38 T<const GrFragmentProcessor> fProc;
39};
40
41typedef GrStagedProcessor<SkAutoTUnref> GrFragmentStage;
42
43#endif