GrCustomXfermodePriv.h revision 0063a9b69a6a5d377f207c2aa1ea1e7220c19ba9
10063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel/*
20063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel * Copyright 2015 Google Inc.
30063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel *
40063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel * Use of this source code is governed by a BSD-style license that can be
50063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel * found in the LICENSE file.
60063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel */
70063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
80063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#ifndef GrCustomXfermodePriv_DEFINED
90063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#define GrCustomXfermodePriv_DEFINED
100063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
110063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#include "GrCoordTransform.h"
120063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#include "GrFragmentProcessor.h"
130063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#include "GrTextureAccess.h"
140063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#include "SkXfermode.h"
150063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
160063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrGLCaps;
170063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrGLFragmentProcessor;
180063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrInvariantOutput;
190063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrProcessorKeyBuilder;
200063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrTexture;
210063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
220063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel///////////////////////////////////////////////////////////////////////////////
230063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel// Fragment Processor
240063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel///////////////////////////////////////////////////////////////////////////////
250063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
260063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielclass GrCustomXferFP : public GrFragmentProcessor {
270063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielpublic:
280063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    GrCustomXferFP(SkXfermode::Mode mode, GrTexture* background);
290063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
300063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
310063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
320063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
330063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
340063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    const char* name() const SK_OVERRIDE { return "Custom Xfermode"; }
350063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
360063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    SkXfermode::Mode mode() const { return fMode; }
370063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    const GrTextureAccess&  backgroundAccess() const { return fBackgroundAccess; }
380063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
390063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdanielprivate:
400063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    bool onIsEqual(const GrFragmentProcessor& other) const SK_OVERRIDE;
410063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
420063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
430063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
440063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
450063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
460063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    SkXfermode::Mode fMode;
470063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    GrCoordTransform fBackgroundTransform;
480063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    GrTextureAccess  fBackgroundAccess;
490063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
500063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel    typedef GrFragmentProcessor INHERITED;
510063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel};
520063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
530063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel#endif
540063a9b69a6a5d377f207c2aa1ea1e7220c19ba9egdaniel
55