XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

独立 CPU framebuffer 平台

本组件以现有 XFESystem.Desktop 接口提供真实像素绘制、场景恢复、Web viewport 缓存、文字测量和 alpha 栅格。它不引用 Cosmos,也不包含 Cosmos 的 Canvas / TrueTypeFont 封装。

MemoryFramebufferPresenter 直接写入调用方已映射的物理 framebuffer。它验证地址、映射长度、可见宽高、行 pitch、16/24/32 bit little-endian 像素格式及不重叠的连续 RGB masks;损伤区以外、每行 padding 和映射尾部均不写入。内核负责该映射的有效性与生命周期,以及硬件写入顺序/模式切换。调用时缓冲仍须映射;本组件不把任意地址映射到物理设备。ArrayFramebufferPresenter 将相同 CPU 像素复制到真实宿主内存,可供独立渲染与测试读取。

var surface = new FramebufferSurface(mappedAddress, mappedBytes, width, height,
    pitchBytes, bitsPerPixel, redMask, greenMask, blueMask);
var canvas = new CpuFramebufferCanvas(new MemoryFramebufferPresenter(surface));
var desktop = new DesktopSession(canvas, new MemoryWorkspace());
desktop.Render();

CpuFramebufferCanvas 自写 Fill、裁剪线段、straight-alpha 混合、嵌套 clip、RGBA 图标采样及输出格式转换。场景/平移与 Web frame 缓存复用现有项目的 DesktopSceneMotionBuffer 和 DesktopWebFrameCache。成功的 Present 后才更新帧编号与已呈现像素快照;新 CPU 写入不会提前改变 readback 指纹。该 CPU 路径不提供 GPU 刷新率、vblank 或 CUDA 声明。

字体解析与抗锯齿使用官方 LunarFonts 原始 Font.cs,固定提交、原字节 SHA256、MIT 正文和上游 README 位于 ThirdParty/LunarFonts。自写 PlatformFonts 使用字体 units-per-em、真实 advance/kerning、hhea line metrics 和按实际 glyph 缺失的中文回退,保留每个 canvas 自己的缓存。供字体解析的输入限于随项目固定的 TTF 资产。上游 API 仅能直接绘制 BMP 字符,补充平面字符会使用替换字形,当前不实现复杂文本 shaping。

捆绑字体继续使用 Cascadia Mono 2407.24、Lato 2.015、XFE Web CJK(Noto Sans SC 2.004 的现有派生 TTF)和 Bootstrap Icons 1.11.3。字体与图标资源没有重制、改名冒充 Windows 字体或修改原版权;完整 OFL/MIT 与生成来源仍位于相应 assets/fonts / assets/DesktopIcons。布局请求 Consolas 时实际后端是 Cascadia Mono。

编辑准备使用独立字体实例和最小离屏像素缓冲,避免每个 worker 再分配整屏 scene/scanout。IEditorPreparationCanvasHandoff 仅在现有编辑服务已经完成独占所有权发布之后允许相同资产/缩放的 UI canvas 接收缓存。线程调度、GC、异常、计时器和 NativeAOT PAL 由新的内核/运行时负责。

测试:

dotnet test Tests/XFESystem.Platform.Tests/XFESystem.Platform.Tests.csproj -c Release --artifacts-path build/PlatformTestArtifacts

测试覆盖实际映射内存写入、pitch/掩码/边界、coverage 与 clip、场景恢复、真实字体/中文/icon、现有 Desktop 和实际 AngleSharp/Jint/CSS Browser 渲染。build/PlatformProof-* 的 PNG 来自测试 framebuffer 本身,没有宿主浏览器参与。宿主测试不构成裸机初始化或实体显示验收。