Home | History | Annotate | Download | only in service
      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 
     11 namespace gpu {
     12 namespace gles2 {
     13 
     14 class 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.
     21 class 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