1pub mod aabb;
2pub mod bloom;
3pub mod bloom_composite_mode;
4pub mod bloom_prefilter;
5pub mod camera;
6pub mod camera_3d;
7pub mod camera_3d_depth_load_op;
8pub mod camera_3d_depth_texture_usage;
9pub mod camera_main_texture_usages;
10pub mod clear_color;
11pub mod clear_color_config;
12pub mod core_pipeline_plugin;
13pub mod cubemap_frusta;
14pub mod cubemap_layout;
15pub mod cubemap_visible_entities;
16pub mod culling_sphere;
17pub mod exposure;
18pub mod frustum;
19pub mod half_space;
20pub mod inherited_visibility;
21pub mod main_pass_resolution_override;
22pub mod normalized_render_target;
23pub mod physical_camera_parameters;
24pub mod plugin;
25pub mod projection;
26pub mod render_layers;
27pub mod render_target;
28pub mod screen_space_transmission_quality;
29pub mod skybox;
30pub mod sub_camera_view;
31pub mod tonemapping;
32pub mod unit_markers;
33pub mod view_visibility;
34pub mod viewport;
35pub mod visibility;
36pub mod visibility_batch;
37pub mod visibility_class;
38pub mod visibility_range;
39pub mod visible_mesh_entities;
40
41pub use aabb::PyAabb;
42use bevy::{
43 camera::{
44 Camera, Camera2d, Camera3d, CameraMainTextureUsages, ClearColor, Exposure, Projection,
45 RenderTarget,
46 primitives::{Aabb, CubemapFrusta, Frustum},
47 visibility::{
48 CubemapVisibleEntities, NoCpuCulling, NoFrustumCulling, RenderLayers, Visibility,
49 VisibilityClass, VisibilityRange, VisibleMeshEntities,
50 },
51 },
52 core_pipeline::{
53 Skybox,
54 prepass::{DeferredPrepass, DepthPrepass, MotionVectorPrepass, NormalPrepass},
55 tonemapping::Tonemapping,
56 },
57 post_process::bloom::Bloom,
58 prelude::{InheritedVisibility, ViewVisibility},
59};
60pub use bloom::PyBloom;
61pub use bloom_composite_mode::PyBloomCompositeMode;
62pub use bloom_prefilter::PyBloomPrefilter;
63pub use camera::PyCamera;
64pub use camera_3d::PyCamera3d;
65pub use camera_3d_depth_load_op::PyCamera3dDepthLoadOp;
66pub use camera_3d_depth_texture_usage::PyCamera3dDepthTextureUsage;
67pub use camera_main_texture_usages::PyCameraMainTextureUsages;
68pub use clear_color::PyClearColor;
69pub use clear_color_config::PyClearColorConfig;
70pub use core_pipeline_plugin::PyCorePipelinePlugin;
71pub use cubemap_frusta::PyCubemapFrusta;
72pub use cubemap_layout::PyCubemapLayout;
73pub use cubemap_visible_entities::PyCubemapVisibleEntities;
74pub use culling_sphere::PyCullingSphere;
75pub use exposure::PyExposure;
76pub use frustum::PyFrustum;
77pub use half_space::PyHalfSpace;
78pub use inherited_visibility::PyInheritedVisibility;
79pub use main_pass_resolution_override::PyMainPassResolutionOverride;
80pub use normalized_render_target::PyNormalizedRenderTarget;
81pub use physical_camera_parameters::PyPhysicalCameraParameters;
82pub use plugin::PyCameraPlugin;
83pub use projection::{PyOrthographicProjection, PyPerspectiveProjection, PyProjection};
84use pybevy_core::{plugin::plugin_registry, registry::global_registry};
85use pybevy_macros::{
86 component_bridge, newtype_bridge, plugin_bridge, resource_bridge, unit_bridge,
87};
88pub use pybevy_render::{
90 PyColorGrading, PyColorGradingGlobal, PyColorGradingSection, PyHdr, PyMipBias, PyMsaa,
91 PyNoAutomaticBatching, PyNoIndirectDrawing, PyOcclusionCulling, PyTemporalJitter,
92};
93pub mod scaling_mode;
95use pyo3::prelude::*;
96pub use render_layers::PyRenderLayers;
97pub use render_target::PyRenderTarget;
98pub use scaling_mode::PyScalingMode;
99pub use screen_space_transmission_quality::PyScreenSpaceTransmissionQuality;
100pub use skybox::PySkybox;
101pub use sub_camera_view::PySubCameraView;
102pub use tonemapping::PyTonemapping;
103pub use unit_markers::{
104 PyCamera2d, PyDeferredPrepass, PyDepthPrepass, PyMotionVectorPrepass, PyNoCpuCulling,
105 PyNoFrustumCulling, PyNormalPrepass,
106};
107pub use view_visibility::PyViewVisibility;
108pub use viewport::PyViewport;
109pub use visibility::PyVisibility;
110pub use visibility_class::PyVisibilityClass;
111pub use visibility_range::PyVisibilityRange;
112pub use visible_mesh_entities::PyVisibleMeshEntities;
113
114unit_bridge!(NoCpuCulling, PyNoCpuCulling);
116unit_bridge!(NoFrustumCulling, PyNoFrustumCulling);
117unit_bridge!(Camera2d, PyCamera2d);
118unit_bridge!(DepthPrepass, PyDepthPrepass);
119unit_bridge!(NormalPrepass, PyNormalPrepass);
120unit_bridge!(MotionVectorPrepass, PyMotionVectorPrepass);
121unit_bridge!(DeferredPrepass, PyDeferredPrepass);
122
123component_bridge!(Camera, PyCamera, view_fields = [is_active]);
125component_bridge!(Camera3d, PyCamera3d);
126component_bridge!(InheritedVisibility, PyInheritedVisibility);
127component_bridge!(ViewVisibility, PyViewVisibility);
128component_bridge!(VisibilityRange, PyVisibilityRange, view_fields = [use_aabb]);
129component_bridge!(Exposure, PyExposure, view_fields = [ev100]);
130component_bridge!(RenderLayers, PyRenderLayers);
131component_bridge!(Aabb, PyAabb);
132component_bridge!(
133 Bloom,
134 PyBloom,
135 view_fields = [
136 intensity,
137 low_frequency_boost,
138 low_frequency_boost_curvature,
139 high_pass_frequency,
140 max_mip_dimension
141 ]
142);
143component_bridge!(CubemapFrusta, PyCubemapFrusta);
144component_bridge!(CubemapVisibleEntities, PyCubemapVisibleEntities);
145component_bridge!(Frustum, PyFrustum);
146component_bridge!(Projection, PyProjection);
147component_bridge!(Visibility, PyVisibility);
148component_bridge!(VisibilityClass, PyVisibilityClass);
149component_bridge!(VisibleMeshEntities, PyVisibleMeshEntities);
150component_bridge!(Skybox, PySkybox, view_fields = [brightness]);
151component_bridge!(RenderTarget, PyRenderTarget);
152
153newtype_bridge!(Tonemapping, PyTonemapping);
155newtype_bridge!(CameraMainTextureUsages, PyCameraMainTextureUsages);
156resource_bridge!(ClearColor, PyClearColor);
160
161plugin_bridge!(PyCameraPlugin, bevy::camera::CameraPlugin);
163plugin_bridge!(
164 PyCorePipelinePlugin,
165 bevy::core_pipeline::CorePipelinePlugin
166);
167pub fn register_camera_bridges() {
168 global_registry::register_component_bridge(NoCpuCullingBridge);
170 global_registry::register_component_bridge(NoFrustumCullingBridge);
171 global_registry::register_component_bridge(Camera2dBridge);
172 global_registry::register_component_bridge(DepthPrepassBridge);
173 global_registry::register_component_bridge(NormalPrepassBridge);
174 global_registry::register_component_bridge(MotionVectorPrepassBridge);
175 global_registry::register_component_bridge(DeferredPrepassBridge);
176
177 global_registry::register_component_bridge(CameraBridge);
179 global_registry::register_component_bridge(Camera3dBridge);
180 global_registry::register_component_bridge(InheritedVisibilityBridge);
181 global_registry::register_component_bridge(ViewVisibilityBridge);
182 global_registry::register_component_bridge(VisibilityRangeBridge);
183 global_registry::register_component_bridge(ExposureBridge);
184 global_registry::register_component_bridge(RenderLayersBridge);
185 global_registry::register_component_bridge(AabbBridge);
186 global_registry::register_component_bridge(BloomBridge);
187 global_registry::register_component_bridge(CubemapFrustaBridge);
188 global_registry::register_component_bridge(CubemapVisibleEntitiesBridge);
189 global_registry::register_component_bridge(FrustumBridge);
190 global_registry::register_component_bridge(ProjectionBridge);
191 global_registry::register_component_bridge(VisibilityBridge);
192 global_registry::register_component_bridge(VisibilityClassBridge);
193 global_registry::register_component_bridge(VisibleMeshEntitiesBridge);
194 global_registry::register_component_bridge(SkyboxBridge);
195 global_registry::register_component_bridge(RenderTargetBridge);
196
197 global_registry::register_component_bridge(TonemappingBridge);
199 global_registry::register_component_bridge(CameraMainTextureUsagesBridge);
200 global_registry::register_resource_bridge(ClearColorBridge);
204
205 plugin_registry::register_plugin_bridge(CameraPluginBridge);
207 plugin_registry::register_plugin_bridge(CorePipelinePluginBridge);
208
209 visibility_batch::register_visibility_batch_bridge();
211 register_exposure_batch();
212 register_camera_batch();
213 register_skybox_batch();
214 register_visibility_range_batch();
215 register_bloom_batch();
216}
217pub fn add_camera_classes(m: &Bound<'_, PyModule>) -> PyResult<()> {
218 register_camera_bridges();
219
220 m.add_class::<PyCameraPlugin>()?;
222 m.add_class::<PyCorePipelinePlugin>()?;
223
224 m.add_class::<PyNoCpuCulling>()?;
226 m.add_class::<PyNoFrustumCulling>()?;
227 m.add_class::<PyCamera2d>()?;
228 m.add_class::<PyDepthPrepass>()?;
229 m.add_class::<PyNormalPrepass>()?;
230 m.add_class::<PyMotionVectorPrepass>()?;
231 m.add_class::<PyDeferredPrepass>()?;
232
233 m.add_class::<PyHdr>()?;
235 m.add_class::<PyNoAutomaticBatching>()?;
236 m.add_class::<PyNoIndirectDrawing>()?;
237 m.add_class::<PyOcclusionCulling>()?;
238
239 m.add_class::<PyCamera>()?;
241 m.add_class::<PyCamera3d>()?;
242 m.add_class::<PyInheritedVisibility>()?;
243 m.add_class::<PyViewVisibility>()?;
244 m.add_class::<PyVisibilityRange>()?;
245 m.add_class::<PyExposure>()?;
246 m.add_class::<PyRenderLayers>()?;
247 m.add_class::<PyAabb>()?;
248 m.add_class::<PyBloom>()?;
249 m.add_class::<PyColorGrading>()?;
250 m.add_class::<PyCubemapFrusta>()?;
251 m.add_class::<PyCubemapVisibleEntities>()?;
252 m.add_class::<PyFrustum>()?;
253 m.add_class::<PyProjection>()?;
254 m.add_class::<PyVisibility>()?;
255 m.add_class::<visibility_batch::PyVisibilityBatch>()?;
256 m.add_class::<PyVisibilityClass>()?;
257 m.add_class::<PyVisibleMeshEntities>()?;
258 m.add_class::<PySkybox>()?;
259
260 m.add_class::<PyTemporalJitter>()?;
262
263 m.add_class::<PyRenderTarget>()?;
265 m.add_class::<PyNormalizedRenderTarget>()?;
266
267 m.add_class::<PyPhysicalCameraParameters>()?;
269 m.add_class::<PyHalfSpace>()?;
270 m.add_class::<PyCullingSphere>()?;
271 m.add_class::<PyScalingMode>()?;
272 m.add_class::<PyCubemapLayout>()?;
273 m.add_class::<PyScreenSpaceTransmissionQuality>()?;
274 m.add_class::<PyBloomCompositeMode>()?;
275 m.add_class::<PyBloomPrefilter>()?;
276 m.add_class::<PyCamera3dDepthLoadOp>()?;
277 m.add_class::<PyCamera3dDepthTextureUsage>()?;
278 m.add_class::<PyClearColorConfig>()?;
279 m.add_class::<PySubCameraView>()?;
280 m.add_class::<PyPerspectiveProjection>()?;
281 m.add_class::<PyOrthographicProjection>()?;
282
283 m.add_class::<PyColorGradingSection>()?;
285 m.add_class::<PyColorGradingGlobal>()?;
286
287 m.add_class::<PyTonemapping>()?;
289 m.add_class::<PyCameraMainTextureUsages>()?;
290 m.add_class::<PyMainPassResolutionOverride>()?;
291 m.add_class::<PyViewport>()?;
292
293 m.add_class::<PyMsaa>()?;
295 m.add_class::<PyMipBias>()?;
296
297 m.add_class::<PyClearColor>()?;
299
300 Ok(())
301}
302
303pub fn add_module(parent: &Bound<'_, PyModule>) -> PyResult<()> {
304 let m = PyModule::new(parent.py(), "camera")?;
305 add_camera_classes(&m)?;
306 parent.add_submodule(&m)
307}
308
309pub fn add_core_pipeline_module(parent: &Bound<'_, PyModule>) -> PyResult<()> {
310 let m = PyModule::new(parent.py(), "core_pipeline")?;
311 m.add_class::<PyCorePipelinePlugin>()?;
312 parent.add_submodule(&m)
313}