增加裁剪区域相关的几个函数:
// ---------------------------------------------------------------------------
// 剪裁区域(P0+)
// ---------------------------------------------------------------------------
//
// 剪裁区域对象(对应 EasyX 的 RECT)。
//
typedef struct {
INT32 left; // 左上角 X
INT32 top; // 左上角 Y
INT32 right; // 右下角 X
INT32 bottom; // 右下角 Y
} RECT;
/**
设置剪裁区域。后续所有绘图操作都限制在此矩形内。
@param[in] Left 左上角 X 坐标。
@param[in] Top 左上角 Y 坐标。
@param[in] Right 右下角 X 坐标(含边界)。
@param[in] Bottom 右下角 Y 坐标(含边界)。
说明:
- 坐标为逻辑坐标(受 setorigin 影响)。
- 剪裁区域与绘图目标的交集才是最终有效绘图区。
- 传入的矩形自动规范化(Left 必 < Right,Top 必 < Bottom)。
**/
VOID
EFIAPI
setcliprgn (
IN INT32 Left,
IN INT32 Top,
IN INT32 Right,
IN INT32 Bottom
);
/**
获取当前剪裁区域。
@param[out] pRect 输出剪裁矩形,若剪裁未启用则返回全屏矩形。
**/
VOID
EFIAPI
getcliprgn (
OUT RECT *pRect
);
/**
清除剪裁区域(恢复全屏绘图)。
**/
VOID
EFIAPI
clearcliprgn (
VOID
);
运行结果(之前演示使用最大分辨率,这里修改为 1024x768)

完整代码和 EFI 在这里下载: