#ifndef GPU_COMMAND_BUFFER_SERVICE_VALIDATING_ABSTRACT_TEXTURE_IMPL_H_
#define GPU_COMMAND_BUFFER_SERVICE_VALIDATING_ABSTRACT_TEXTURE_IMPL_H_
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "build/build_config.h"
#include "gpu/command_buffer/service/abstract_texture.h"
#include "gpu/gpu_gles2_export.h"
namespace gpu {
class DecoderContext;
namespace gles2 {
class ContextGroup;
class ErrorState;
class TextureManager;
class TextureRef;
class GPU_GLES2_EXPORT ValidatingAbstractTextureImpl : public AbstractTexture {
public:
using DestructionCB = base::OnceCallback<void(ValidatingAbstractTextureImpl*,
scoped_refptr<TextureRef>)>;
ValidatingAbstractTextureImpl(scoped_refptr<TextureRef> texture_ref,
DecoderContext* DecoderContext,
DestructionCB destruction_cb);
~ValidatingAbstractTextureImpl() override;
TextureBase* GetTextureBase() const override;
void SetParameteri(GLenum pname, GLint param) override;
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
void SetUnboundImage(gl::GLImage* image) override;
#else
void SetBoundImage(gl::GLImage* image) override;
#endif
gl::GLImage* GetImageForTesting() const override;
void SetCleared() override;
void SetCleanupCallback(CleanupCallback cb) override;
void NotifyOnContextLost() override;
void OnDecoderWillDestroy(bool have_context);
TextureRef* GetTextureRefForTesting();
private:
TextureManager* GetTextureManager() const;
ContextGroup* GetContextGroup() const;
ErrorState* GetErrorState() const;
void SetLevelInfo();
scoped_refptr<TextureRef> texture_ref_;
raw_ptr<DecoderContext> decoder_context_ = nullptr;
DestructionCB destruction_cb_;
CleanupCallback cleanup_cb_;
};
}
}
#endif