Edit

kc3-lang/angle/src/libANGLE/Surface.h

Branch :

  • Show log

    Commit

  • Author : John Bauman
    Date : 2015-12-09 16:44:29
    Hash : 49ae88ba
    Message : Implement EGL_ANGLE_direct_composition extension On D3D11, if dcomp.dll can be loaded then EGL_ANGLE_direct_composition is exposed. Setting EGL_DIRECT_COMPOSITION_ANGLE as an attrib on a surface will force it to use DirectComposition to draw to the screen, possibly saving power. BUG=524838 Change-Id: I3ea175a97bbca1a3388ffe52fdd1587a2f0c2ce7 Reviewed-on: https://chromium-review.googlesource.com/319214 Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: John Bauman <jbauman@chromium.org>

  • src/libANGLE/Surface.h
  • //
    // Copyright (c) 2002-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.
    //
    
    // Surface.h: Defines the egl::Surface class, representing a drawing surface
    // such as the client area of a window, including any back buffers.
    // Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
    
    #ifndef LIBANGLE_SURFACE_H_
    #define LIBANGLE_SURFACE_H_
    
    #include <EGL/egl.h>
    
    #include "common/angleutils.h"
    #include "libANGLE/Error.h"
    #include "libANGLE/FramebufferAttachment.h"
    #include "libANGLE/RefCountObject.h"
    #include "libANGLE/renderer/SurfaceImpl.h"
    
    namespace gl
    {
    class Framebuffer;
    class Texture;
    }
    
    namespace egl
    {
    class AttributeMap;
    class Display;
    struct Config;
    
    class Surface final : public gl::FramebufferAttachmentObject
    {
      public:
        Surface(rx::SurfaceImpl *impl, EGLint surfaceType, const egl::Config *config, const AttributeMap &attributes);
    
        rx::SurfaceImpl *getImplementation() { return mImplementation; }
        const rx::SurfaceImpl *getImplementation() const { return mImplementation; }
    
        EGLint getType() const;
    
        Error swap();
        Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height);
        Error querySurfacePointerANGLE(EGLint attribute, void **value);
        Error bindTexImage(gl::Texture *texture, EGLint buffer);
        Error releaseTexImage(EGLint buffer);
    
        EGLint isPostSubBufferSupported() const;
    
        void setSwapInterval(EGLint interval);
        void setIsCurrent(bool isCurrent);
        void onDestroy();
    
        const Config *getConfig() const;
    
        // width and height can change with client window resizing
        EGLint getWidth() const;
        EGLint getHeight() const;
        EGLint getPixelAspectRatio() const;
        EGLenum getRenderBuffer() const;
        EGLenum getSwapBehavior() const;
        EGLenum getTextureFormat() const;
        EGLenum getTextureTarget() const;
    
        gl::Texture *getBoundTexture() const { return mTexture.get(); }
        gl::Framebuffer *getDefaultFramebuffer() { return mDefaultFramebuffer; }
    
        EGLint isFixedSize() const;
    
        // FramebufferAttachmentObject implementation
        gl::Extents getAttachmentSize(const gl::FramebufferAttachment::Target &target) const override;
        GLenum getAttachmentInternalFormat(const gl::FramebufferAttachment::Target &target) const override;
        GLsizei getAttachmentSamples(const gl::FramebufferAttachment::Target &target) const override;
    
        void onAttach() override {}
        void onDetach() override {}
        GLuint getId() const override;
    
        bool flexibleSurfaceCompatibilityRequested() const
        {
            return mFlexibleSurfaceCompatibilityRequested;
        }
        EGLint getOrientation() const { return mOrientation; }
    
        bool directComposition() const { return mDirectComposition; }
    
      private:
        virtual ~Surface();
        rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override { return mImplementation; }
    
        gl::Framebuffer *createDefaultFramebuffer();
    
        // ANGLE-only method, used internally
        friend class gl::Texture;
        void releaseTexImageFromTexture();
    
        rx::SurfaceImpl *mImplementation;
        gl::Framebuffer *mDefaultFramebuffer;
        int mCurrentCount;
        bool mDestroyed;
    
        EGLint mType;
    
        const egl::Config *mConfig;
    
        bool mPostSubBufferRequested;
        bool mFlexibleSurfaceCompatibilityRequested;
    
        bool mFixedSize;
        size_t mFixedWidth;
        size_t mFixedHeight;
    
        bool mDirectComposition;
    
        EGLenum mTextureFormat;
        EGLenum mTextureTarget;
    
        EGLint mPixelAspectRatio;      // Display aspect ratio
        EGLenum mRenderBuffer;         // Render buffer
        EGLenum mSwapBehavior;         // Buffer swap behavior
    
        EGLint mOrientation;
    
        BindingPointer<gl::Texture> mTexture;
    };
    
    }
    
    #endif   // LIBANGLE_SURFACE_H_