GraphicsOutPutProtocol图形输出协议
GraphicsOutPutProtocol作为学习的第一个协议,它的头文件位于MdePkg/Include/Protocol/GraphicsOutput.h,Guid如下:
1 | GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiGraphicsOutputProtocolGuid = { 0x9042A9DE, 0x23DC, 0x4A38, { 0x96, 0xFB, 0x7A, 0xDE, 0xD0, 0x80, 0x51, 0x6A }}; |
除去最后一个PixelFormatMax用于范围检查,GraphicsOutPut总计提供了4种可选格式,小端存储下使用32位扩展RGB888格式的应该选择第二个PixelBlueGreenRedReserved8BitPerColor,而使用24位RGB888、16位RGB565、RGB555或其他格式的则应该选择第三个PixelBitMask,这点需要注意。
1 | typedef struct { |
对比传统BIOS下VESA的定义(不了解VESA的需要重点看下面内容),X对应Width,Y对应Height,像素格式对应BPP(Bits Per Pixel),每行像素数量对应Pitch(Bytes Per Scanline)。
不使用Blt直接操作FrameBuffer时需要注意,Pitch并不一定等于Width,因为各种原因(比如内存对齐,像素格式等),像素数据不一定是连续的,像素行与像素行之间可能存在填充(Padding),所以在计算第Y行,第X列像素的偏移时,计算公式应该是:Offset =(Y * Pitch + X)* BPP,禁止将Pitch替换为Width避免出现花屏等问题。
1 | typedef struct { |
过段时间再写:)
1 | // 返回图形设备和当前视频输出设备组合所支持的可用图形模式信息 |
1 | typedef struct { |
