四层抽象,自上而下:
Viewport / Node3D / CanvasItem(scene 层,只持 RID)
↓
RenderingServer # 抽象接口,589 个虚方法(571 纯虚),单例 + 工厂指针
↓
RenderingServerDefault + RendererCompositor # 默认实现 + 后端组合器
↓
RenderingDevice / RenderingDeviceDriver # GPU API 抽象
↓
drivers/vulkan · d3d12 · metal · gles3 # 具体图形 API
RenderingServer
servers/rendering/rendering_server.h:64,1182 行接口。按资源类型分区:TEXTURE(108)/SHADER(159)/MATERIAL(175)/MESH(191)/MULTIMESH/SKELETON/LIGHT/CAMERA(528)/VIEWPORT(541)/SKY/ENVIRONMENT(650)/CANVAS 2D(784)/CANVAS ITEM(804)。
- 访问:
RenderingServer::get_singleton();实例由main/main.cpp:3528创建RenderingServerDefault(是否独立渲染线程) - 每帧:
pre_draw→draw(swap_buffers, frame_step)(:973)→request_frame_drawn_callback - 场景层全部经 RID 句柄操作,主线程投递命令、渲染线程执行(命令队列机制见 architecture 线程模型;
ERR_NOT_ON_RENDER_THREAD调试宏 :48)
RendererCompositor 与存储层
renderer_compositor.h:52 把后端拆成子模块:get_canvas()/get_scene() + 8 个 storage(Texture/Mesh/Material/Particles/Light/Fog/GI/Utilities)。帧生命周期:initialize → begin_frame → blit_render_targets_to_screen → end_frame → finalize(:79-87)。全局聚合在 RenderingServerGlobals(rendering_server_globals.h:49),宏 RSG 直达。
两条后端路径:
- renderer_rd/:基于 RenderingDevice 的现代路径。
forward_clustered/(桌面 Forward+)与forward_mobile/(移动端);effects/含 FSR/FSR2、TAA、SMAA、DoF、tonemap、VRS 等后处理;environment/含 fog、GI、sky - drivers/gles3/:
RasterizerGLES3 : RendererCompositor,不走 RenderingDevice,直接 GL 调用(兼容路径,Web 平台唯一选择)
RenderingDevice:GPU API 抽象层
rendering_device.h:67(2072 行,非虚具体类,全类 _THREAD_SAFE_CLASS_):
- 持有
RenderingContextDriver *context(窗口/呈现)+RenderingDeviceDriver *driver(GPU 命令) - 概念:DrawListID / ComputeListID;
draw_list_begin/end、compute_list_begin、submit()/sync()/swap_buffers() - CPU→GPU staging buffer 三块帧回收机制(:134-153)
RenderingDeviceDriver(rendering_device_driver.h:90)是各图形驱动实现的抽象:187 个纯虚方法(buffer_create/texture_create/initialize 等)。RenderingContextDriver(rendering_context_driver.h:41)管窗口/表面/交换链,driver_create() 产出对应 RenderingDeviceDriver。
图形驱动
| 驱动 | 目录 | 说明 |
|---|---|---|
| Vulkan | drivers/vulkan/ | 主桌面后端;RenderingContextDriverVulkan + RenderingDeviceDriverVulkan + volk 加载层 |
| D3D12 | drivers/d3d12/ | Windows;同构 + DXMA 分配器 + NIR 把 SPIR-V 翻译成 DXIL(godot_nir.h) |
| Metal | drivers/metal/ | Apple;另有 metal3 变体 |
| GLES3 | drivers/gles3/ | 兼容/Web;上下文由 drivers/gl_context + drivers/egl 提供 |
Shader 处理:modules/glslang 编译 GLSL→SPIR-V;servers/rendering/renderer_rd/spirv-reflect 做反射。