Edit

kc3-lang/angle/src/libANGLE/renderer/TextureImpl.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2017-06-20 12:57:39
    Hash : 4928b7ca
    Message : Proliferate gl::Context everywhere. This gives the D3D back-end access to the GL state almost anywhere. This uses the onDestroy hook for Textures to push errors up from destructors, although they still don't quite make it to the Context. There are places, such as in EGL object (Context/Surface) destruction, where we end up calling through to GL implementation internals without having access to a gl::Context. We handle this via a proxy Context to a Display, basically a null context, that has access to impl-side state like the Renderer pointer if necessary. It does not have access to the normal GL state. Also Pass gl::Context to RefCountObject::release(). Since we're using destroy() methods now, we should not ever call the destructor directly. BUG=angleproject:1156 Change-Id: Ie4c32ad6bf6caaff0289901f30b5c6bafa2ce259 Reviewed-on: https://chromium-review.googlesource.com/529707 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/renderer/TextureImpl.h
  • //
    // 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.
    //
    
    // TextureImpl.h: Defines the abstract rx::TextureImpl classes.
    
    #ifndef LIBANGLE_RENDERER_TEXTUREIMPL_H_
    #define LIBANGLE_RENDERER_TEXTUREIMPL_H_
    
    #include <stdint.h>
    
    #include "angle_gl.h"
    #include "common/angleutils.h"
    #include "libANGLE/Error.h"
    #include "libANGLE/ImageIndex.h"
    #include "libANGLE/Stream.h"
    #include "libANGLE/Texture.h"
    #include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
    
    namespace egl
    {
    class Surface;
    class Image;
    }
    
    namespace gl
    {
    struct Box;
    struct Extents;
    struct Offset;
    struct Rectangle;
    class Framebuffer;
    struct PixelUnpackState;
    struct TextureState;
    }
    
    namespace rx
    {
    class ContextImpl;
    
    class TextureImpl : public FramebufferAttachmentObjectImpl
    {
      public:
        TextureImpl(const gl::TextureState &state);
        virtual ~TextureImpl();
    
        virtual gl::Error onDestroy(const gl::Context *context) { return gl::NoError(); }
    
        virtual gl::Error setImage(const gl::Context *context,
                                   GLenum target,
                                   size_t level,
                                   GLenum internalFormat,
                                   const gl::Extents &size,
                                   GLenum format,
                                   GLenum type,
                                   const gl::PixelUnpackState &unpack,
                                   const uint8_t *pixels) = 0;
        virtual gl::Error setSubImage(const gl::Context *context,
                                      GLenum target,
                                      size_t level,
                                      const gl::Box &area,
                                      GLenum format,
                                      GLenum type,
                                      const gl::PixelUnpackState &unpack,
                                      const uint8_t *pixels) = 0;
    
        virtual gl::Error setCompressedImage(const gl::Context *context,
                                             GLenum target,
                                             size_t level,
                                             GLenum internalFormat,
                                             const gl::Extents &size,
                                             const gl::PixelUnpackState &unpack,
                                             size_t imageSize,
                                             const uint8_t *pixels) = 0;
        virtual gl::Error setCompressedSubImage(const gl::Context *context,
                                                GLenum target,
                                                size_t level,
                                                const gl::Box &area,
                                                GLenum format,
                                                const gl::PixelUnpackState &unpack,
                                                size_t imageSize,
                                                const uint8_t *pixels) = 0;
    
        virtual gl::Error copyImage(const gl::Context *context,
                                    GLenum target,
                                    size_t level,
                                    const gl::Rectangle &sourceArea,
                                    GLenum internalFormat,
                                    const gl::Framebuffer *source) = 0;
        virtual gl::Error copySubImage(const gl::Context *context,
                                       GLenum target,
                                       size_t level,
                                       const gl::Offset &destOffset,
                                       const gl::Rectangle &sourceArea,
                                       const gl::Framebuffer *source) = 0;
    
        virtual gl::Error copyTexture(const gl::Context *context,
                                      GLenum target,
                                      size_t level,
                                      GLenum internalFormat,
                                      GLenum type,
                                      size_t sourceLevel,
                                      bool unpackFlipY,
                                      bool unpackPremultiplyAlpha,
                                      bool unpackUnmultiplyAlpha,
                                      const gl::Texture *source);
        virtual gl::Error copySubTexture(const gl::Context *context,
                                         GLenum target,
                                         size_t level,
                                         const gl::Offset &destOffset,
                                         size_t sourceLevel,
                                         const gl::Rectangle &sourceArea,
                                         bool unpackFlipY,
                                         bool unpackPremultiplyAlpha,
                                         bool unpackUnmultiplyAlpha,
                                         const gl::Texture *source);
    
        virtual gl::Error copyCompressedTexture(const gl::Context *context, const gl::Texture *source);
    
        virtual gl::Error setStorage(const gl::Context *context,
                                     GLenum target,
                                     size_t levels,
                                     GLenum internalFormat,
                                     const gl::Extents &size) = 0;
    
        virtual gl::Error setStorageMultisample(const gl::Context *context,
                                                GLenum target,
                                                GLsizei samples,
                                                GLint internalformat,
                                                const gl::Extents &size,
                                                GLboolean fixedSampleLocations) = 0;
    
        virtual gl::Error setEGLImageTarget(const gl::Context *context,
                                            GLenum target,
                                            egl::Image *image) = 0;
    
        virtual gl::Error setImageExternal(const gl::Context *context,
                                           GLenum target,
                                           egl::Stream *stream,
                                           const egl::Stream::GLTextureDescription &desc) = 0;
    
        virtual gl::Error generateMipmap(const gl::Context *context) = 0;
    
        virtual gl::Error setBaseLevel(const gl::Context *context, GLuint baseLevel) = 0;
    
        virtual gl::Error bindTexImage(const gl::Context *context, egl::Surface *surface) = 0;
        virtual gl::Error releaseTexImage(const gl::Context *context) = 0;
    
        virtual void syncState(const gl::Texture::DirtyBits &dirtyBits) = 0;
    
      protected:
        const gl::TextureState &mState;
    };
    
    }
    
    #endif // LIBANGLE_RENDERER_TEXTUREIMPL_H_