Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / service / gles2_cmd_copy_texture_chromium.h
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 glCopyTexImage2D() or a blit to a framebuffer object.
24 // The target of |dest_id| texture must be GL_TEXTURE_2D.
25 class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
26  public:
27   CopyTextureCHROMIUMResourceManager();
28   ~CopyTextureCHROMIUMResourceManager();
29
30   void Initialize(const gles2::GLES2Decoder* decoder);
31   void Destroy();
32
33   void DoCopyTexture(const gles2::GLES2Decoder* decoder,
34                      GLenum source_target,
35                      GLuint source_id,
36                      GLenum source_internal_format,
37                      GLuint dest_id,
38                      GLint dest_level,
39                      GLenum dest_internal_format,
40                      GLsizei width,
41                      GLsizei height,
42                      bool flip_y,
43                      bool premultiply_alpha,
44                      bool unpremultiply_alpha);
45
46   // This will apply a transform on the source texture before copying to
47   // destination texture.
48   void DoCopyTextureWithTransform(const gles2::GLES2Decoder* decoder,
49                                   GLenum source_target,
50                                   GLuint source_id,
51                                   GLuint dest_id,
52                                   GLint dest_level,
53                                   GLsizei width,
54                                   GLsizei height,
55                                   bool flip_y,
56                                   bool premultiply_alpha,
57                                   bool unpremultiply_alpha,
58                                   const GLfloat transform_matrix[16]);
59
60   // The attributes used during invocation of the extension.
61   static const GLuint kVertexPositionAttrib = 0;
62
63  private:
64   struct ProgramInfo {
65     ProgramInfo()
66         : program(0u),
67           matrix_handle(0u),
68           half_size_handle(0u),
69           sampler_handle(0u) {}
70
71     GLuint program;
72     GLuint matrix_handle;
73     GLuint half_size_handle;
74     GLuint sampler_handle;
75   };
76
77   bool initialized_;
78   typedef std::vector<GLuint> ShaderVector;
79   ShaderVector vertex_shaders_;
80   ShaderVector fragment_shaders_;
81   typedef std::pair<int, int> ProgramMapKey;
82   typedef base::hash_map<ProgramMapKey, ProgramInfo> ProgramMap;
83   ProgramMap programs_;
84   GLuint buffer_id_;
85   GLuint framebuffer_;
86
87   DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
88 };
89
90 }  // namespace gpu.
91
92 #endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_