| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef GPU_COMMAND_BUFFER_SERVICE_GL_STREAM_TEXTURE_IMAGE_H_ |
| #define GPU_COMMAND_BUFFER_SERVICE_GL_STREAM_TEXTURE_IMAGE_H_ |
| |
| #include "gpu/gpu_gles2_export.h" |
| #include "ui/gfx/gpu_fence.h" |
| #include "ui/gl/gl_image.h" |
| |
| namespace gpu { |
| namespace gles2 { |
| |
| // Specialization of GLImage that allows us to support (stream) textures |
| // that supply a texture matrix. |
| class GPU_GLES2_EXPORT GLStreamTextureImage : public gl::GLImage { |
| public: |
| // Get the matrix. |
| // Copy the texture matrix for this image into |matrix|. |
| // Subclasses must return a matrix appropriate for a coordinate system where |
| // UV=(0,0) corresponds to the top left corner of the image. |
| virtual void GetTextureMatrix(float matrix[16]) = 0; |
| |
| virtual void NotifyPromotionHint(bool promotion_hint, |
| int display_x, |
| int display_y, |
| int display_width, |
| int display_height) = 0; |
| |
| protected: |
| ~GLStreamTextureImage() override = default; |
| |
| // Convenience function for subclasses that deal with SurfaceTextures, whose |
| // coordinate system has (0,0) at the bottom left of the image. |
| // [ a e i m ] [ 1 0 0 0 ] [ a -e i m+e ] |
| // [ b f j n ] [ 0 -1 0 1 ] = [ b -f j n+f ] |
| // [ c g k o ] [ 0 0 1 0 ] [ c -g k o+g ] |
| // [ d h l p ] [ 0 0 0 1 ] [ d -h l p+h ] |
| static void YInvertMatrix(float matrix[16]) { |
| for (int i = 0; i < 4; ++i) { |
| matrix[i + 12] += matrix[i + 4]; |
| matrix[i + 4] = -matrix[i + 4]; |
| } |
| } |
| }; |
| |
| } // namespace gles2 |
| } // namespace gpu |
| |
| #endif // GPU_COMMAND_BUFFER_SERVICE_GL_STREAM_TEXTURE_IMAGE_H_ |