• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
7 
8 #include <vector>
9 
10 #include "base/memory/ref_counted.h"
11 #include "gpu/command_buffer/service/gl_utils.h"
12 
13 namespace gfx {
14 class GLImage;
15 }
16 
17 namespace gpu {
18 namespace gles2 {
19 
20 class Texture;
21 
22 class NativeImageBuffer : public base::RefCountedThreadSafe<NativeImageBuffer> {
23  public:
24   static scoped_refptr<NativeImageBuffer> Create(GLuint texture_id);
25 
26   virtual void AddClient(gfx::GLImage* client) = 0;
27   virtual void RemoveClient(gfx::GLImage* client) = 0;
28   virtual bool IsClient(gfx::GLImage* client) = 0;
29   virtual void BindToTexture(GLenum target) = 0;
30   virtual void WillRead(gfx::GLImage* client) = 0;
31   virtual void WillWrite(gfx::GLImage* client) = 0;
32   virtual void DidRead(gfx::GLImage* client) = 0;
33   virtual void DidWrite(gfx::GLImage* client) = 0;
34 
35  protected:
36   friend class base::RefCountedThreadSafe<NativeImageBuffer>;
NativeImageBuffer()37   NativeImageBuffer() {}
~NativeImageBuffer()38   virtual ~NativeImageBuffer() {}
39 
40   DISALLOW_COPY_AND_ASSIGN(NativeImageBuffer);
41 };
42 
43 // An immutable description that can be used to create a texture that shares
44 // the underlying image buffer(s).
45 class TextureDefinition {
46  public:
47   TextureDefinition(GLenum target,
48                     Texture* texture,
49                     unsigned int version,
50                     const scoped_refptr<NativeImageBuffer>& image);
51   virtual ~TextureDefinition();
52 
53   Texture* CreateTexture() const;
54   void UpdateTexture(Texture* texture) const;
55 
version()56   unsigned int version() const { return version_; }
IsOlderThan(unsigned int version)57   bool IsOlderThan(unsigned int version) const {
58     return (version - version_) < 0x80000000;
59   }
60   bool Matches(const Texture* texture) const;
61 
image()62   scoped_refptr<NativeImageBuffer> image() { return image_buffer_; }
63 
64  private:
65   struct LevelInfo {
66     LevelInfo(GLenum target,
67               GLenum internal_format,
68               GLsizei width,
69               GLsizei height,
70               GLsizei depth,
71               GLint border,
72               GLenum format,
73               GLenum type,
74               bool cleared);
75     ~LevelInfo();
76 
77     GLenum target;
78     GLenum internal_format;
79     GLsizei width;
80     GLsizei height;
81     GLsizei depth;
82     GLint border;
83     GLenum format;
84     GLenum type;
85     bool cleared;
86   };
87 
88   typedef std::vector<std::vector<LevelInfo> > LevelInfos;
89 
90   unsigned int version_;
91   GLenum target_;
92   scoped_refptr<NativeImageBuffer> image_buffer_;
93   GLenum min_filter_;
94   GLenum mag_filter_;
95   GLenum wrap_s_;
96   GLenum wrap_t_;
97   GLenum usage_;
98   bool immutable_;
99   LevelInfos level_infos_;
100 };
101 
102 }  // namespage gles2
103 }  // namespace gpu
104 
105 #endif  // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
106