Skip to content

Commit

Permalink
beginning of gltf on the slab
Browse files Browse the repository at this point in the history
  • Loading branch information
schell committed Nov 29, 2023
1 parent 40c8775 commit 64fab88
Show file tree
Hide file tree
Showing 31 changed files with 699 additions and 644 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ members = [
"crates/renderling-shader",
"crates/renderling-gpui",
"crates/renderling-derive",
"crates/sandbox",
]

exclude = ["./shaders"]
Expand Down
38 changes: 37 additions & 1 deletion crates/renderling-shader/src/skybox.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@ use spirv_std::{
#[cfg(target_arch = "spirv")]
use spirv_std::num_traits::Float;

use crate::{math, stage::GpuConstants, IsVector};
use crate::{
id::Id,
math,
slab::Slab,
stage::{Camera, GpuConstants},
IsVector,
};

const INV_ATAN: Vec2 = Vec2::new(0.1591, core::f32::consts::FRAC_1_PI);

Expand Down Expand Up @@ -37,6 +43,36 @@ pub fn vertex(
*gl_pos = clip_pos.xyww();
}

#[spirv(vertex)]
pub fn slabbed_vertex(
#[spirv(instance_index)] camera_index: u32,
#[spirv(vertex_index)] vertex_index: u32,
#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] slab: &[u32],
local_pos: &mut Vec3,
#[spirv(position)] clip_pos: &mut Vec4,
) {
let camera_id = Id::<Camera>::from(camera_index);
let camera = slab.read(camera_id);
let point = math::CUBE[vertex_index as usize];
*local_pos = point;
let camera_view_without_translation = Mat3::from_mat4(camera.view);
let rot_view = Mat4::from_mat3(camera_view_without_translation);
let position = camera.projection * rot_view * point.extend(1.0);
*clip_pos = position.xyww();
}

/// Colors a skybox using a cubemap texture.
#[spirv(fragment)]
pub fn stage_skybox_cubemap(
#[spirv(descriptor_set = 1, binding = 8)] texture: &Cubemap,
#[spirv(descriptor_set = 1, binding = 9)] sampler: &Sampler,
local_pos: Vec3,
out_color: &mut Vec4,
) {
let env_color: Vec3 = texture.sample(*sampler, local_pos.alt_norm_or_zero()).xyz();
*out_color = env_color.extend(1.0);
}

/// Colors a skybox using a cubemap texture.
#[spirv(fragment)]
pub fn fragment_cubemap(
Expand Down
40 changes: 1 addition & 39 deletions crates/renderling-shader/src/slab.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,6 @@ impl Slabbed for glam::Mat4 {
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 16 {
return index;
}
let Self {
x_axis,
y_axis,
Expand All @@ -160,9 +157,6 @@ impl Slabbed for glam::Vec2 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 2 {
return index;
}
let index = self.x.read_slab(index, slab);
let index = self.y.read_slab(index, slab);
index
Expand All @@ -184,9 +178,6 @@ impl Slabbed for glam::Vec3 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 3 {
return index;
}
let Self { x, y, z } = self;
let index = x.read_slab(index, slab);
let index = y.read_slab(index, slab);
Expand All @@ -195,9 +186,6 @@ impl Slabbed for glam::Vec3 {
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 3 {
return index;
}
let Self { x, y, z } = self;
let index = x.write_slab(index, slab);
let index = y.write_slab(index, slab);
Expand All @@ -212,19 +200,13 @@ impl Slabbed for glam::Vec4 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 4 {
return index;
}
let index = self.x.read_slab(index, slab);
let index = self.y.read_slab(index, slab);
let index = self.z.read_slab(index, slab);
self.w.read_slab(index, slab)
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 4 {
return index;
}
let Self { x, y, z, w } = self;
let index = x.write_slab(index, slab);
let index = y.write_slab(index, slab);
Expand All @@ -237,10 +219,8 @@ impl Slabbed for glam::Quat {
fn slab_size() -> usize {
16
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 4 {
return index;
}
let Self { x, y, z, w } = self;
let index = x.read_slab(index, slab);
let index = y.read_slab(index, slab);
Expand All @@ -249,9 +229,6 @@ impl Slabbed for glam::Quat {
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 4 {
return index;
}
let Self { x, y, z, w } = self;
let index = x.write_slab(index, slab);
let index = y.write_slab(index, slab);
Expand All @@ -266,18 +243,12 @@ impl Slabbed for glam::UVec2 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 2 {
return index;
}
let index = self.x.read_slab(index, slab);
let index = self.y.read_slab(index, slab);
index
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 2 {
return index;
}
let index = self.x.write_slab(index, slab);
let index = self.y.write_slab(index, slab);
index
Expand All @@ -290,19 +261,13 @@ impl Slabbed for glam::UVec3 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 3 {
return index;
}
let index = self.x.read_slab(index, slab);
let index = self.y.read_slab(index, slab);
let index = self.z.read_slab(index, slab);
index
}

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize {
if slab.len() < index + 3 {
return index;
}
let index = self.x.write_slab(index, slab);
let index = self.y.write_slab(index, slab);
let index = self.z.write_slab(index, slab);
Expand All @@ -316,9 +281,6 @@ impl Slabbed for glam::UVec4 {
}

fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize {
if slab.len() < index + 4 {
return index;
}
let index = self.x.read_slab(index, slab);
let index = self.y.read_slab(index, slab);
let index = self.z.read_slab(index, slab);
Expand Down
7 changes: 6 additions & 1 deletion crates/renderling-shader/src/stage/texture.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
//! GPU textures.
//!
// TODO: move this (stage/texture.rs) to lib/texture.rs
use glam::{UVec2, Vec2};
use renderling_derive::Slabbed;

use crate::{self as renderling_shader, bits::{bits, extract, insert}};
use crate::{
self as renderling_shader,
bits::{bits, extract, insert},
};

#[cfg(target_arch = "spirv")]
use spirv_std::num_traits::*;
Expand Down
Loading

0 comments on commit 64fab88

Please sign in to comment.