diff --git a/notes/vkprocessor.drawio b/notes/vkprocessor.drawio
new file mode 100644
index 00000000..e025c387
--- /dev/null
+++ b/notes/vkprocessor.drawio
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/src/canvas/canvas_frame.rs b/src/canvas/canvas_frame.rs
index e1dded8b..0c9938a8 100644
--- a/src/canvas/canvas_frame.rs
+++ b/src/canvas/canvas_frame.rs
@@ -53,20 +53,44 @@ impl CanvasFrame {
}
}
+
+struct Pair {
+ x: T,
+ y: T,
+}
+
+impl Pair {
+ fn new(x: Vertex3D, y: Vertex3D) -> Self {
+ Self {
+ x,
+ y,
+ }
+ }
+}
+
+impl Pair {
+ fn new(x: GlyphInstance, y: GlyphInstance) -> Self {
+ Self {
+ x,
+ y,
+ }
+ }
+}
+
pub struct GenericCanvasFrame {
frame_data: HashMap, Vec)>>
}
-impl GenericCanvasFrame {
+impl GenericCanvasFrame {
/// Creates a bare canvas frame with empty accumulators
- pub fn new() -> GenericCanvasFrame where H: Eq + Hash {
+ pub fn new() -> GenericCanvasFrame {
GenericCanvasFrame {
frame_data: Default::default()
}
}
- pub fn draw(&mut self, drawable: &dyn DrawableTest) where H: Eq + Hash + Clone {
+ pub fn draw(&mut self, drawable: &dyn DrawableTest) {
self.frame_data
.entry(drawable.get_handle().clone())
.or_insert(Vec::new())
diff --git a/src/canvas/canvas_state.rs b/src/canvas/canvas_state.rs
index ff19f64e..ebb9d7cf 100644
--- a/src/canvas/canvas_state.rs
+++ b/src/canvas/canvas_state.rs
@@ -318,16 +318,17 @@ impl CanvasState {
/// Load and Compile a shader with the filename at resources/shaders
/// Takes physical and capabilities as we don't store that in Canvas
- pub fn load_shader(&mut self,
+ pub fn load_shader(&mut self,
filename: String,
physical: PhysicalDevice,
capabilities: Capabilities) -> Option>
where T: CompiledGraphicsPipeline {
+
let handle = Arc::new(CompiledGraphicsPipelineHandle {
handle: self.shader_buffers.len() as u32
});
- let shader: Box = Box::new(T::new(
+ let shader: Box = Box::new(T::new::(
filename.clone(),
self.device.clone(),
handle.clone(),
diff --git a/src/canvas/shader/common.rs b/src/canvas/shader/common.rs
index 8085e05c..7562a3bf 100644
--- a/src/canvas/shader/common.rs
+++ b/src/canvas/shader/common.rs
@@ -103,7 +103,7 @@ pub struct CompiledGraphicsPipelineHandle {
}
pub trait CompiledGraphicsPipeline {
- fn new(filename: String,
+ fn new(filename: String,
device: Arc,
handle: Arc,
render_pass: Arc) -> Self where Self: Sized;
diff --git a/src/canvas/shader/generic_shader.rs b/src/canvas/shader/generic_shader.rs
index d84fe7e4..cbf677fb 100644
--- a/src/canvas/shader/generic_shader.rs
+++ b/src/canvas/shader/generic_shader.rs
@@ -39,7 +39,7 @@ impl CompiledGraphicsPipelineResources for GenericShader {}
impl CompiledGraphicsPipeline for GenericShader {
/// This will explode when the shader does not want to compile
- fn new(filename: String,
+ fn new(filename: String,
device: Arc,
handle: Arc,
render_pass: Arc) -> GenericShader {
@@ -78,7 +78,8 @@ impl CompiledGraphicsPipeline for GenericShader {
graphics_pipeline:
Some(Arc::new(GraphicsPipeline::start()
- .vertex_input(SingleBufferDefinition::::new())
+ //SingleBufferDefinition::
+ .vertex_input(T::new())
.vertex_shader(vertex_entry_point.clone(), ShaderSpecializationConstants {
first_constant: 0,
diff --git a/src/canvas/shader/text_shader.rs b/src/canvas/shader/text_shader.rs
index cf3584bc..b0bcc20f 100644
--- a/src/canvas/shader/text_shader.rs
+++ b/src/canvas/shader/text_shader.rs
@@ -45,7 +45,7 @@ impl CompiledGraphicsPipelineResources for TextShader {}
impl CompiledGraphicsPipeline for TextShader {
/// This will explode when the shader does not want to compile
- fn new(filename: String,
+ fn new(filename: String,
device: Arc,
handle: Arc,
render_pass: Arc) -> TextShader {
@@ -107,8 +107,8 @@ impl CompiledGraphicsPipeline for TextShader {
TextShader {
graphics_pipeline:
Some(Arc::new(GraphicsPipeline::start()
-
- .vertex_input(OneVertexOneInstanceDefinition::::new())
+//OneVertexOneInstanceDefinition::
+ .vertex_input(T::new())
.vertex_shader(vertex_entry_point.clone(), ShaderSpecializationConstants {
first_constant: 0,
diff --git a/src/main.rs b/src/main.rs
index dd6e4962..81d2df49 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -169,8 +169,8 @@ pub fn main() {
canvas.draw(&funky_sprite);
canvas.draw(&test_polygon);
- let mut gencanvas = GenericCanvasFrame::new();
- gencanvas.draw(&text_sprite);
+// let mut gencanvas = GenericCanvasFrame::new();
+// gencanvas.draw(&text_sprite);
{
diff --git a/src/sprite.rs b/src/sprite.rs
index 5d4f4213..99deeaeb 100644
--- a/src/sprite.rs
+++ b/src/sprite.rs
@@ -97,8 +97,8 @@ impl Sprite {
}
}
-impl DrawableTest for Sprite {
- fn get_vertices(&self) -> Vec {
+impl DrawableTest for Sprite {
+ fn get_vertices(&self) -> Vec {
unimplemented!()
}
@@ -301,7 +301,7 @@ pub trait TextVertex {
fn get_vertices() -> Vec<(u32, u32, u32)>;
}
-impl DrawableTest for Text {
+impl DrawableTest for Text {
fn get_vertices(&self) -> Vec {
unimplemented!()
}
diff --git a/src/vkprocessor.rs b/src/vkprocessor.rs
index a36b1914..9002d8b4 100644
--- a/src/vkprocessor.rs
+++ b/src/vkprocessor.rs
@@ -19,7 +19,9 @@ use std::time::Duration;
use vulkano::pipeline::depth_stencil::{DynamicStencilValue, StencilFaceFlags};
use crate::canvas::shader::common::CompiledGraphicsPipelineHandle;
use crate::canvas::shader::generic_shader::GenericShader;
-use crate::canvas::shader::text_shader::TextShader;
+use crate::canvas::shader::text_shader::{TextShader, GlyphInstance};
+use vulkano::pipeline::vertex::{OneVertexOneInstanceDefinition, SingleBufferDefinition};
+use crate::util::vertex_3d::Vertex3D;
/// VKProcessor holds the vulkan instance information, the swapchain, and the compute and canvas states
///
@@ -157,10 +159,10 @@ impl<'a> VkProcessor<'a> {
/// A hardcoded list of shaders which can be proloaded from this function
pub fn preload_shaders(&mut self) {
- self.canvas_state.load_shader::(String::from("color-passthrough"), self.physical.clone(), self.capabilities.clone());
- self.canvas_state.load_shader::(String::from("simple_texture"), self.physical.clone(), self.capabilities.clone());
- self.canvas_state.load_shader::(String::from("simple_image"), self.physical.clone(), self.capabilities.clone());
- self.canvas_state.load_shader::(String::from("simple_text"), self.physical.clone(), self.capabilities.clone());
+ self.canvas_state.load_shader::>(String::from("color-passthrough"), self.physical.clone(), self.capabilities.clone());
+ self.canvas_state.load_shader::>(String::from("simple_texture"), self.physical.clone(), self.capabilities.clone());
+ self.canvas_state.load_shader::>(String::from("simple_image"), self.physical.clone(), self.capabilities.clone());
+ self.canvas_state.load_shader::>(String::from("simple_text"), self.physical.clone(), self.capabilities.clone());
}
/// A hardcoded list of shaders which can be proloaded from this function