#ifndef UI_GL_GL_IMAGE_H_
#define UI_GL_GL_IMAGE_H_
#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gl/gl_export.h"
namespace gpu {
class D3DImageBacking;
class D3DImageBackingFactoryTest;
class GLTexturePassthroughD3DImageRepresentation;
FORWARD_DECLARE_TEST(D3DImageBackingFactoryTestSwapChain,
CreateAndPresentSwapChain);
}
namespace gpu::gles2 {
class GLES2DecoderImpl;
class GLES2DecoderPassthroughImpl;
}
namespace media {
class GLImageEGLStream;
class GLImagePbuffer;
class DXVAVideoDecodeAccelerator;
}
namespace gl {
class GLImageD3D;
class GL_EXPORT GLImage : public base::RefCounted<GLImage> {
public:
GLImage(const GLImage&) = delete;
GLImage& operator=(const GLImage&) = delete;
protected:
GLImage() = default;
virtual ~GLImage() = default;
virtual gfx::Size GetSize();
public:
gfx::Size GetSizeForTesting() { return GetSize(); }
protected:
enum class Type { NONE, EGL_STREAM, D3D, PBUFFER };
virtual Type GetType() const;
private:
static GLImageD3D* ToGLImageD3D(GLImage* image);
static media::GLImageEGLStream* ToGLImageEGLStream(GLImage* image);
static media::GLImagePbuffer* ToGLImagePbuffer(GLImage* image);
friend class gpu::D3DImageBacking;
friend class gpu::D3DImageBackingFactoryTest;
friend class gpu::GLTexturePassthroughD3DImageRepresentation;
friend class gpu::gles2::GLES2DecoderImpl;
friend class gpu::gles2::GLES2DecoderPassthroughImpl;
friend class media::DXVAVideoDecodeAccelerator;
FRIEND_TEST_ALL_PREFIXES(gpu::D3DImageBackingFactoryTestSwapChain,
CreateAndPresentSwapChain);
friend class base::RefCounted<GLImage>;
};
}
#endif