Elim cr-checkbox
[chromium-blink-merge.git] / gpu / command_buffer / service / gles2_cmd_copy_texture_chromium.h
blobf0438b4d2ca79f51abb2ab3bbb0db4b6544ea931
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.
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
8 #include <vector>
10 #include "base/containers/hash_tables.h"
11 #include "gpu/command_buffer/service/gl_utils.h"
12 #include "gpu/gpu_export.h"
14 namespace gpu {
15 namespace gles2 {
17 class GLES2Decoder;
19 } // namespace gles2.
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();
30 void Initialize(const gles2::GLES2Decoder* decoder);
31 void Destroy();
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 GLenum dest_internal_format,
39 GLsizei width,
40 GLsizei height,
41 bool flip_y,
42 bool premultiply_alpha,
43 bool unpremultiply_alpha);
45 void DoCopySubTexture(const gles2::GLES2Decoder* decoder,
46 GLenum source_target,
47 GLuint source_id,
48 GLenum source_internal_format,
49 GLuint dest_id,
50 GLenum dest_internal_format,
51 GLint xoffset,
52 GLint yoffset,
53 GLint x,
54 GLint y,
55 GLsizei width,
56 GLsizei height,
57 GLsizei dest_width,
58 GLsizei dest_height,
59 GLsizei source_width,
60 GLsizei source_height,
61 bool flip_y,
62 bool premultiply_alpha,
63 bool unpremultiply_alpha);
65 // This will apply a transform on the texture coordinates before sampling
66 // the source texture and copying to the destination texture. The transform
67 // matrix should be given in column-major form, so it can be passed
68 // directly to GL.
69 void DoCopyTextureWithTransform(const gles2::GLES2Decoder* decoder,
70 GLenum source_target,
71 GLuint source_id,
72 GLuint dest_id,
73 GLsizei width,
74 GLsizei height,
75 bool flip_y,
76 bool premultiply_alpha,
77 bool unpremultiply_alpha,
78 const GLfloat transform_matrix[16]);
80 // The attributes used during invocation of the extension.
81 static const GLuint kVertexPositionAttrib = 0;
83 private:
84 struct ProgramInfo {
85 ProgramInfo()
86 : program(0u),
87 vertex_translate_handle(0u),
88 tex_coord_transform_handle(0u),
89 half_size_handle(0u),
90 sampler_handle(0u) {}
92 GLuint program;
93 GLuint vertex_translate_handle;
94 GLuint tex_coord_transform_handle;
95 GLuint half_size_handle;
96 GLuint sampler_handle;
99 void DoCopyTextureInternal(const gles2::GLES2Decoder* decoder,
100 GLenum source_target,
101 GLuint source_id,
102 GLuint dest_id,
103 GLint xoffset,
104 GLint yoffset,
105 GLint x,
106 GLint y,
107 GLsizei width,
108 GLsizei height,
109 GLsizei dest_width,
110 GLsizei dest_height,
111 GLsizei source_width,
112 GLsizei source_height,
113 bool flip_y,
114 bool premultiply_alpha,
115 bool unpremultiply_alpha,
116 const GLfloat transform_matrix[16]);
118 bool initialized_;
119 typedef std::vector<GLuint> ShaderVector;
120 ShaderVector vertex_shaders_;
121 ShaderVector fragment_shaders_;
122 typedef std::pair<int, int> ProgramMapKey;
123 typedef base::hash_map<ProgramMapKey, ProgramInfo> ProgramMap;
124 ProgramMap programs_;
125 GLuint buffer_id_;
126 GLuint framebuffer_;
128 DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
131 } // namespace gpu.
133 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_