Edit

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

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-11-27 11:34:27
    Hash : b980c563
    Message : Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@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>
    inline void SetSamplerParameter(const rx::FunctionsGL *functions,
                                    GLuint sampler,
                                    GLenum name,
                                    const T &value)
    {
        functions->samplerParameterf(sampler, name, static_cast<GLfloat>(value));
    }
    
    inline void SetSamplerParameter(const rx::FunctionsGL *functions,
                                    GLuint sampler,
                                    GLenum name,
                                    const angle::ColorGeneric &value)
    {
        switch (value.type)
        {
            case angle::ColorGeneric::Type::Float:
                functions->samplerParameterfv(sampler, name, &value.colorF.red);
                break;
            case angle::ColorGeneric::Type::Int:
                functions->samplerParameterIiv(sampler, name, &value.colorI.red);
                break;
            case angle::ColorGeneric::Type::UInt:
                functions->samplerParameterIuiv(sampler, name, &value.colorUI.red);
                break;
            default:
                UNREACHABLE();
                break;
        }
    }
    
    template <typename Getter, typename Setter>
    static inline void SyncSamplerStateMember(const rx::FunctionsGL *functions,
                                              GLuint sampler,
                                              const gl::SamplerState &newState,
                                              gl::SamplerState &curState,
                                              GLenum name,
                                              Getter getter,
                                              Setter setter)
    {
        if ((curState.*getter)() != (newState.*getter)())
        {
            (curState.*setter)((newState.*getter)());
            SetSamplerParameter(functions, sampler, name, (newState.*getter)());
        }
    }
    }  // namespace
    
    namespace rx
    {
    
    SamplerGL::SamplerGL(const gl::SamplerState &state,
                         const FunctionsGL *functions,
                         StateManagerGL *stateManager)
        : SamplerImpl(state),
          mFunctions(functions),
          mStateManager(stateManager),
          mAppliedSamplerState(),
          mSamplerID(0)
    {
        mFunctions->genSamplers(1, &mSamplerID);
    }
    
    SamplerGL::~SamplerGL()
    {
        mStateManager->deleteSampler(mSamplerID);
        mSamplerID = 0;
    }
    
    void SamplerGL::syncState(const gl::Context *context)
    {
        // clang-format off
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::getMinFilter, &gl::SamplerState::setMinFilter);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::getMagFilter, &gl::SamplerState::setMagFilter);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_S, &gl::SamplerState::getWrapS, &gl::SamplerState::setWrapS);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_T, &gl::SamplerState::getWrapT, &gl::SamplerState::setWrapT);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_R, &gl::SamplerState::getWrapR, &gl::SamplerState::setWrapR);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::getMaxAnisotropy, &gl::SamplerState::setMaxAnisotropy);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MIN_LOD, &gl::SamplerState::getMinLod, &gl::SamplerState::setMinLod);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAX_LOD, &gl::SamplerState::getMaxLod, &gl::SamplerState::setMaxLod);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::getCompareMode, &gl::SamplerState::setCompareMode);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::getCompareFunc, &gl::SamplerState::setCompareFunc);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_SRGB_DECODE_EXT, &gl::SamplerState::getSRGBDecode, &gl::SamplerState::setSRGBDecode);
        SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_BORDER_COLOR, &gl::SamplerState::getBorderColor, &gl::SamplerState::setBorderColor);
        // clang-format on
    }
    
    GLuint SamplerGL::getSamplerID() const
    {
        return mSamplerID;
    }
    }  // namespace rx