Make orbit target colored

This commit is contained in:
Connor Slade
2024-07-05 19:41:39 -04:00
parent e721358587
commit 0395ca7b09
5 changed files with 25 additions and 10 deletions

View File

@@ -120,6 +120,7 @@ impl eframe::App for App {
grid_size: self.grid_size,
target_point: self.camera.target,
is_moving: response.dragged(),
models: self.meshes.clone(),
render_style: self.render_style,

View File

@@ -1,6 +1,6 @@
use egui_wgpu::ScreenDescriptor;
use encase::{ShaderSize, ShaderType, UniformBuffer};
use nalgebra::{Matrix4, Vector3};
use nalgebra::{Matrix4, Vector3, Vector4};
use wgpu::{
util::{BufferInitDescriptor, DeviceExt},
BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayoutDescriptor,
@@ -36,6 +36,7 @@ pub struct BuildPlatePipeline {
#[derive(ShaderType)]
struct BuildPlateUniforms {
transform: Matrix4<f32>,
color: Vector4<f32>,
}
struct Line {
@@ -168,6 +169,7 @@ impl Pipeline<WorkspaceRenderCallback> for BuildPlatePipeline {
buffer
.write(&BuildPlateUniforms {
transform: resources.transform,
color: Vector4::new(1.0, 1.0, 1.0, 1.0),
})
.unwrap();
queue.write_buffer(&self.uniform_buffer, 0, &buffer.into_inner());

View File

@@ -1,6 +1,6 @@
use egui_wgpu::ScreenDescriptor;
use encase::{ShaderSize, ShaderType, UniformBuffer};
use nalgebra::Matrix4;
use nalgebra::{Matrix4, Vector4};
use plexus::primitive::{
decompose::{Triangulate, Vertices},
generate::{IndicesForPosition, VerticesWithPosition},
@@ -8,9 +8,9 @@ use plexus::primitive::{
};
use wgpu::{
util::{BufferInitDescriptor, DeviceExt},
BindGroup, BindGroupDescriptor, BindGroupEntry, BindingResource, Buffer, BufferBinding,
BufferDescriptor, BufferUsages, ColorTargetState, ColorWrites, CommandEncoder, CompareFunction,
DepthStencilState, Device, FragmentState, IndexFormat, MultisampleState,
BindGroup, BindGroupDescriptor, BindGroupEntry, BindingResource, BlendState, Buffer,
BufferBinding, BufferDescriptor, BufferUsages, ColorTargetState, ColorWrites, CommandEncoder,
CompareFunction, DepthStencilState, Device, FragmentState, IndexFormat, MultisampleState,
PipelineLayoutDescriptor, PrimitiveState, Queue, RenderPass, RenderPipeline,
RenderPipelineDescriptor, ShaderModuleDescriptor, ShaderSource, TextureFormat, VertexState,
};
@@ -40,6 +40,7 @@ pub struct TargetPointPipeline {
#[derive(ShaderType)]
struct TargetPointUniforms {
transform: Matrix4<f32>,
color: Vector4<f32>,
}
impl TargetPointPipeline {
@@ -85,15 +86,15 @@ impl TargetPointPipeline {
entry_point: "frag",
targets: &[Some(ColorTargetState {
format: TEXTURE_FORMAT,
blend: None,
blend: Some(BlendState::ALPHA_BLENDING),
write_mask: ColorWrites::all(),
})],
}),
primitive: PrimitiveState::default(),
depth_stencil: Some(DepthStencilState {
format: TextureFormat::Depth24PlusStencil8,
depth_write_enabled: true,
depth_compare: CompareFunction::Less,
depth_write_enabled: false,
depth_compare: CompareFunction::Always,
stencil: Default::default(),
bias: Default::default(),
}),
@@ -141,17 +142,26 @@ impl Pipeline<WorkspaceRenderCallback> for TargetPointPipeline {
_encoder: &mut CommandEncoder,
resources: &WorkspaceRenderCallback,
) {
if !resources.is_moving {
return;
};
let mut buffer = UniformBuffer::new(Vec::new());
buffer
.write(&TargetPointUniforms {
transform: resources.transform * Matrix4::new_translation(&resources.target_point),
color: Vector4::new(1.0, 0.0, 0.0, 0.25),
})
.unwrap();
queue.write_buffer(&self.uniform_buffer, 0, &buffer.into_inner());
}
fn paint<'a>(&'a self, render_pass: &mut RenderPass<'a>, _resources: &WorkspaceRenderCallback) {
fn paint<'a>(&'a self, render_pass: &mut RenderPass<'a>, resources: &WorkspaceRenderCallback) {
if !resources.is_moving {
return;
};
render_pass.set_pipeline(&self.render_pipeline);
render_pass.set_bind_group(0, &self.bind_group, &[]);

View File

@@ -30,6 +30,7 @@ pub struct WorkspaceRenderCallback {
pub render_style: RenderStyle,
pub target_point: Vector3<f32>,
pub is_moving: bool,
}
impl CallbackTrait for WorkspaceRenderCallback {

View File

@@ -2,6 +2,7 @@
struct Context {
transform: mat4x4<f32>,
color: vec4<f32>
}
struct VertexOutput {
@@ -31,5 +32,5 @@ fn vert(
@fragment
fn frag(in: VertexOutput) -> @location(0) vec4<f32> {
return vec4<f32>(1.0, 1.0, 1.0, 1.0);
return context.color;
}