diff options
author | Joursoir <chat@joursoir.net> | 2022-04-25 15:34:00 +0300 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2022-04-25 15:34:37 +0300 |
commit | 6270073d0f155ba0d570ef597a8efb6bc9853f75 (patch) | |
tree | c74c2e94c932bb05bf8312a9e744725ec28805b8 /UefiMonitorTest/Graphics.h | |
parent | c878c061227017e98014f847a0b413026b596999 (diff) | |
download | umt-6270073d0f155ba0d570ef597a8efb6bc9853f75.tar.gz umt-6270073d0f155ba0d570ef597a8efb6bc9853f75.tar.bz2 umt-6270073d0f155ba0d570ef597a8efb6bc9853f75.zip |
move graphics routines and context to a separate file
Diffstat (limited to 'UefiMonitorTest/Graphics.h')
-rw-r--r-- | UefiMonitorTest/Graphics.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/UefiMonitorTest/Graphics.h b/UefiMonitorTest/Graphics.h new file mode 100644 index 0000000..44c72aa --- /dev/null +++ b/UefiMonitorTest/Graphics.h @@ -0,0 +1,169 @@ +#ifndef UMT_GRAPHICS_H +#define UMT_GRAPHICS_H + +#include <Uefi.h> + +#include <Protocol/GraphicsOutput.h> +#include <Protocol/SimpleTextIn.h> +#include <Protocol/SimplePointer.h> + +#define PUT_PUXEL(Graphics, X, Y, Icolor) \ + Graphics->BackBuffer[X + (Y * Graphics->Pitch)] = Icolor + +typedef struct { + UINT8 Blue; + UINT8 Green; + UINT8 Red; + UINT8 Reserved; +} GRAPHICS_PIXEL_COLOR; + +typedef struct { + /// + /// The EFI_GRAPHICS_OUTPUT_PROTOCOL instance. + /// + EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; + /// + /// Base address of graphics linear frame buffer. + /// Starts from the upper left pixel. + /// + UINT32 *FrontBuffer; + /// + /// Pointer to allocated memory. Secondary linear buffer. + /// + UINT32 *BackBuffer; + /// + /// Amount of frame buffer needed to support the active mode in bytes. + /// + UINTN BufferSize; + /// + /// The size of video screen in pixels in the X dimension. + /// + UINT32 Width; + /// + /// The size of video screen in pixels in the Y dimension. + /// + UINT32 Height; + /// + /// Bit-mask defines what bits are used for different colors. + /// + EFI_PIXEL_BITMASK PixelMasks; + /// + /// Amount of bits to shift left. + /// R-G-B-Rsvd + /// + INT8 PixelShl[4]; + /// + /// Amount of bits to shift right. + /// R-G-B-Rsvd + /// + INT8 PixelShr[4]; + /// + /// The size of pixel color in bytes. + /// + UINT32 PixelWidth; + /// + /// Amount of bytes you should skip to go one pixel down. + /// + UINT32 Pitch; + // + // The EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. + // + EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInputEx; + // + // A mouse support. + // + BOOLEAN MouseSupported; + // + // The MouseInterface instance. + // + EFI_SIMPLE_POINTER_PROTOCOL *MouseInterface; +} GRAPHICS_CONTEXT; + +EFI_STATUS +PrepareGraphicsInfo ( + IN GRAPHICS_CONTEXT *Graphics, + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop + ); + +VOID +ForgetGraphicsInfo ( + IN GRAPHICS_CONTEXT *Graphics + ); + +/** + Draw a line using Bresenham's algorithm + + @retval VOID +**/ +VOID +DrawLine ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X0, + IN UINTN Y0, + IN UINTN X1, + IN UINTN Y1, + IN CONST GRAPHICS_PIXEL_COLOR *Color + ); + +VOID +PutRect ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X0, + IN UINTN Y0, + IN UINTN X1, + IN UINTN Y1, + IN CONST GRAPHICS_PIXEL_COLOR *Color + ); + +VOID +DrawCircle ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X0, + IN UINTN Y0, + IN UINTN R, + IN CONST GRAPHICS_PIXEL_COLOR *Color + ); + +/** + Draws a character to the screen + + @retval VOID +**/ +VOID +DrawChar ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X, + IN UINTN Y, + IN UINT32 Icolor, + IN CHAR16 Char + ); + +/** + Draws output based on a null-terminated Unicode format string + and a arguments list to the screen + + @retval The number of Unicode characters drawn +**/ +UINTN +EFIAPI +DrawStringVF ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X, + IN UINTN Y, + IN CONST GRAPHICS_PIXEL_COLOR *Color, + IN CONST CHAR16 *FormatString, + IN VA_LIST Marker + ); + +UINTN +EFIAPI +DrawStringF ( + IN GRAPHICS_CONTEXT *Graphics, + IN UINTN X, + IN UINTN Y, + IN CONST GRAPHICS_PIXEL_COLOR *Color, + IN CONST CHAR16 *FormatString, + ... + ); + +#endif /* UMT_GRAPHICS_H */ |