You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/core/embed/lib/gl_bitblt.h

121 lines
4.2 KiB

/*
* This file is part of the Trezor project, https://trezor.io/
*
* Copyright (c) SatoshiLabs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GL_BITBLT_H
#define GL_BITBLT_H
#include <stdbool.h>
#include <stdint.h>
#include "gl_color.h"
// These module provides low-level bit block transfer (bitblt)
// operations on different bitmap/framebuffer types.
//
// `fill` - fills a rectangle with a solid color (with an optional
// alpha, allowing color blending).
//
// `copy` - copies a bitmap or part of it to the destination bitmap.
//
// `blend` - blends a bitmap with a 1- or 4-bit alpha channel to the
// destination using background and foreground colors.
//
// These operations might be accelerated using DMA2D (ChromART accelerator)
// on the STM32 platform.
// Represents a set of parameters for a bit block transfer operation.
typedef struct {
// Pointer to the destination bitmap's first row
void* dst_row;
// Number of bytes per line in the destination bitmap
uint16_t dst_stride;
// X-coordinate of the top-left corner inside the destination
uint16_t dst_x;
// Y-coordinate of the top-left corner inside the destination
uint16_t dst_y;
// Height of the filled/copied/blended area
uint16_t height;
// Width of the filled/copied/blended area
uint16_t width;
// Pointer to the source bitmap's first row
// (unused for fill operations)
void* src_row;
// Number of bytes per line in the source bitmap
// (unused for fill operations)
uint16_t src_stride;
// X-coordinate of the origin in the source bitmap
// (unused for fill operations)
uint16_t src_x;
// Y-coordinate of the origin in the source bitmap
// (unused for fill operations)
uint16_t src_y;
// Foreground color used when copying/blending/filling
gl_color_t src_fg;
// Background color used when copying mono bitmaps
gl_color_t src_bg;
// Alpha value for fill operation (255 => normal fill, 0 => noop)
uint8_t src_alpha;
} gl_bitblt_t;
// Functions for RGB565 bitmap/framebuffer
// Fills a rectangle with a solid color
void gl_rgb565_fill(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 1-bit alpha channel)
void gl_rgb565_copy_mono1p(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 4-bit alpha channel)
void gl_rgb565_copy_mono4(const gl_bitblt_t* bb);
// Copies an RGB565 bitmap
void gl_rgb565_copy_rgb565(const gl_bitblt_t* bb);
// Blends a mono bitmap (with 4-bit alpha channel)
// with the destination bitmap
void gl_rgb565_blend_mono4(const gl_bitblt_t* bb);
// Functions for RGBA8888 bitmap/framebuffer
void gl_rgba8888_fill(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 1-bit alpha channel)
void gl_rgba8888_copy_mono1p(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 4-bit alpha channel)
void gl_rgba8888_copy_mono4(const gl_bitblt_t* bb);
// Copies an RGB565 bitmap
void gl_rgba8888_copy_rgb565(const gl_bitblt_t* bb);
// Copies an RGBA8888 bitmap
void gl_rgba8888_copy_rgba8888(const gl_bitblt_t* bb);
// Blends a mono bitmap (with 4-bit alpha channel)
// with the destination bitmap
void gl_rgba8888_blend_mono4(const gl_bitblt_t* bb);
// Functions for Mono8 bitmap/framebuffer
void gl_mono8_fill(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 1-bit alpha channel)
void gl_mono8_copy_mono1p(const gl_bitblt_t* bb);
// Copies a mono bitmap (with 4-bit alpha channel)
void gl_mono8_copy_mono4(const gl_bitblt_t* bb);
// Blends a mono bitmap (with 1-bit alpha channel)
// with the destination bitmap
void gl_mono8_blend_mono1p(const gl_bitblt_t* bb);
// Blends a mono bitmap (with 4-bit alpha channel)
// with the destination bitmap
void gl_mono8_blend_mono4(const gl_bitblt_t* bb);
#endif // GL_BITBLT_H