OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
11 #include "gpu/command_buffer/service/gl_utils.h" | 11 #include "gpu/command_buffer/service/gl_utils.h" |
12 #include "gpu/gpu_export.h" | 12 #include "gpu/gpu_export.h" |
13 | 13 |
14 namespace gpu { | 14 namespace gpu { |
15 namespace gles2 { | 15 namespace gles2 { |
16 | 16 |
| 17 struct DecoderTextureState; |
17 class GLES2Decoder; | 18 class GLES2Decoder; |
18 | 19 |
19 } // namespace gles2. | 20 } // namespace gles2. |
20 | 21 |
21 // This class encapsulates the resources required to implement the | 22 // This class encapsulates the resources required to implement the |
22 // GL_CHROMIUM_copy_texture extension. The copy operation is performed | 23 // GL_CHROMIUM_copy_texture extension. The copy operation is performed |
23 // via glCopyTexImage2D() or a blit to a framebuffer object. | 24 // via glCopyTexImage2D() or a blit to a framebuffer object. |
24 // The target of |dest_id| texture must be GL_TEXTURE_2D. | 25 // The target of |dest_id| texture must be GL_TEXTURE_2D. |
25 class GPU_EXPORT CopyTextureCHROMIUMResourceManager { | 26 class GPU_EXPORT CopyTextureCHROMIUMResourceManager { |
26 public: | 27 public: |
27 CopyTextureCHROMIUMResourceManager(); | 28 CopyTextureCHROMIUMResourceManager(); |
28 ~CopyTextureCHROMIUMResourceManager(); | 29 ~CopyTextureCHROMIUMResourceManager(); |
29 | 30 |
30 void Initialize(const gles2::GLES2Decoder* decoder); | 31 void Initialize(const gles2::GLES2Decoder* decoder); |
31 void Destroy(); | 32 void Destroy(); |
32 | 33 |
33 void DoCopyTexture(const gles2::GLES2Decoder* decoder, | 34 void DoCopyTexture(const gles2::GLES2Decoder* decoder, |
34 GLenum source_target, | 35 GLenum source_target, |
35 GLuint source_id, | 36 GLuint source_id, |
36 GLenum source_internal_format, | 37 GLenum source_internal_format, |
| 38 GLenum dest_target, |
37 GLuint dest_id, | 39 GLuint dest_id, |
38 GLenum dest_internal_format, | 40 GLenum dest_internal_format, |
| 41 GLenum dest_type, |
39 GLsizei width, | 42 GLsizei width, |
40 GLsizei height, | 43 GLsizei height, |
41 bool flip_y, | 44 bool flip_y, |
42 bool premultiply_alpha, | 45 bool premultiply_alpha, |
43 bool unpremultiply_alpha); | 46 bool unpremultiply_alpha, |
| 47 const gles2::DecoderTextureState* texture_state); |
44 | 48 |
45 void DoCopySubTexture(const gles2::GLES2Decoder* decoder, | 49 void DoCopySubTexture(const gles2::GLES2Decoder* decoder, |
46 GLenum source_target, | 50 GLenum source_target, |
47 GLuint source_id, | 51 GLuint source_id, |
48 GLenum source_internal_format, | 52 GLenum source_internal_format, |
| 53 GLenum dest_target, |
49 GLuint dest_id, | 54 GLuint dest_id, |
50 GLenum dest_internal_format, | 55 GLenum dest_internal_format, |
| 56 GLenum dest_type, |
51 GLint xoffset, | 57 GLint xoffset, |
52 GLint yoffset, | 58 GLint yoffset, |
53 GLint x, | 59 GLint x, |
54 GLint y, | 60 GLint y, |
55 GLsizei width, | 61 GLsizei width, |
56 GLsizei height, | 62 GLsizei height, |
57 GLsizei dest_width, | 63 GLsizei dest_width, |
58 GLsizei dest_height, | 64 GLsizei dest_height, |
59 GLsizei source_width, | 65 GLsizei source_width, |
60 GLsizei source_height, | 66 GLsizei source_height, |
61 bool flip_y, | 67 bool flip_y, |
62 bool premultiply_alpha, | 68 bool premultiply_alpha, |
63 bool unpremultiply_alpha); | 69 bool unpremultiply_alpha, |
| 70 const gles2::DecoderTextureState* texture_state); |
64 | 71 |
65 // This will apply a transform on the texture coordinates before sampling | 72 // This will apply a transform on the texture coordinates before sampling |
66 // the source texture and copying to the destination texture. The transform | 73 // 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 | 74 // matrix should be given in column-major form, so it can be passed |
68 // directly to GL. | 75 // directly to GL. |
69 void DoCopyTextureWithTransform(const gles2::GLES2Decoder* decoder, | 76 void DoCopyTextureWithTransform( |
70 GLenum source_target, | 77 const gles2::GLES2Decoder* decoder, |
71 GLuint source_id, | 78 GLenum source_target, |
72 GLuint dest_id, | 79 GLuint source_id, |
73 GLsizei width, | 80 GLenum dest_target, |
74 GLsizei height, | 81 GLuint dest_id, |
75 bool flip_y, | 82 GLenum dest_internal_format, |
76 bool premultiply_alpha, | 83 GLenum dest_type, |
77 bool unpremultiply_alpha, | 84 GLsizei width, |
78 const GLfloat transform_matrix[16]); | 85 GLsizei height, |
| 86 bool flip_y, |
| 87 bool premultiply_alpha, |
| 88 bool unpremultiply_alpha, |
| 89 const gles2::DecoderTextureState* texture_state, |
| 90 const GLfloat transform_matrix[16]); |
79 | 91 |
80 // The attributes used during invocation of the extension. | 92 // The attributes used during invocation of the extension. |
81 static const GLuint kVertexPositionAttrib = 0; | 93 static const GLuint kVertexPositionAttrib = 0; |
82 | 94 |
83 private: | 95 private: |
84 struct ProgramInfo { | 96 struct ProgramInfo { |
85 ProgramInfo() | 97 ProgramInfo() |
86 : program(0u), | 98 : program(0u), |
87 vertex_translate_handle(0u), | 99 vertex_translate_handle(0u), |
88 tex_coord_transform_handle(0u), | 100 tex_coord_transform_handle(0u), |
89 half_size_handle(0u), | 101 half_size_handle(0u), |
90 sampler_handle(0u) {} | 102 sampler_handle(0u) {} |
91 | 103 |
92 GLuint program; | 104 GLuint program; |
93 GLuint vertex_translate_handle; | 105 GLuint vertex_translate_handle; |
94 GLuint tex_coord_transform_handle; | 106 GLuint tex_coord_transform_handle; |
95 GLuint half_size_handle; | 107 GLuint half_size_handle; |
96 GLuint sampler_handle; | 108 GLuint sampler_handle; |
97 }; | 109 }; |
98 | 110 |
99 void DoCopyTextureInternal(const gles2::GLES2Decoder* decoder, | 111 void DoCopyTextureInternal(const gles2::GLES2Decoder* decoder, |
100 GLenum source_target, | 112 GLenum source_target, |
101 GLuint source_id, | 113 GLuint source_id, |
| 114 GLenum dest_target, |
102 GLuint dest_id, | 115 GLuint dest_id, |
103 GLint xoffset, | 116 GLint xoffset, |
104 GLint yoffset, | 117 GLint yoffset, |
105 GLint x, | 118 GLint x, |
106 GLint y, | 119 GLint y, |
107 GLsizei width, | 120 GLsizei width, |
108 GLsizei height, | 121 GLsizei height, |
109 GLsizei dest_width, | 122 GLsizei dest_width, |
110 GLsizei dest_height, | 123 GLsizei dest_height, |
111 GLsizei source_width, | 124 GLsizei source_width, |
(...skipping 12 matching lines...) Expand all Loading... |
124 ProgramMap programs_; | 137 ProgramMap programs_; |
125 GLuint buffer_id_; | 138 GLuint buffer_id_; |
126 GLuint framebuffer_; | 139 GLuint framebuffer_; |
127 | 140 |
128 DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager); | 141 DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager); |
129 }; | 142 }; |
130 | 143 |
131 } // namespace gpu. | 144 } // namespace gpu. |
132 | 145 |
133 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ | 146 #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_ |
OLD | NEW |