Skip to content

Commit

Permalink
Detect all-zero projection matrix.
Browse files Browse the repository at this point in the history
  • Loading branch information
tormeh committed Sep 18, 2023
1 parent 0ed06cf commit 9d212ac
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions crates/bevy_render/src/camera/camera.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,17 @@ impl Camera {
}

#[inline]
fn finite_projection_matrix(&self) -> Result<Mat4, ProjectionMatrixNotFiniteError> {
fn finite_projection_matrix(&self) -> Result<Mat4, BadProjectionMatrixError> {
let projection_matrix = self.computed.projection_matrix;
match projection_matrix.is_finite() {
true => Ok(projection_matrix),
false => Err(ProjectionMatrixNotFiniteError(projection_matrix)),
false => Err(BadProjectionMatrixError(projection_matrix)),
true => {
if projection_matrix == Mat4::ZERO {
Err(BadProjectionMatrixError(projection_matrix))
} else {
Ok(projection_matrix)
}
}
}
}

Expand Down Expand Up @@ -433,14 +439,14 @@ impl Camera {
pub enum NdcToWorldError {
WorldSpaceCoordsNotFiniteError(Vec3),
CameraTransformNotFiniteError(CameraTransformNotFiniteError),
ProjectionMatrixNotFiniteError(ProjectionMatrixNotFiniteError),
ProjectionMatrixNotFiniteError(BadProjectionMatrixError),
}

#[derive(Debug)]
pub enum WorldToNdcError {
NdcSpaceCoordsNotFiniteError(Vec3),
CameraTransformNotFiniteError(CameraTransformNotFiniteError),
ProjectionMatrixNotFiniteError(ProjectionMatrixNotFiniteError),
ProjectionMatrixNotFiniteError(BadProjectionMatrixError),
}

#[derive(Debug)]
Expand All @@ -453,7 +459,7 @@ pub struct LogicalViewportSizeError {
pub enum ViewportToWorldError {
LogicalViewportSizeError(LogicalViewportSizeError),
CameraTransformNotFiniteError(CameraTransformNotFiniteError),
ProjectionMatrixNotFiniteError(ProjectionMatrixNotFiniteError),
ProjectionMatrixNotFiniteError(BadProjectionMatrixError),
WorldNearPlaneNotFiniteError(Vec3),
WorldFarPlaneNanError(Vec3), //Presumably this being infinite is sometimes ok?
}
Expand All @@ -472,7 +478,7 @@ pub enum WorldToViewportError {
}

#[derive(Debug)]
pub struct ProjectionMatrixNotFiniteError(Mat4);
pub struct BadProjectionMatrixError(Mat4);

#[derive(Debug)]
pub struct CameraTransformNotFiniteError(Mat4);
Expand Down

0 comments on commit 9d212ac

Please sign in to comment.