| // |
| // 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.cpp : Implements the Sampler class, which represents a GLES 3 |
| // sampler object. Sampler objects store some state needed to sample textures. |
| |
| #include "libANGLE/Sampler.h" |
| #include "libANGLE/angletypes.h" |
| #include "libANGLE/renderer/GLImplFactory.h" |
| #include "libANGLE/renderer/SamplerImpl.h" |
| |
| namespace gl |
| { |
| |
| Sampler::Sampler(rx::GLImplFactory *factory, SamplerID id) |
| : RefCountObject(factory->generateSerial(), id), |
| mState(), |
| mDirty(true), |
| mSampler(factory->createSampler(mState)), |
| mLabel() |
| {} |
| |
| Sampler::~Sampler() |
| { |
| SafeDelete(mSampler); |
| } |
| |
| void Sampler::onDestroy(const Context *context) |
| { |
| if (mSampler) |
| { |
| mSampler->onDestroy(context); |
| } |
| } |
| |
| void Sampler::setLabel(const Context *context, const std::string &label) |
| { |
| mLabel = label; |
| } |
| |
| const std::string &Sampler::getLabel() const |
| { |
| return mLabel; |
| } |
| |
| void Sampler::setMinFilter(const Context *context, GLenum minFilter) |
| { |
| mState.setMinFilter(minFilter); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getMinFilter() const |
| { |
| return mState.getMinFilter(); |
| } |
| |
| void Sampler::setMagFilter(const Context *context, GLenum magFilter) |
| { |
| mState.setMagFilter(magFilter); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getMagFilter() const |
| { |
| return mState.getMagFilter(); |
| } |
| |
| void Sampler::setWrapS(const Context *context, GLenum wrapS) |
| { |
| mState.setWrapS(wrapS); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getWrapS() const |
| { |
| return mState.getWrapS(); |
| } |
| |
| void Sampler::setWrapT(const Context *context, GLenum wrapT) |
| { |
| mState.setWrapT(wrapT); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getWrapT() const |
| { |
| return mState.getWrapT(); |
| } |
| |
| void Sampler::setWrapR(const Context *context, GLenum wrapR) |
| { |
| mState.setWrapR(wrapR); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getWrapR() const |
| { |
| return mState.getWrapR(); |
| } |
| |
| void Sampler::setMaxAnisotropy(const Context *context, float maxAnisotropy) |
| { |
| mState.setMaxAnisotropy(maxAnisotropy); |
| signalDirtyState(); |
| } |
| |
| float Sampler::getMaxAnisotropy() const |
| { |
| return mState.getMaxAnisotropy(); |
| } |
| |
| void Sampler::setMinLod(const Context *context, GLfloat minLod) |
| { |
| mState.setMinLod(minLod); |
| signalDirtyState(); |
| } |
| |
| GLfloat Sampler::getMinLod() const |
| { |
| return mState.getMinLod(); |
| } |
| |
| void Sampler::setMaxLod(const Context *context, GLfloat maxLod) |
| { |
| mState.setMaxLod(maxLod); |
| signalDirtyState(); |
| } |
| |
| GLfloat Sampler::getMaxLod() const |
| { |
| return mState.getMaxLod(); |
| } |
| |
| void Sampler::setCompareMode(const Context *context, GLenum compareMode) |
| { |
| mState.setCompareMode(compareMode); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getCompareMode() const |
| { |
| return mState.getCompareMode(); |
| } |
| |
| void Sampler::setCompareFunc(const Context *context, GLenum compareFunc) |
| { |
| mState.setCompareFunc(compareFunc); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getCompareFunc() const |
| { |
| return mState.getCompareFunc(); |
| } |
| |
| void Sampler::setSRGBDecode(const Context *context, GLenum sRGBDecode) |
| { |
| mState.setSRGBDecode(sRGBDecode); |
| signalDirtyState(); |
| } |
| |
| GLenum Sampler::getSRGBDecode() const |
| { |
| return mState.getSRGBDecode(); |
| } |
| |
| void Sampler::setBorderColor(const Context *context, const ColorGeneric &color) |
| { |
| mState.setBorderColor(color); |
| signalDirtyState(); |
| } |
| |
| const ColorGeneric &Sampler::getBorderColor() const |
| { |
| return mState.getBorderColor(); |
| } |
| |
| const SamplerState &Sampler::getSamplerState() const |
| { |
| return mState; |
| } |
| |
| rx::SamplerImpl *Sampler::getImplementation() const |
| { |
| return mSampler; |
| } |
| |
| angle::Result Sampler::syncState(const Context *context) |
| { |
| ASSERT(isDirty()); |
| angle::Result result = mSampler->syncState(context, mDirty); |
| mDirty = result != angle::Result::Continue; |
| return result; |
| } |
| |
| void Sampler::signalDirtyState() |
| { |
| mDirty = true; |
| onStateChange(angle::SubjectMessage::DirtyBitsFlagged); |
| } |
| |
| } // namespace gl |