blob: be8d2bbb9e9f80d8f664135d3ae549761e5cd0de [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.images;
// Specifies how pixels are represented in the image buffer.
enum PixelFormat {
// A 32-bit four-component unsigned integer format.
// Byte order: B, G, R, A (little-endian ARGB packed 32-bit word).
// Equivalent to Skia |kBGRA_8888_SkColorType| color type.
// Equivalent to Zircon |ARGB_8888| pixel format on little-endian arch.
BGRA_8 = 0;
// A 32-bit component that contains information for 2 pixels:
// Byte order: Y1, U, Y2, V
// Unpacks to 2 RGB pixels, where RGB1 = func(Y1, U, V)
// and RGB2 = func(Y2, U, V)
// Equivalent to YUV422
YUY2 = 1;
};
// Specifies how pixel color information should be interpreted.
enum ColorSpace {
SRGB = 0;
};
// Specifies how pixels are arranged in memory.
enum Tiling {
// Pixels are packed linearly.
// Equivalent to |VK_IMAGE_TILING_LINEAR|.
LINEAR = 0;
// Pixels are packed in a GPU-dependent optimal format.
// Equivalent to |VK_IMAGE_TILING_OPTIMAL|.
GPU_OPTIMAL = 1;
};
// Specifies how alpha information should be interpreted.
enum AlphaFormat {
// Image is considered to be opaque. Alpha channel is ignored.
// Blend function is: src.RGB
OPAQUE = 0;
// Color channels have been premultiplied by alpha.
// Blend function is: src.RGB + (dest.RGB * (1 - src.A))
PREMULTIPLIED = 1;
// Color channels have not been premultiplied by alpha.
// Blend function is: (src.RGB * src.A) + (dest.RGB * (1 - src.A))
NON_PREMULTIPLIED = 2;
};
enum Transform {
// Pixels are displayed normally.
NORMAL = 0;
// Pixels are mirrored left-right.
FLIP_HORIZONTAL = 1;
// Pixels are flipped vertically.
FLIP_VERTICAL = 2;
// Pixels are flipped vertically and mirrored left-right.
FLIP_VERTICAL_AND_HORIZONTAL = 3;
};
// Information about a graphical image (texture) including its format and size.
struct ImageInfo {
// Specifies if the image should be mirrored before displaying.
Transform transform = NORMAL;
// The width and height of the image in pixels.
uint32 width;
uint32 height;
// The number of bytes per row in the image buffer.
uint32 stride;
// The pixel format of the image.
PixelFormat pixel_format = BGRA_8;
// The pixel color space.
ColorSpace color_space = SRGB;
// The pixel arrangement in memory.
Tiling tiling = LINEAR;
// Specifies the interpretion of the alpha channel, if one exists.
AlphaFormat alpha_format = OPAQUE;
};