| // | |
| // Copyright 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/Debug.h" | |
| #include "libANGLE/Observer.h" | |
| #include "libANGLE/RefCountObject.h" | |
| #include "libANGLE/angletypes.h" | |
| namespace rx | |
| { | |
| class GLImplFactory; | |
| class SamplerImpl; | |
| } // namespace rx | |
| namespace gl | |
| { | |
| class Sampler final : public RefCountObject<SamplerID>, public LabeledObject, public angle::Subject | |
| { | |
| public: | |
| Sampler(rx::GLImplFactory *factory, SamplerID id); | |
| ~Sampler() override; | |
| void onDestroy(const Context *context) override; | |
| angle::Result setLabel(const Context *context, const std::string &label) override; | |
| const std::string &getLabel() const override; | |
| void setMinFilter(const Context *context, GLenum minFilter); | |
| GLenum getMinFilter() const; | |
| void setMagFilter(const Context *context, GLenum magFilter); | |
| GLenum getMagFilter() const; | |
| void setWrapS(const Context *context, GLenum wrapS); | |
| GLenum getWrapS() const; | |
| void setWrapT(const Context *context, GLenum wrapT); | |
| GLenum getWrapT() const; | |
| void setWrapR(const Context *context, GLenum wrapR); | |
| GLenum getWrapR() const; | |
| void setMaxAnisotropy(const Context *context, float maxAnisotropy); | |
| float getMaxAnisotropy() const; | |
| void setMinLod(const Context *context, GLfloat minLod); | |
| GLfloat getMinLod() const; | |
| void setMaxLod(const Context *context, GLfloat maxLod); | |
| GLfloat getMaxLod() const; | |
| void setCompareMode(const Context *context, GLenum compareMode); | |
| GLenum getCompareMode() const; | |
| void setCompareFunc(const Context *context, GLenum compareFunc); | |
| GLenum getCompareFunc() const; | |
| void setSRGBDecode(const Context *context, GLenum sRGBDecode); | |
| GLenum getSRGBDecode() const; | |
| void setBorderColor(const Context *context, const ColorGeneric &color); | |
| const ColorGeneric &getBorderColor() const; | |
| const SamplerState &getSamplerState() const { return mState; } | |
| rx::SamplerImpl *getImplementation() const; | |
| angle::Result syncState(const Context *context); | |
| bool isDirty() const { return mDirty; } | |
| private: | |
| void signalDirtyState(); | |
| SamplerState mState; | |
| bool mDirty; | |
| rx::SamplerImpl *mSampler; | |
| std::string mLabel; | |
| }; | |
| } // namespace gl | |
| #endif // LIBANGLE_SAMPLER_H_ |