embedded-3dgfx 0.7.1

3D graphics rendering for embedded systems (fork of embedded-gfx by Kezii)
Documentation
//! Gizmo wireframe recording.

use embedded_graphics_core::pixelcolor::Rgb565;

use crate::engine::K3dengine;
use crate::error::RenderError;
use crate::pipeline::command_buffer::{CommandBuffer, RenderCommand};

pub(crate) fn record_aabb_gizmo<const MAX: usize>(
    engine: &K3dengine,
    aabb: &crate::pipeline::vertex::bounds::Aabb,
    model_matrix: &nalgebra::Matrix4<f32>,
    color: Rgb565,
    commands: &mut CommandBuffer<MAX>,
) -> Result<(), RenderError> {
    let mut err = None;
    crate::gizmos::emit_aabb_wireframe_projected(
        aabb,
        model_matrix,
        |p| {
            crate::pipeline::vertex::transform::transform_point(
                &engine.camera,
                engine.width,
                engine.height,
                &p,
                engine.camera.vp_matrix,
            )
        },
        color,
        |prim| {
            if err.is_none()
                && let Err(e) = commands.push(RenderCommand::Draw(prim))
            {
                err = Some(e);
            }
        },
    );
    match err {
        Some(e) => Err(e),
        None => Ok(()),
    }
}

pub(crate) fn record_frustum_gizmo<const MAX: usize>(
    engine: &K3dengine,
    color: Rgb565,
    commands: &mut CommandBuffer<MAX>,
) -> Result<(), RenderError> {
    let mut err = None;
    crate::gizmos::emit_frustum_wireframe(
        &engine.camera,
        |p| {
            crate::pipeline::vertex::transform::transform_point(
                &engine.camera,
                engine.width,
                engine.height,
                &p,
                engine.camera.vp_matrix,
            )
        },
        color,
        |prim| {
            if err.is_none()
                && let Err(e) = commands.push(RenderCommand::Draw(prim))
            {
                err = Some(e);
            }
        },
    );
    match err {
        Some(e) => Err(e),
        None => Ok(()),
    }
}