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 "gpu/command_buffer/service/gl_utils.h"
9#include "gpu/gpu_export.h"
10
11namespace gpu {
12namespace gles2 {
13
14class GLES2Decoder;
15
16}  // namespace gles2.
17
18// This class encapsulates the resources required to implement the
19// GL_CHROMIUM_copy_texture extension.  The copy operation is performed
20// via a blit to a framebuffer object.
21class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
22 public:
23  CopyTextureCHROMIUMResourceManager();
24
25  void Initialize(const gles2::GLES2Decoder* decoder);
26  void Destroy();
27
28  void DoCopyTexture(const gles2::GLES2Decoder* decoder, GLenum source_target,
29                     GLenum dest_target, GLuint source_id, GLuint dest_id,
30                     GLint level, GLsizei width, GLsizei height,
31                     bool flip_y, bool premultiply_alpha,
32                     bool unpremultiply_alpha);
33
34  // This will apply a transform on the source texture before copying to
35  // destination texture.
36  void DoCopyTextureWithTransform(const gles2::GLES2Decoder* decoder,
37                                  GLenum source_target, GLenum dest_target,
38                                  GLuint source_id, GLuint dest_id, GLint level,
39                                  GLsizei width, GLsizei height, bool flip_y,
40                                  bool premultiply_alpha,
41                                  bool unpremultiply_alpha,
42                                  const GLfloat transform_matrix[16]);
43
44  // The attributes used during invocation of the extension.
45  static const GLuint kVertexPositionAttrib = 0;
46
47 private:
48  bool initialized_;
49
50  static const int kNumPrograms = 12;
51  GLuint programs_[kNumPrograms];
52  GLuint buffer_id_;
53  GLuint framebuffer_;
54  GLuint matrix_handle_[kNumPrograms];
55  GLuint sampler_locations_[kNumPrograms];
56
57  DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
58};
59
60}  // namespace gpu.
61
62#endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
63
64
65