#ifndef GPU_COMMAND_BUFFER_SERVICE_ABSTRACT_TEXTURE_ANDROID_H_
#define GPU_COMMAND_BUFFER_SERVICE_ABSTRACT_TEXTURE_ANDROID_H_
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
#include "gpu/command_buffer/service/texture_base.h"
#include "gpu/gpu_gles2_export.h"
#include "ui/gfx/geometry/size.h"
typedef unsigned GLenum;
typedef int GLsizei;
typedef int GLint;
typedef unsigned int GLuint;
namespace gl {
class GLApi;
}
namespace gpu {
namespace gles2 {
class Texture;
class TexturePassthrough;
}
class GPU_GLES2_EXPORT AbstractTextureAndroid final {
public:
static std::unique_ptr<AbstractTextureAndroid> CreateForValidating(
gfx::Size size);
static std::unique_ptr<AbstractTextureAndroid> CreateForPassthrough(
gfx::Size size);
static std::unique_ptr<AbstractTextureAndroid> CreateForTesting(
GLuint texture_id);
explicit AbstractTextureAndroid(std::unique_ptr<TextureBase> texture);
explicit AbstractTextureAndroid(gles2::Texture* texture);
explicit AbstractTextureAndroid(
scoped_refptr<gles2::TexturePassthrough> texture,
const gfx::Size& size);
~AbstractTextureAndroid();
TextureBase* GetTextureBase() const;
void BindToServiceId(GLuint service_id);
void NotifyOnContextLost();
unsigned int service_id() const { return GetTextureBase()->service_id(); }
base::WeakPtr<AbstractTextureAndroid> AsWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
private:
bool have_context_ = true;
std::unique_ptr<TextureBase> texture_for_testing_;
raw_ptr<gles2::Texture> texture_ = nullptr;
scoped_refptr<gles2::TexturePassthrough> texture_passthrough_;
gfx::Size texture_passthrough_size_;
raw_ptr<gl::GLApi, DanglingUntriaged> api_ = nullptr;
base::WeakPtrFactory<AbstractTextureAndroid> weak_ptr_factory_{this};
};
}
#endif