diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp new file mode 100644 index 000000000..bffc89ec9 --- /dev/null +++ b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/SamplerGL.cpp @@ -0,0 +1,72 @@ +// +// Copyright 2014 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. +// + +// SamplerGL.cpp: Defines the rx::SamplerGL class, an implementation of SamplerImpl. + +#include "libANGLE/renderer/gl/SamplerGL.h" + +#include "libANGLE/renderer/gl/FunctionsGL.h" +#include "libANGLE/renderer/gl/StateManagerGL.h" + +namespace +{ + +template <typename T> +static inline void SyncSamplerStateMember(const rx::FunctionsGL *functions, + GLuint sampler, + const gl::SamplerState &newState, + gl::SamplerState &curState, + GLenum name, + T(gl::SamplerState::*samplerMember)) +{ + if (curState.*samplerMember != newState.*samplerMember) + { + curState.*samplerMember = newState.*samplerMember; + functions->samplerParameterf(sampler, name, static_cast<GLfloat>(curState.*samplerMember)); + } +} +} + +namespace rx +{ + +SamplerGL::SamplerGL(const FunctionsGL *functions, StateManagerGL *stateManager) + : SamplerImpl(), + mFunctions(functions), + mStateManager(stateManager), + mAppliedSamplerState(), + mSamplerID(0) +{ + mFunctions->genSamplers(1, &mSamplerID); +} + +SamplerGL::~SamplerGL() +{ + mStateManager->deleteSampler(mSamplerID); + mSamplerID = 0; +} + +void SamplerGL::syncState(const gl::SamplerState &samplerState) const +{ + // clang-format off + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::minFilter); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::magFilter); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_WRAP_S, &gl::SamplerState::wrapS); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_WRAP_T, &gl::SamplerState::wrapT); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_WRAP_R, &gl::SamplerState::wrapR); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::maxAnisotropy); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MIN_LOD, &gl::SamplerState::minLod); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MAX_LOD, &gl::SamplerState::maxLod); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::compareMode); + SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::compareFunc); + // clang-format on +} + +GLuint SamplerGL::getSamplerID() const +{ + return mSamplerID; +} +} |