| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_SKIA_GANESH_IMAGE_FACTORY_H_ |
| #define MOJO_SKIA_GANESH_IMAGE_FACTORY_H_ |
| |
| #include <GLES2/gl2.h> |
| #include <GLES2/gl2extmojo.h> |
| |
| #include "base/callback.h" |
| #include "mojo/skia/ganesh_context.h" |
| #include "skia/ext/refptr.h" |
| #include "third_party/skia/include/core/SkImageGenerator.h" |
| #include "third_party/skia/include/gpu/GrTypes.h" |
| |
| class SkImage; |
| |
| namespace mojo { |
| namespace skia { |
| |
| // Creates an SkImage from a GL texture. |
| // The underlying texture must be kept alive for as long as the SkImage exists. |
| // Invokes |release_callback| when the SkImage is deleted. |
| ::skia::RefPtr<SkImage> CreateImageFromTexture( |
| const GaneshContext::Scope& scope, |
| uint32_t texture_id, |
| uint32_t width, |
| uint32_t height, |
| GrSurfaceOrigin origin, |
| const base::Closure& release_callback); |
| |
| // Generates backing content for SkImages from a texture mailbox. |
| // If |sync_point| is non-zero, inserts a sync point into the command stream |
| // before the image is first drawn. |
| // It is the responsibility of the client of this class to ensure that |
| // the mailbox name is valid at the time when the image is being drawn. |
| class MailboxTextureImageGenerator : public SkImageGenerator { |
| public: |
| MailboxTextureImageGenerator( |
| const GLbyte mailbox_name[GL_MAILBOX_SIZE_CHROMIUM], |
| GLuint sync_point, |
| uint32_t width, |
| uint32_t height, |
| GrSurfaceOrigin origin); |
| ~MailboxTextureImageGenerator() override; |
| |
| GrTexture* onGenerateTexture(GrContext* context, |
| const SkIRect* subset) override; |
| |
| private: |
| GLbyte mailbox_name_[GL_MAILBOX_SIZE_CHROMIUM]; |
| GLuint sync_point_; |
| GrSurfaceOrigin origin_; |
| }; |
| |
| } // namespace skia |
| } // namespace mojo |
| |
| #endif // MOJO_SKIA_GANESH_IMAGE_FACTORY_H_ |