#ifndef CC_LAYERS_TEXTURE_LAYER_IMPL_H_
#define CC_LAYERS_TEXTURE_LAYER_IMPL_H_
#include <memory>
#include <string>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/functional/callback.h"
#include "base/memory/ptr_util.h"
#include "cc/cc_export.h"
#include "cc/layers/layer_impl.h"
#include "cc/resources/cross_thread_shared_bitmap.h"
#include "components/viz/common/resources/release_callback.h"
#include "components/viz/common/resources/transferable_resource.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/hdr_metadata.h"
namespace cc {
class CC_EXPORT TextureLayerImpl : public LayerImpl {
public:
static std::unique_ptr<TextureLayerImpl> Create(LayerTreeImpl* tree_impl,
int id) {
return base::WrapUnique(new TextureLayerImpl(tree_impl, id));
}
TextureLayerImpl(const TextureLayerImpl&) = delete;
~TextureLayerImpl() override;
TextureLayerImpl& operator=(const TextureLayerImpl&) = delete;
std::unique_ptr<LayerImpl> CreateLayerImpl(
LayerTreeImpl* layer_tree_impl) const override;
bool IsSnappedToPixelGridInTarget() override;
void PushPropertiesTo(LayerImpl* layer) override;
bool WillDraw(DrawMode draw_mode,
viz::ClientResourceProvider* resource_provider) override;
void AppendQuads(viz::CompositorRenderPass* render_pass,
AppendQuadsData* append_quads_data) override;
SimpleEnclosedRegion VisibleOpaqueRegion() const override;
void ReleaseResources() override;
void OnPurgeMemory() override;
gfx::ContentColorUsage GetContentColorUsage() const override;
bool ShouldDeferImplInvalidation() const final;
void SetTextureId(unsigned id);
void SetPremultipliedAlpha(bool premultiplied_alpha);
void SetBlendBackgroundColor(bool blend);
void SetForceTextureToOpaque(bool opaque);
void SetFlipped(bool flipped);
void SetNearestNeighbor(bool nearest_neighbor);
void SetUVTopLeft(const gfx::PointF& top_left);
void SetUVBottomRight(const gfx::PointF& bottom_right);
void SetHDRConfiguration(gfx::HDRMode mode,
absl::optional<gfx::HDRMetadata> hdr_metadata);
void SetTransferableResource(const viz::TransferableResource& resource,
viz::ReleaseCallback release_callback);
void RegisterSharedBitmapId(viz::SharedBitmapId id,
scoped_refptr<CrossThreadSharedBitmap> bitmap);
void UnregisterSharedBitmapId(viz::SharedBitmapId id);
private:
TextureLayerImpl(LayerTreeImpl* tree_impl, int id);
const char* LayerTypeAsString() const override;
void FreeTransferableResource();
bool premultiplied_alpha_ = true;
bool blend_background_color_ = false;
bool force_texture_to_opaque_ = false;
bool flipped_ = true;
bool nearest_neighbor_ = false;
gfx::PointF uv_top_left_ = gfx::PointF();
gfx::PointF uv_bottom_right_ = gfx::PointF(1.f, 1.f);
gfx::HDRMode hdr_mode_ = gfx::HDRMode::kDefault;
absl::optional<gfx::HDRMetadata> hdr_metadata_;
bool own_resource_ = false;
viz::TransferableResource transferable_resource_;
viz::ResourceId resource_id_ = viz::kInvalidResourceId;
viz::ReleaseCallback release_callback_;
base::flat_map<viz::SharedBitmapId, scoped_refptr<CrossThreadSharedBitmap>>
to_register_bitmaps_;
base::flat_map<viz::SharedBitmapId, scoped_refptr<CrossThreadSharedBitmap>>
registered_bitmaps_;
std::vector<viz::SharedBitmapId> to_unregister_bitmap_ids_;
};
}
#endif