Skip to content

Commit

Permalink
- wip, getting the bindful example running, added indexed draws
Browse files Browse the repository at this point in the history
  • Loading branch information
polymonster committed Jun 21, 2024
1 parent 4a0ece3 commit b989452
Show file tree
Hide file tree
Showing 8 changed files with 446 additions and 278 deletions.
2 changes: 2 additions & 0 deletions config.jsn
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@
args: [
"-shader_platform metal"
"-shader_version 6_0"
"-metal_version 2.0"
"-metal_sdk macosx"
"-i ${src_data_dir}/shaders/"
"-o ${data_dir}/shaders"
"-t ${temp_dir}/shaders"
Expand Down
69 changes: 62 additions & 7 deletions examples/bindful/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
// currently windows only because here we need a concrete gfx and os implementation
#![cfg(target_os = "windows")]

use hotline_rs::{*, prelude::{Pipeline, Texture}};

use os::{App, Window};
Expand All @@ -12,6 +9,8 @@ struct Vertex {
color: [f32; 4],
}

use std::fs;

fn main() -> Result<(), hotline_rs::Error> {
// app
let mut app = os_platform::App::create(os::AppInfo {
Expand Down Expand Up @@ -104,12 +103,66 @@ fn main() -> Result<(), hotline_rs::Error> {
};
let index_buffer = dev.create_buffer(&info, Some(gfx::as_u8_slice(&indices)))?;

// temp
let vsc_filepath = hotline_rs::get_data_path("shaders/bindful/vs_main.vsc");
let psc_filepath = hotline_rs::get_data_path("shaders/bindful/ps_main.psc");

let vsc_data = fs::read(vsc_filepath)?;
let psc_data = fs::read(psc_filepath)?;

let vsc_info = gfx::ShaderInfo {
shader_type: gfx::ShaderType::Vertex,
compile_info: None
};
let vs = dev.create_shader(&vsc_info, &vsc_data)?;

let psc_info = gfx::ShaderInfo {
shader_type: gfx::ShaderType::Vertex,
compile_info: None
};
let fs = dev.create_shader(&psc_info, &psc_data)?;

let pso_pmfx = dev.create_render_pipeline(&gfx::RenderPipelineInfo {
vs: Some(&vs),
fs: Some(&fs),
input_layout: vec![
gfx::InputElementInfo {
semantic: String::from("POSITION"),
index: 0,
format: gfx::Format::RGB32f,
input_slot: 0,
aligned_byte_offset: 0,
input_slot_class: gfx::InputSlotClass::PerVertex,
step_rate: 0,
},
gfx::InputElementInfo {
semantic: String::from("COLOR"),
index: 0,
format: gfx::Format::RGBA32f,
input_slot: 0,
aligned_byte_offset: 12,
input_slot_class: gfx::InputSlotClass::PerVertex,
step_rate: 0,
},
],
blend_info: gfx::BlendInfo {
alpha_to_coverage_enabled: false,
independent_blend_enabled: false,
render_target: vec![gfx::RenderTargetBlendInfo::default()],
},
topology: gfx::Topology::TriangleList,
pass: Some(swap_chain.get_backbuffer_pass()),
..Default::default()
})?;

/*
let mut pmfx : pmfx::Pmfx<gfx_platform::Device> = pmfx::Pmfx::create(&mut dev, 0);
pmfx.load(&hotline_rs::get_data_path("shaders/bindful"))?;
pmfx.create_render_pipeline(&dev, "bindful", swap_chain.get_backbuffer_pass())?;
let fmt = swap_chain.get_backbuffer_pass().get_format_hash();
let pso_pmfx = pmfx.get_render_pipeline_for_format("bindful", fmt)?;
*/

let mut textures: Vec<gfx_platform::Texture> = Vec::new();
let files = vec![
Expand Down Expand Up @@ -148,11 +201,12 @@ fn main() -> Result<(), hotline_rs::Error> {

cmdbuffer.set_viewport(&viewport);
cmdbuffer.set_scissor_rect(&scissor);
cmdbuffer.set_render_pipeline(pso_pmfx);
cmdbuffer.set_render_pipeline(&pso_pmfx);

cmdbuffer.set_heap(pso_pmfx, dev.get_shader_heap());
cmdbuffer.set_heap(&pso_pmfx, dev.get_shader_heap());

// set bindings
/*
let srv0 = textures[0].get_srv_index().unwrap();
let srv1 = textures[1].get_srv_index().unwrap();
let srv2 = textures[2].get_srv_index().unwrap();
Expand All @@ -177,7 +231,8 @@ fn main() -> Result<(), hotline_rs::Error> {
if let Some(t3) = pso_pmfx.get_pipeline_slot(3, 0, gfx::DescriptorType::ShaderResource) {
cmdbuffer.set_binding(pso_pmfx, dev.get_shader_heap(), t3.index, srv3);
}

*/

cmdbuffer.set_index_buffer(&index_buffer);
cmdbuffer.set_vertex_buffer(&vertex_buffer, 0);
cmdbuffer.draw_indexed_instanced(6, 1, 0, 0, 0);
Expand Down
1 change: 1 addition & 0 deletions examples/swap_chain/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ fn main() -> Result<(), hotline_rs::Error> {
resolve: false,
array_slice: 0
})?;

// render pass to clear
cmd.reset(&swap_chain);
cmd.begin_render_pass(&render_pass);
Expand Down
4 changes: 2 additions & 2 deletions examples/triangle/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,8 @@ fn main() -> Result<(), hotline_rs::Error> {
});

cmd.begin_render_pass(swap_chain.get_backbuffer_pass_mut());
// cmd.set_viewport(&viewport);
// cmd.set_scissor_rect(&scissor);
cmd.set_viewport(&viewport);
cmd.set_scissor_rect(&scissor);
cmd.set_render_pipeline(&pso);
cmd.set_vertex_buffer(&vertex_buffer, 0);
cmd.draw_instanced(3, 1, 0, 0);
Expand Down
2 changes: 1 addition & 1 deletion src/gfx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1213,7 +1213,7 @@ pub trait CmdBuf<D: Device>: Send + Sync + Clone {
/// Set the scissor rect on the rasterizer stage
fn set_scissor_rect(&self, scissor_rect: &ScissorRect);
/// Set the index `buffer` to use for draw calls, the buffer should be created with `BufferUsage::INDEX`
fn set_index_buffer(&self, buffer: &D::Buffer);
fn set_index_buffer(&mut self, buffer: &D::Buffer);
/// Set the index `buffer` on `slot` to use for draw calls, the buffer should be created with `BufferUsage::VERTEX`
fn set_vertex_buffer(&self, buffer: &D::Buffer, slot: u32);
/// Set render pipeline for `draw` commands
Expand Down
Loading

0 comments on commit b989452

Please sign in to comment.