Edit

kc3-lang/angle/src/libANGLE/ContextState.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/ContextState.cpp
  • //
    // Copyright (c) 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.
    //
    
    // Data.cpp: Container class for all GL relevant state, caps and objects
    
    #include "libANGLE/ContextState.h"
    
    #include "libANGLE/Framebuffer.h"
    #include "libANGLE/ResourceManager.h"
    
    namespace gl
    {
    
    namespace
    {
    
    template <typename T>
    using ContextStateMember = T *(ContextState::*);
    
    template <typename T>
    T *AllocateOrGetSharedResourceManager(const ContextState *shareContextState,
                                          ContextStateMember<T> member)
    {
        if (shareContextState)
        {
            T *resourceManager = (*shareContextState).*member;
            resourceManager->addRef();
            return resourceManager;
        }
        else
        {
            return new T();
        }
    }
    
    TextureManager *AllocateOrGetSharedTextureManager(const ContextState *shareContextState,
                                                      TextureManager *shareTextures,
                                                      ContextStateMember<TextureManager> member)
    {
        if (shareContextState)
        {
            TextureManager *textureManager = (*shareContextState).*member;
            ASSERT(shareTextures == nullptr || textureManager == shareTextures);
            textureManager->addRef();
            return textureManager;
        }
        else if (shareTextures)
        {
            TextureManager *textureManager = shareTextures;
            textureManager->addRef();
            return textureManager;
        }
        else
        {
            return new TextureManager();
        }
    }
    
    }  // anonymous namespace
    
    ContextState::ContextState(ContextID contextIn,
                               const ContextState *shareContextState,
                               TextureManager *shareTextures,
                               const Version &clientVersion,
                               State *stateIn,
                               const Caps &capsIn,
                               const TextureCapsMap &textureCapsIn,
                               const Extensions &extensionsIn,
                               const Limitations &limitationsIn)
        : mClientVersion(clientVersion),
          mContext(contextIn),
          mState(stateIn),
          mCaps(capsIn),
          mTextureCaps(textureCapsIn),
          mExtensions(extensionsIn),
          mLimitations(limitationsIn),
          mBuffers(AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mBuffers)),
          mShaderPrograms(
              AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mShaderPrograms)),
          mTextures(AllocateOrGetSharedTextureManager(shareContextState,
                                                      shareTextures,
                                                      &ContextState::mTextures)),
          mRenderbuffers(
              AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mRenderbuffers)),
          mSamplers(AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mSamplers)),
          mSyncs(AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mSyncs)),
          mPaths(AllocateOrGetSharedResourceManager(shareContextState, &ContextState::mPaths)),
          mFramebuffers(new FramebufferManager()),
          mPipelines(new ProgramPipelineManager())
    {}
    
    ContextState::~ContextState()
    {
        // Handles are released by the Context.
    }
    
    bool ContextState::isWebGL() const
    {
        return mExtensions.webglCompatibility;
    }
    
    bool ContextState::isWebGL1() const
    {
        return (isWebGL() && mClientVersion.major == 2);
    }
    
    const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const
    {
        return mTextureCaps.get(internalFormat);
    }
    
    }  // namespace gl