diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/canvas/SourceSurfaceWebgl.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/canvas/SourceSurfaceWebgl.h')
-rw-r--r-- | dom/canvas/SourceSurfaceWebgl.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/dom/canvas/SourceSurfaceWebgl.h b/dom/canvas/SourceSurfaceWebgl.h new file mode 100644 index 0000000000..098f11c419 --- /dev/null +++ b/dom/canvas/SourceSurfaceWebgl.h @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef MOZILLA_GFX_SOURCESURFACEWEBGL_H_ +#define MOZILLA_GFX_SOURCESURFACEWEBGL_H_ + +#include "mozilla/gfx/2D.h" +#include "mozilla/WeakPtr.h" + +namespace mozilla::gfx { + +class DrawTargetWebgl; +class SharedContextWebgl; +class TextureHandle; + +// SourceSurfaceWebgl holds WebGL resources that can be used to efficiently +// copy snapshot data between multiple DrawTargetWebgls. It also takes care +// of copy-on-write behavior when the owner target is modified or destructs. +class SourceSurfaceWebgl : public DataSourceSurface { + public: + MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceWebgl, override) + + explicit SourceSurfaceWebgl(DrawTargetWebgl* aDT); + virtual ~SourceSurfaceWebgl(); + + SurfaceType GetType() const override { return SurfaceType::WEBGL; } + IntSize GetSize() const override { return mSize; } + SurfaceFormat GetFormat() const override { return mFormat; } + + uint8_t* GetData() override; + int32_t Stride() override; + + bool Map(MapType aType, MappedSurface* aMappedSurface) override; + void Unmap() override; + + bool HasReadData() const { return !!mData; } + + already_AddRefed<SourceSurface> ExtractSubrect(const IntRect& aRect) override; + + private: + friend class DrawTargetWebgl; + friend class SharedContextWebgl; + + explicit SourceSurfaceWebgl(const RefPtr<SharedContextWebgl>& aSharedContext); + + bool EnsureData(); + + void DrawTargetWillChange(bool aNeedHandle); + + void GiveTexture(RefPtr<TextureHandle> aHandle); + + void SetHandle(TextureHandle* aHandle); + + void OnUnlinkTexture(SharedContextWebgl* aContext); + + DrawTargetWebgl* GetTarget() const { return mDT.get(); } + + SurfaceFormat mFormat = SurfaceFormat::UNKNOWN; + IntSize mSize; + // Any data that has been read back from the WebGL context for mapping. + RefPtr<DataSourceSurface> mData; + // The draw target that currently owns the texture for this surface. + WeakPtr<DrawTargetWebgl> mDT; + // The actual shared context that any WebGL resources belong to. + WeakPtr<SharedContextWebgl> mSharedContext; + // If this snapshot has been copied into a cached texture handle. + RefPtr<TextureHandle> mHandle; +}; + +} // namespace mozilla::gfx + +#endif /* MOZILLA_GFX_SOURCESURFACEWEBGL_H_ */ |