| Index: gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
|
| index 2591ec811f5784fba099647a210ea550f8ddbd65..ac966de2428ddd81c4c4617d02321872feabbd15 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
|
| @@ -54,10 +54,11 @@ struct ShaderInfo {
|
| const ShaderInfo shader_infos[] = {
|
| // VERTEX_SHADER_POS_TEX
|
| SHADER(
|
| + uniform mat4 matrix;
|
| attribute vec4 a_position;
|
| varying vec2 v_uv;
|
| void main(void) {
|
| - gl_Position = a_position;
|
| + gl_Position = matrix * a_position;
|
| v_uv = a_position.xy * 0.5 + vec2(0.5, 0.5);
|
| }),
|
| // FRAGMENT_SHADER_TEX
|
| @@ -313,6 +314,29 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTexture(
|
| bool flip_y,
|
| bool premultiply_alpha,
|
| bool unpremultiply_alpha) {
|
| + // Use default transform matrix if no transform passed in.
|
| + const GLfloat default_matrix[16] = {1.0f, 0.0f, 0.0f, 0.0f,
|
| + 0.0f, 1.0f, 0.0f, 0.0f,
|
| + 0.0f, 0.0f, 1.0f, 0.0f,
|
| + 0.0f, 0.0f, 0.0f, 1.0f};
|
| + DoCopyTextureWithTransform(decoder, source_target, dest_target, source_id,
|
| + dest_id, level, width, height, flip_y, premultiply_alpha,
|
| + unpremultiply_alpha, default_matrix);
|
| +}
|
| +
|
| +void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
|
| + const gles2::GLES2Decoder* decoder,
|
| + GLenum source_target,
|
| + GLenum dest_target,
|
| + GLuint source_id,
|
| + GLuint dest_id,
|
| + GLint level,
|
| + GLsizei width,
|
| + GLsizei height,
|
| + bool flip_y,
|
| + bool premultiply_alpha,
|
| + bool unpremultiply_alpha,
|
| + const GLfloat transform_matrix[16]) {
|
| DCHECK(source_target == GL_TEXTURE_2D ||
|
| source_target == GL_TEXTURE_EXTERNAL_OES);
|
| if (!initialized_) {
|
| @@ -335,6 +359,8 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTexture(
|
| }
|
| #endif
|
|
|
| + GLuint matrix_handle_ = glGetUniformLocation(programs_[program], "matrix");
|
| + glUniformMatrix4fv(matrix_handle_, 1, GL_FALSE, transform_matrix);
|
| glActiveTexture(GL_TEXTURE0);
|
| glBindTexture(GL_TEXTURE_2D, dest_id);
|
| // NVidia drivers require texture settings to be a certain way
|
|
|