diff options
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/Sampler.cpp')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/Sampler.cpp | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/Sampler.cpp b/gfx/angle/checkout/src/libANGLE/Sampler.cpp new file mode 100644 index 0000000000..3cfdbbdf4f --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/Sampler.cpp @@ -0,0 +1,211 @@ +// +// 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); + } +} + +angle::Result Sampler::setLabel(const Context *context, const std::string &label) +{ + mLabel = label; + + if (mSampler) + { + return mSampler->onLabelUpdate(context); + } + return angle::Result::Continue; +} + +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 |