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 d41ee9db3a30a062d461981c4581274eb63ba8b2..974cbd7d8e0c7d85dd99dff0049b04019ec007e2 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc |
@@ -250,6 +250,8 @@ void DoCopyTexSubImage2D(const gpu::gles2::GLES2Decoder* decoder, |
GLuint dest_id, |
GLint xoffset, |
GLint yoffset, |
+ GLint source_x, |
+ GLint source_y, |
GLsizei source_width, |
GLsizei source_height, |
GLuint framebuffer) { |
@@ -262,7 +264,7 @@ void DoCopyTexSubImage2D(const gpu::gles2::GLES2Decoder* decoder, |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
glCopyTexSubImage2D(GL_TEXTURE_2D, 0 /* level */, xoffset, yoffset, |
- 0 /* x */, 0 /* y */, source_width, source_height); |
+ source_x, source_y, source_width, source_height); |
} |
decoder->RestoreTextureState(source_id); |
@@ -398,6 +400,10 @@ void CopyTextureCHROMIUMResourceManager::DoCopySubTexture( |
GLenum dest_internal_format, |
GLint xoffset, |
GLint yoffset, |
+ GLint x, |
+ GLint y, |
+ GLsizei width, |
+ GLsizei height, |
GLsizei dest_width, |
GLsizei dest_height, |
GLsizei source_width, |
@@ -419,15 +425,15 @@ void CopyTextureCHROMIUMResourceManager::DoCopySubTexture( |
if (source_target == GL_TEXTURE_2D && !flip_y && !premultiply_alpha_change && |
source_format_contain_superset_of_dest_format) { |
DoCopyTexSubImage2D(decoder, source_target, source_id, dest_id, xoffset, |
- yoffset, source_width, source_height, framebuffer_); |
+ yoffset, x, y, width, height, framebuffer_); |
return; |
} |
- // Use kIdentityMatrix if no transform passed in. |
- DoCopySubTextureWithTransform( |
- decoder, source_target, source_id, dest_id, xoffset, yoffset, dest_width, |
- dest_height, source_width, source_height, flip_y, premultiply_alpha, |
- unpremultiply_alpha, kIdentityMatrix); |
+ DoCopyTextureInternal(decoder, source_target, source_id, dest_id, xoffset - x, |
+ yoffset - y, dest_width, dest_height, source_width, |
+ source_height, flip_y, premultiply_alpha, |
+ unpremultiply_alpha, kIdentityMatrix, xoffset, yoffset, |
+ width, height); |
} |
void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform( |
@@ -446,28 +452,7 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform( |
DoCopyTextureInternal(decoder, source_target, source_id, dest_id, 0, 0, |
dest_width, dest_height, width, height, flip_y, |
premultiply_alpha, unpremultiply_alpha, |
- transform_matrix); |
-} |
- |
-void CopyTextureCHROMIUMResourceManager::DoCopySubTextureWithTransform( |
- const gles2::GLES2Decoder* decoder, |
- GLenum source_target, |
- GLuint source_id, |
- GLuint dest_id, |
- GLint xoffset, |
- GLint yoffset, |
- GLsizei dest_width, |
- GLsizei dest_height, |
- GLsizei source_width, |
- GLsizei source_height, |
- bool flip_y, |
- bool premultiply_alpha, |
- bool unpremultiply_alpha, |
- const GLfloat transform_matrix[16]) { |
- DoCopyTextureInternal(decoder, source_target, source_id, dest_id, xoffset, |
- yoffset, dest_width, dest_height, source_width, |
- source_height, flip_y, premultiply_alpha, |
- unpremultiply_alpha, transform_matrix); |
+ transform_matrix, 0, 0, dest_width, dest_height); |
} |
void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal( |
@@ -484,7 +469,11 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal( |
bool flip_y, |
bool premultiply_alpha, |
bool unpremultiply_alpha, |
- const GLfloat transform_matrix[16]) { |
+ const GLfloat transform_matrix[16], |
+ GLint scissor_x, |
+ GLint scissor_y, |
+ GLsizei scissor_width, |
+ GLsizei scissor_height) { |
DCHECK(source_target == GL_TEXTURE_2D || |
source_target == GL_TEXTURE_RECTANGLE_ARB || |
source_target == GL_TEXTURE_EXTERNAL_OES); |
@@ -580,13 +569,14 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureInternal( |
glTexParameteri(source_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
glDisable(GL_DEPTH_TEST); |
- glDisable(GL_SCISSOR_TEST); |
glDisable(GL_STENCIL_TEST); |
glDisable(GL_CULL_FACE); |
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); |
glDepthMask(GL_FALSE); |
glDisable(GL_BLEND); |
+ glEnable(GL_SCISSOR_TEST); |
+ glScissor(scissor_x, scissor_y, scissor_width, scissor_height); |
glViewport(0, 0, dest_width, dest_height); |
glDrawArrays(GL_TRIANGLE_FAN, 0, 4); |
} |