Skip to main content

GpuContext

Struct GpuContext 

Source
pub struct GpuContext {
    pub instance: Instance,
    pub device: Device,
    pub queue: Queue,
    pub adapter: Adapter,
    /* private fields */
}
Expand description

GPU context for managing compute and rendering operations

Fields§

§instance: Instance§device: Device§queue: Queue§adapter: Adapter

Implementations§

Source§

impl GpuContext

Source

pub async fn new() -> Result<Self>

Create a new GPU context

Source

pub fn from_parts( instance: Instance, adapter: Adapter, device: Device, queue: Queue, ) -> Self

Wrap a device the caller already created (for example to share it with a renderer). Pipelines are compiled on first use, as with Self::new.

Source

pub fn create_buffer_init<T: Pod>( &self, label: &str, data: &[T], usage: BufferUsages, ) -> Buffer

Create a buffer from data

Source

pub fn create_buffer( &self, label: &str, size: u64, usage: BufferUsages, ) -> Buffer

Create an empty buffer

Source

pub fn create_compute_pipeline( &self, label: &str, shader: &ShaderModule, entry_point: &str, ) -> ComputePipeline

Create a compute pipeline

Source

pub fn create_shader_module(&self, label: &str, source: &str) -> ShaderModule

Create a shader module from WGSL source

Source

pub fn create_bind_group_layout( &self, label: &str, entries: &[BindGroupLayoutEntry], ) -> BindGroupLayout

Create a bind group layout

Source

pub fn create_bind_group( &self, label: &str, layout: &BindGroupLayout, entries: &[BindGroupEntry<'_>], ) -> BindGroup

Create a bind group

Source§

impl GpuContext

Source

pub async fn remove_statistical_outliers( &self, points: &[Point3f], k_neighbors: usize, std_dev_multiplier: f32, ) -> Result<Vec<Point3f>>

Remove statistical outliers from point cloud using GPU acceleration

Source

pub async fn remove_radius_outliers( &self, points: &[Point3f], radius: f32, min_neighbors: usize, ) -> Result<Vec<Point3f>>

Remove radius outliers from point cloud using GPU acceleration.

A point is kept when at least min_neighbors other points lie within radius of it. Points with a NaN or infinite coordinate have no neighbors, so they are removed whenever min_neighbors > 0.

Source

pub async fn voxel_grid_filter( &self, points: &[Point3f], voxel_size: f32, ) -> Result<Vec<Point3f>>

Voxel grid filtering using GPU acceleration

Source§

impl GpuContext

Source

pub async fn batch_icp_align( &self, jobs: &[BatchICPJob], ) -> Result<Vec<BatchICPResult>>

Execute multiple ICP operations in parallel batches

Source

pub async fn icp_align( &self, source: &PointCloud<Point3f>, target: &PointCloud<Point3f>, max_iterations: usize, convergence_threshold: f32, max_correspondence_distance: f32, ) -> Result<Isometry3<f32>>

GPU-accelerated ICP alignment (original single implementation)

Source§

impl GpuContext

Source

pub async fn icp_point_to_plane_align( &self, source: &PointCloud<Point3f>, target: &PointCloud<Point3f>, target_normals: &[Vector3f], max_iterations: usize, convergence_threshold: f32, max_correspondence_distance: f32, ) -> Result<GpuPointToPlaneICPResult>

GPU-accelerated point-to-plane ICP.

The GPU matches points and sums the linearised 6×6 system (Chen & Medioni 1992); the CPU only solves it. Stops with the same rule as the CPU ICP (see icp_converged).

Source§

impl GpuContext

Source

pub async fn find_k_nearest_neighbors( &self, points: &[Point3f], query_points: &[Point3f], k: usize, max_distance: f32, ) -> Result<Vec<Vec<(usize, f32)>>>

GPU-accelerated k-nearest neighbor search.

Builds a kd-tree over points once, uploads it, and answers every query on the GPU by walking the tree. Returns, for each query, up to k (point index, distance) pairs closer than max_distance, closest first. k is clamped to 1..=32.

Source§

impl GpuContext

Source

pub async fn compute_normals_with_options( &self, points: &[Point3f], k_neighbors: usize, consistent_orientation: bool, viewpoint: Option<[f32; 3]>, ) -> Result<Vec<Vector3<f32>>>

Compute normals for a point cloud using GPU acceleration with options.

Uses the k nearest neighbors of each point (plus the point), like the CPU estimate_normals. k is clamped to 3..=31. With consistent_orientation, normals point towards viewpoint, or by default towards a point above the cloud’s bounding-box centre.

Source

pub async fn compute_normals( &self, points: &[Point3f], k_neighbors: usize, ) -> Result<Vec<Vector3<f32>>>

Compute normals for a point cloud using GPU acceleration with default options

Source

pub fn compute_neighbors_simple( &self, points: &[[f32; 3]], k: usize, ) -> Vec<[u32; 64]>

The k nearest neighbors of every point (not counting the point itself), padded to 64 slots by repeating the last neighbor. Used by the GPU statistical outlier filter. Runs on the CPU with a kd-tree.

Source

pub fn compute_neighbors_simple_points3( &self, points: &[[f32; 3]], k: usize, ) -> Vec<[u32; 64]>

Helper to compute neighbors from Vec<[f32;3]> built from owned data

Source§

impl GpuContext

Source

pub async fn segment_plane( &self, points: &[Point3f], config: GpuPlaneSegmentationConfig, ) -> Result<GpuPlaneSegmentationResult>

Segment the dominant plane using GPU-scored RANSAC candidates.

Source

pub async fn segment_plane_ransac( &self, points: &[Point3f], threshold: f32, max_iters: usize, ) -> Result<GpuPlaneSegmentationResult>

Segment the dominant plane using GPU-scored RANSAC candidates.

Source

pub async fn extract_clusters( &self, cloud: &PointCloud<Point3f>, config: GpuClusterConfig, ) -> Result<Vec<PointCloud<Point3f>>>

Extract Euclidean clusters as point-cloud values.

Source

pub async fn extract_euclidean_clusters( &self, points: &[Point3f], config: &GpuEuclideanClusterConfig, ) -> Result<GpuClusterExtractionResult>

Extract Euclidean clusters using GPU-computed radius adjacency.

Source§

impl GpuContext

Source

pub async fn tsdf_integrate( &self, volume: &mut TsdfVolume, depth_image: &[f32], color_image: Option<&[u8]>, camera_pose: &Matrix4<f32>, intrinsics: &CameraIntrinsics, ) -> Result<Vec<TsdfVoxel>>

Integrate depth image into TSDF volume

Source

pub async fn tsdf_extract_surface( &self, volume: &TsdfVolume, voxels: &[TsdfVoxel], iso_value: f32, ) -> Result<PointCloud<ColoredPoint3f>>

Extract point cloud from TSDF volume using marching cubes

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more