Skip to main content

anvilkit_render/
lib.rs

1//! # AnvilKit 渲染系统
2//! 
3//! AnvilKit 的渲染模块提供了基于 wgpu 和 winit 的跨平台图形渲染功能。
4//! 
5//! ## 核心特性
6//! 
7//! - **跨平台支持**: 支持 Windows、macOS、Linux 和 Web 平台
8//! - **现代图形 API**: 基于 wgpu,支持 Vulkan、Metal、D3D12、OpenGL 和 WebGPU
9//! - **ECS 集成**: 与 AnvilKit ECS 系统无缝集成
10//! - **插件架构**: 模块化的渲染插件系统
11//! - **高性能**: 零成本抽象和 GPU 优化
12//! 
13//! ## 架构设计
14//! 
15//! 渲染系统采用分层架构:
16//! - **窗口层**: 基于 winit 的窗口管理和事件处理
17//! - **设备层**: wgpu 设备、适配器和表面管理
18//! - **渲染层**: 渲染管线、资源和绘制命令
19//! - **集成层**: ECS 插件和组件系统
20//! 
21//! ## 使用示例
22//! 
23//! ```rust,no_run
24//! use anvilkit_render::prelude::*;
25//! use anvilkit_ecs::prelude::*;
26//! 
27//! // 创建应用并添加渲染插件
28//! let mut app = App::new();
29//! app.add_plugins(RenderPlugin::default())
30//!    .run();
31//! ```
32
33#![warn(missing_docs)]
34
35pub mod window;
36pub mod renderer;
37pub mod plugin;
38
39/// 预导入模块
40///
41/// 包含最常用的类型和 trait,方便用户导入。
42pub mod prelude {
43    pub use crate::window::{RenderApp, WindowConfig};
44    pub use crate::renderer::{RenderDevice, RenderSurface, PbrVertex};
45    pub use crate::plugin::{RenderPlugin, CameraComponent};
46
47    // ECS 渲染资源
48    pub use crate::renderer::assets::{MeshHandle, MaterialHandle, PipelineHandle, RenderAssets};
49    pub use crate::renderer::draw::{ActiveCamera, Aabb, DrawCommandList, Frustum, InstanceData, SceneLights, DirectionalLight, PointLight, SpotLight, MaterialParams};
50    pub use crate::renderer::state::{RenderState, PbrSceneUniform, GpuLight, MAX_LIGHTS};
51
52    // 重新导出核心依赖的常用类型
53    pub use wgpu::{
54        Device, Queue, Surface, SurfaceConfiguration, TextureFormat,
55        RenderPipeline, RenderPass, CommandEncoder, Buffer, Texture,
56        BindGroup, BindGroupLayout, PipelineLayout,
57    };
58
59    pub use winit::{
60        event::{WindowEvent, DeviceEvent},
61        event_loop::{EventLoop, ActiveEventLoop},
62        window::{Window, WindowId},
63        application::ApplicationHandler,
64    };
65
66    // 重新导出 AnvilKit 核心类型
67    pub use anvilkit_core::prelude::*;
68    pub use anvilkit_ecs::prelude::*;
69}
70
71#[cfg(test)]
72mod tests {
73    #[test]
74    fn test_version_info() {
75        assert_eq!(env!("CARGO_PKG_NAME"), "anvilkit-render");
76        assert_eq!(env!("CARGO_PKG_VERSION"), "0.1.0");
77    }
78}