//
// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// Sampler.h : Defines the Sampler class, which represents a GLES 3
// sampler object. Sampler objects store some state needed to sample textures.

#ifndef LIBANGLE_SAMPLER_H_
#define LIBANGLE_SAMPLER_H_

#include "libANGLE/RefCountObject.h"
#include "libANGLE/export.h"

namespace gl
{
struct SamplerState;

class ANGLE_EXPORT Sampler : public RefCountObject
{
  public:
    Sampler(GLuint id);

    void setMinFilter(GLenum minFilter) { mMinFilter = minFilter; }
    void setMagFilter(GLenum magFilter) { mMagFilter = magFilter; }
    void setWrapS(GLenum wrapS) { mWrapS = wrapS; }
    void setWrapT(GLenum wrapT) { mWrapT = wrapT; }
    void setWrapR(GLenum wrapR) { mWrapR = wrapR; }
    void setMinLod(GLfloat minLod) { mMinLod = minLod; }
    void setMaxLod(GLfloat maxLod) { mMaxLod = maxLod; }
    void setComparisonMode(GLenum comparisonMode) { mComparisonMode = comparisonMode; }
    void setComparisonFunc(GLenum comparisonFunc) { mComparisonFunc = comparisonFunc; }

    GLenum getMinFilter() const { return mMinFilter; }
    GLenum getMagFilter() const { return mMagFilter; }
    GLenum getWrapS() const { return mWrapS; }
    GLenum getWrapT() const { return mWrapT; }
    GLenum getWrapR() const { return mWrapR; }
    GLfloat getMinLod() const { return mMinLod; }
    GLfloat getMaxLod() const { return mMaxLod; }
    GLenum getComparisonMode() const { return mComparisonMode; }
    GLenum getComparisonFunc() const { return mComparisonFunc; }

    void getState(SamplerState *samplerState) const;

  private:
    GLenum mMinFilter;
    GLenum mMagFilter;
    GLenum mWrapS;
    GLenum mWrapT;
    GLenum mWrapR;
    GLfloat mMinLod;
    GLfloat mMaxLod;
    GLenum mComparisonMode;
    GLenum mComparisonFunc;
};

}

#endif // LIBANGLE_SAMPLER_H_
