四层抽象,自上而下:

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。

图形驱动

驱动目录说明
Vulkandrivers/vulkan/主桌面后端;RenderingContextDriverVulkan + RenderingDeviceDriverVulkan + volk 加载层
D3D12drivers/d3d12/Windows;同构 + DXMA 分配器 + NIR 把 SPIR-V 翻译成 DXIL(godot_nir.h)
Metaldrivers/metal/Apple;另有 metal3 变体
GLES3drivers/gles3/兼容/Web;上下文由 drivers/gl_context + drivers/egl 提供

Shader 处理:modules/glslang 编译 GLSL→SPIR-V;servers/rendering/renderer_rd/spirv-reflect 做反射。

相关