// Copyright 2022 The Chromium Authors // 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_SHARED_IMAGE_GL_REPACK_UTILS_H_ #define GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_GL_REPACK_UTILS_H_ #include <vector> #include "gpu/gpu_gles2_export.h" #include "ui/gfx/geometry/size.h" class SkPixmap; namespace gpu { // Repacks `src_pixmap` as 3 byte RGB pixel suitable for GL_RGB pixel upload. // `src_pixmap` must either be 4 byte RGBX or BGRX. Repacked data will have // 4 byte stride alignment. GPU_GLES2_EXPORT std::vector<uint8_t> RepackPixelDataAsRgb( const gfx::Size& size, const SkPixmap& src_pixmap, bool src_is_bgrx); // Repacks `src_pixmap` so it has `dst_stride`. `dst_stride` must be smaller // than the stride of `src_pixmap`. GPU_GLES2_EXPORT std::vector<uint8_t> RepackPixelDataWithStride( const gfx::Size& size, const SkPixmap& src_pixmap, size_t dst_stride); // Unpacks `src_data` into `dst_pixmap`. The stride of `dst_pixmap` must be // larger than `src_stride`. GPU_GLES2_EXPORT void UnpackPixelDataWithStride( const gfx::Size& size, const std::vector<uint8_t>& src_data, size_t src_stride, const SkPixmap& dst_pixmap); // Swizzles RGBA <-> BGRA / RGBX <-> BGRX or more exactly between byte 0 and 2 // of each pixel. `pixmap` must be 4 bytes per pixel. GPU_GLES2_EXPORT void SwizzleRedAndBlue(const SkPixmap& pixmap); } // namespace gpu #endif // GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_GL_REPACK_UTILS_H_