// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_ #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_ #include #include "base/memory/ref_counted.h" #include "gpu/command_buffer/service/gl_utils.h" namespace gfx { class GLImage; } namespace gpu { namespace gles2 { class Texture; class NativeImageBuffer : public base::RefCountedThreadSafe { public: static scoped_refptr Create(GLuint texture_id); virtual void AddClient(gfx::GLImage* client) = 0; virtual void RemoveClient(gfx::GLImage* client) = 0; virtual bool IsClient(gfx::GLImage* client) = 0; virtual void BindToTexture(GLenum target) = 0; virtual void WillRead(gfx::GLImage* client) = 0; virtual void WillWrite(gfx::GLImage* client) = 0; virtual void DidRead(gfx::GLImage* client) = 0; virtual void DidWrite(gfx::GLImage* client) = 0; protected: friend class base::RefCountedThreadSafe; NativeImageBuffer() {} virtual ~NativeImageBuffer() {} DISALLOW_COPY_AND_ASSIGN(NativeImageBuffer); }; // An immutable description that can be used to create a texture that shares // the underlying image buffer(s). class TextureDefinition { public: TextureDefinition(GLenum target, Texture* texture, unsigned int version, const scoped_refptr& image); virtual ~TextureDefinition(); Texture* CreateTexture() const; void UpdateTexture(Texture* texture) const; unsigned int version() const { return version_; } bool IsOlderThan(unsigned int version) const { return (version - version_) < 0x80000000; } bool Matches(const Texture* texture) const; scoped_refptr image() { return image_buffer_; } private: struct LevelInfo { LevelInfo(GLenum target, GLenum internal_format, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, bool cleared); ~LevelInfo(); GLenum target; GLenum internal_format; GLsizei width; GLsizei height; GLsizei depth; GLint border; GLenum format; GLenum type; bool cleared; }; typedef std::vector > LevelInfos; unsigned int version_; GLenum target_; scoped_refptr image_buffer_; GLenum min_filter_; GLenum mag_filter_; GLenum wrap_s_; GLenum wrap_t_; GLenum usage_; bool immutable_; LevelInfos level_infos_; }; } // namespage gles2 } // namespace gpu #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_