Handle account removal correctly on all platforms.
[chromium-blink-merge.git] / gpu / command_buffer / service / gles2_cmd_copy_texture_chromium.h
blob083fc4c8578131a65f14a6aa4505787379006042
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 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);
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]);
60 // The attributes used during invocation of the extension.
61 static const GLuint kVertexPositionAttrib = 0;
63 private:
64 struct ProgramInfo {
65 ProgramInfo()
66 : program(0u),
67 matrix_handle(0u),
68 half_size_handle(0u),
69 sampler_handle(0u) {}
71 GLuint program;
72 GLuint matrix_handle;
73 GLuint half_size_handle;
74 GLuint sampler_handle;
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_;
87 DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
90 } // namespace gpu.
92 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_