Files
tubestation/gfx/webrender_bindings/RenderAndroidHardwareBufferTextureHost.h
Jamie Nicol c5467289a3 Bug 1898238 - Tidy up RenderCompositorOGLSWGL::HandleExternalImage. r=sotaro
HandleExternalImage() has two nearly identical code paths for
rendering either RenderAndroidSurfaceTextureHost or
RenderAndroidHardwareBufferTextureHost using CompositorOGL. The next
patch in this series will additionally add support for
RenderEGLImageTextureHost. Rather than duplicate the code yet again,
we abstract the differences in to a new virtual function
RenderTextureHost::CreateTextureSource() and use a single common code
path in HandleExternalImage().

Differential Revision: https://phabricator.services.mozilla.com/D211290
2024-07-22 20:23:38 +00:00

77 lines
2.2 KiB
C++

/* -*- 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_RenderAndroidHardwareBufferTextureHost_H
#define MOZILLA_GFX_RenderAndroidHardwareBufferTextureHost_H
#include "GLContextTypes.h"
#include "GLTypes.h"
#include "RenderTextureHostSWGL.h"
namespace mozilla {
namespace layers {
class AndroidHardwareBuffer;
}
namespace wr {
class RenderAndroidHardwareBufferTextureHost final
: public RenderTextureHostSWGL {
public:
explicit RenderAndroidHardwareBufferTextureHost(
layers::AndroidHardwareBuffer* aAndroidHardwareBuffer);
wr::WrExternalImage Lock(uint8_t aChannelIndex, gl::GLContext* aGL) override;
void Unlock() override;
size_t Bytes() override;
RenderAndroidHardwareBufferTextureHost*
AsRenderAndroidHardwareBufferTextureHost() override {
return this;
}
// RenderTextureHostSWGL
gfx::SurfaceFormat GetFormat() const override;
gfx::ColorDepth GetColorDepth() const override {
return gfx::ColorDepth::COLOR_8;
}
size_t GetPlaneCount() const override { return 1; }
bool MapPlane(RenderCompositor* aCompositor, uint8_t aChannelIndex,
PlaneInfo& aPlaneInfo) override;
void UnmapPlanes() override;
RefPtr<layers::TextureSource> CreateTextureSource(
layers::TextureSourceProvider* aProvider) override;
layers::AndroidHardwareBuffer* GetAndroidHardwareBuffer() {
return mAndroidHardwareBuffer;
}
gfx::IntSize GetSize() const;
private:
virtual ~RenderAndroidHardwareBufferTextureHost();
bool EnsureLockable();
void DestroyEGLImage();
void DeleteTextureHandle();
already_AddRefed<gfx::DataSourceSurface> ReadTexImage();
const RefPtr<layers::AndroidHardwareBuffer> mAndroidHardwareBuffer;
RefPtr<gl::GLContext> mGL;
EGLImage mEGLImage;
GLuint mTextureHandle;
RefPtr<gfx::DataSourceSurface> mReadback;
};
} // namespace wr
} // namespace mozilla
#endif // MOZILLA_GFX_RenderAndroidHardwareBufferTextureHost_H