/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrGLSLSampler_DEFINED
#define GrGLSLSampler_DEFINED

#include "GrTypes.h"
#include "GrTypesPriv.h"
#include "SkString.h"

class GrGLSLSampler {
public:
    virtual ~GrGLSLSampler() {}

    explicit GrGLSLSampler(uint32_t visibility, GrPixelConfig config)
        : fVisibility(visibility)
        , fConfig(config) {
        SkASSERT(kUnknown_GrPixelConfig != fConfig);
    }

    uint32_t visibility() const { return fVisibility; }
    GrPixelConfig config() const { return fConfig; }
    virtual GrSLType type() const = 0;

    // Returns the string to be used for the sampler in glsl 2D texture functions (texture,
    // texture2D, etc.)
    const char* getSamplerNameForTexture2D() const {
        SkASSERT(GrSLTypeIs2DCombinedSamplerType(this->type()));
        return this->onGetSamplerNameForTexture2D();
    }

    // Returns the string to be used for the sampler in glsl texelFetch.
    virtual const char* getSamplerNameForTexelFetch() const = 0;

private:
    virtual const char* onGetSamplerNameForTexture2D() const = 0;
    uint32_t      fVisibility;
    GrPixelConfig fConfig;
};

#endif
