Edit

kc3-lang/angle/src/libANGLE/renderer/gl/SamplerGL.cpp

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2016-10-19 14:07:52
    Hash : 81c6b577
    Message : Implement GL_EXT_texture_sRGB_decode for GL. BUG=angleproject:1383 BUG=655247 Change-Id: I409b12e1ae418530576de5ec9ce26b7be5d91650 Reviewed-on: https://chromium-review.googlesource.com/400807 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/renderer/gl/SamplerGL.cpp
  • //
    // 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);
        SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_SRGB_DECODE_EXT, &gl::SamplerState::sRGBDecode);
        // clang-format on
    }
    
    GLuint SamplerGL::getSamplerID() const
    {
        return mSamplerID;
    }
    }