• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
7 
8 #include <vector>
9 
10 #include "base/containers/hash_tables.h"
11 #include "gpu/command_buffer/service/gl_utils.h"
12 #include "gpu/gpu_export.h"
13 
14 namespace gpu {
15 namespace gles2 {
16 
17 class GLES2Decoder;
18 
19 }  // namespace gles2.
20 
21 // This class encapsulates the resources required to implement the
22 // GL_CHROMIUM_copy_texture extension.  The copy operation is performed
23 // via a blit to a framebuffer object.
24 class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
25  public:
26   CopyTextureCHROMIUMResourceManager();
27   ~CopyTextureCHROMIUMResourceManager();
28 
29   void Initialize(const gles2::GLES2Decoder* decoder);
30   void Destroy();
31 
32   void DoCopyTexture(const gles2::GLES2Decoder* decoder, GLenum source_target,
33                      GLenum dest_target, GLuint source_id, GLuint dest_id,
34                      GLint level, GLsizei width, GLsizei height,
35                      bool flip_y, bool premultiply_alpha,
36                      bool unpremultiply_alpha);
37 
38   // This will apply a transform on the source texture before copying to
39   // destination texture.
40   void DoCopyTextureWithTransform(const gles2::GLES2Decoder* decoder,
41                                   GLenum source_target, GLenum dest_target,
42                                   GLuint source_id, GLuint dest_id, GLint level,
43                                   GLsizei width, GLsizei height, bool flip_y,
44                                   bool premultiply_alpha,
45                                   bool unpremultiply_alpha,
46                                   const GLfloat transform_matrix[16]);
47 
48   // The attributes used during invocation of the extension.
49   static const GLuint kVertexPositionAttrib = 0;
50 
51  private:
52   struct ProgramInfo {
ProgramInfoProgramInfo53     ProgramInfo()
54         : program(0u),
55           matrix_handle(0u),
56           half_size_handle(0u),
57           sampler_handle(0u) {}
58 
59     GLuint program;
60     GLuint matrix_handle;
61     GLuint half_size_handle;
62     GLuint sampler_handle;
63   };
64 
65   bool initialized_;
66   typedef std::vector<GLuint> ShaderVector;
67   ShaderVector vertex_shaders_;
68   ShaderVector fragment_shaders_;
69   typedef std::pair<int, int> ProgramMapKey;
70   typedef base::hash_map<ProgramMapKey, ProgramInfo> ProgramMap;
71   ProgramMap programs_;
72   GLuint buffer_id_;
73   GLuint framebuffer_;
74 
75   DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
76 };
77 
78 }  // namespace gpu.
79 
80 #endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
81