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: AdapterImplementations§
Source§impl GpuContext
impl GpuContext
Sourcepub fn from_parts(
instance: Instance,
adapter: Adapter,
device: Device,
queue: Queue,
) -> Self
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.
Sourcepub fn create_buffer_init<T: Pod>(
&self,
label: &str,
data: &[T],
usage: BufferUsages,
) -> Buffer
pub fn create_buffer_init<T: Pod>( &self, label: &str, data: &[T], usage: BufferUsages, ) -> Buffer
Create a buffer from data
Sourcepub fn create_buffer(
&self,
label: &str,
size: u64,
usage: BufferUsages,
) -> Buffer
pub fn create_buffer( &self, label: &str, size: u64, usage: BufferUsages, ) -> Buffer
Create an empty buffer
Sourcepub fn create_compute_pipeline(
&self,
label: &str,
shader: &ShaderModule,
entry_point: &str,
) -> ComputePipeline
pub fn create_compute_pipeline( &self, label: &str, shader: &ShaderModule, entry_point: &str, ) -> ComputePipeline
Create a compute pipeline
Sourcepub fn create_shader_module(&self, label: &str, source: &str) -> ShaderModule
pub fn create_shader_module(&self, label: &str, source: &str) -> ShaderModule
Create a shader module from WGSL source
Sourcepub fn create_bind_group_layout(
&self,
label: &str,
entries: &[BindGroupLayoutEntry],
) -> BindGroupLayout
pub fn create_bind_group_layout( &self, label: &str, entries: &[BindGroupLayoutEntry], ) -> BindGroupLayout
Create a bind group layout
Sourcepub fn create_bind_group(
&self,
label: &str,
layout: &BindGroupLayout,
entries: &[BindGroupEntry<'_>],
) -> BindGroup
pub fn create_bind_group( &self, label: &str, layout: &BindGroupLayout, entries: &[BindGroupEntry<'_>], ) -> BindGroup
Create a bind group
Source§impl GpuContext
impl GpuContext
Sourcepub async fn remove_statistical_outliers(
&self,
points: &[Point3f],
k_neighbors: usize,
std_dev_multiplier: f32,
) -> Result<Vec<Point3f>>
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
Sourcepub async fn remove_radius_outliers(
&self,
points: &[Point3f],
radius: f32,
min_neighbors: usize,
) -> Result<Vec<Point3f>>
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§impl GpuContext
impl GpuContext
Sourcepub async fn batch_icp_align(
&self,
jobs: &[BatchICPJob],
) -> Result<Vec<BatchICPResult>>
pub async fn batch_icp_align( &self, jobs: &[BatchICPJob], ) -> Result<Vec<BatchICPResult>>
Execute multiple ICP operations in parallel batches
Source§impl GpuContext
impl GpuContext
Sourcepub 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>
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
impl GpuContext
Sourcepub async fn find_k_nearest_neighbors(
&self,
points: &[Point3f],
query_points: &[Point3f],
k: usize,
max_distance: f32,
) -> Result<Vec<Vec<(usize, f32)>>>
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
impl GpuContext
Sourcepub async fn compute_normals_with_options(
&self,
points: &[Point3f],
k_neighbors: usize,
consistent_orientation: bool,
viewpoint: Option<[f32; 3]>,
) -> Result<Vec<Vector3<f32>>>
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.
Sourcepub async fn compute_normals(
&self,
points: &[Point3f],
k_neighbors: usize,
) -> Result<Vec<Vector3<f32>>>
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§impl GpuContext
impl GpuContext
Sourcepub async fn segment_plane(
&self,
points: &[Point3f],
config: GpuPlaneSegmentationConfig,
) -> Result<GpuPlaneSegmentationResult>
pub async fn segment_plane( &self, points: &[Point3f], config: GpuPlaneSegmentationConfig, ) -> Result<GpuPlaneSegmentationResult>
Segment the dominant plane using GPU-scored RANSAC candidates.
Sourcepub async fn segment_plane_ransac(
&self,
points: &[Point3f],
threshold: f32,
max_iters: usize,
) -> Result<GpuPlaneSegmentationResult>
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.
Sourcepub async fn extract_clusters(
&self,
cloud: &PointCloud<Point3f>,
config: GpuClusterConfig,
) -> Result<Vec<PointCloud<Point3f>>>
pub async fn extract_clusters( &self, cloud: &PointCloud<Point3f>, config: GpuClusterConfig, ) -> Result<Vec<PointCloud<Point3f>>>
Extract Euclidean clusters as point-cloud values.
Sourcepub async fn extract_euclidean_clusters(
&self,
points: &[Point3f],
config: &GpuEuclideanClusterConfig,
) -> Result<GpuClusterExtractionResult>
pub async fn extract_euclidean_clusters( &self, points: &[Point3f], config: &GpuEuclideanClusterConfig, ) -> Result<GpuClusterExtractionResult>
Extract Euclidean clusters using GPU-computed radius adjacency.
Source§impl GpuContext
impl GpuContext
Sourcepub async fn tsdf_integrate(
&self,
volume: &mut TsdfVolume,
depth_image: &[f32],
color_image: Option<&[u8]>,
camera_pose: &Matrix4<f32>,
intrinsics: &CameraIntrinsics,
) -> Result<Vec<TsdfVoxel>>
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
Sourcepub async fn tsdf_extract_surface(
&self,
volume: &TsdfVolume,
voxels: &[TsdfVoxel],
iso_value: f32,
) -> Result<PointCloud<ColoredPoint3f>>
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§
impl !Freeze for GpuContext
impl !RefUnwindSafe for GpuContext
impl !UnwindSafe for GpuContext
impl Send for GpuContext
impl Sync for GpuContext
impl Unpin for GpuContext
impl UnsafeUnpin for GpuContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.