aboutsummaryrefslogtreecommitdiffstats
path: root/shaders/include/ray.h
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2026-08-18 00:43:03 +0200
committerladevieq <ladevie.quentin@gmail.com>2026-08-18 00:43:03 +0200
commit6db256b8eb4cc45c5296070ae7353e65398d121d (patch)
tree0df44bebae817cbc575dbd288f4bb08a08767873 /shaders/include/ray.h
parent0c7ff7a068958d2c23a8f362763cb22d34f32371 (diff)
Finished descriptor heaps implementation
Diffstat (limited to 'shaders/include/ray.h')
-rw-r--r--shaders/include/ray.h54
1 files changed, 27 insertions, 27 deletions
diff --git a/shaders/include/ray.h b/shaders/include/ray.h
index 2e9980b..7a6cc21 100644
--- a/shaders/include/ray.h
+++ b/shaders/include/ray.h
@@ -18,38 +18,38 @@ struct hit_info {
};
uvec4 decode_triangle_indices(uint triangle_id) {
- uint id1 = regs.draw.indices_arr.indices[triangle_id * 3] & 0x00ffffff;
- uint id2 = regs.draw.indices_arr.indices[triangle_id * 3 + 1] & 0x00ffffff;
- uint id3 = regs.draw.indices_arr.indices[triangle_id * 3 + 2] & 0x00ffffff;
+ uint id1 = regs.indices_arr.indices[triangle_id * 3] & 0x00ffffff;
+ uint id2 = regs.indices_arr.indices[triangle_id * 3 + 1] & 0x00ffffff;
+ uint id3 = regs.indices_arr.indices[triangle_id * 3 + 2] & 0x00ffffff;
- uint mat_id = (regs.draw.indices_arr.indices[triangle_id * 3] & 0xff000000) >> 8
- | (regs.draw.indices_arr.indices[triangle_id * 3 + 1] & 0xff000000) >> 16
- | (regs.draw.indices_arr.indices[triangle_id * 3 + 2] & 0xff000000) >> 24;
+ uint mat_id = (regs.indices_arr.indices[triangle_id * 3] & 0xff000000) >> 8
+ | (regs.indices_arr.indices[triangle_id * 3 + 1] & 0xff000000) >> 16
+ | (regs.indices_arr.indices[triangle_id * 3 + 2] & 0xff000000) >> 24;
return uvec4(id1, id2, id3, mat_id);
}
vec3[3] get_triangle_positions(uvec3 indices) {
return vec3[3](
- vec3(regs.draw.positions_arr.positions[indices[0] * 3], regs.draw.positions_arr.positions[indices[0] * 3 + 1], regs.draw.positions_arr.positions[indices[0] * 3 + 2]),
- vec3(regs.draw.positions_arr.positions[indices[1] * 3], regs.draw.positions_arr.positions[indices[1] * 3 + 1], regs.draw.positions_arr.positions[indices[1] * 3 + 2]),
- vec3(regs.draw.positions_arr.positions[indices[2] * 3], regs.draw.positions_arr.positions[indices[2] * 3 + 1], regs.draw.positions_arr.positions[indices[2] * 3 + 2])
+ vec3(regs.positions_arr.positions[indices[0] * 3], regs.positions_arr.positions[indices[0] * 3 + 1], regs.positions_arr.positions[indices[0] * 3 + 2]),
+ vec3(regs.positions_arr.positions[indices[1] * 3], regs.positions_arr.positions[indices[1] * 3 + 1], regs.positions_arr.positions[indices[1] * 3 + 2]),
+ vec3(regs.positions_arr.positions[indices[2] * 3], regs.positions_arr.positions[indices[2] * 3 + 1], regs.positions_arr.positions[indices[2] * 3 + 2])
);
}
vec3[3] get_triangle_normals(uvec3 indices) {
return vec3[3](
- vec3(regs.draw.normals_arr.normals[indices[0] * 3], regs.draw.normals_arr.normals[indices[0] * 3 + 1], regs.draw.normals_arr.normals[indices[0] * 3 + 2]),
- vec3(regs.draw.normals_arr.normals[indices[1] * 3], regs.draw.normals_arr.normals[indices[1] * 3 + 1], regs.draw.normals_arr.normals[indices[1] * 3 + 2]),
- vec3(regs.draw.normals_arr.normals[indices[2] * 3], regs.draw.normals_arr.normals[indices[2] * 3 + 1], regs.draw.normals_arr.normals[indices[2] * 3 + 2])
+ vec3(regs.normals_arr.normals[indices[0] * 3], regs.normals_arr.normals[indices[0] * 3 + 1], regs.normals_arr.normals[indices[0] * 3 + 2]),
+ vec3(regs.normals_arr.normals[indices[1] * 3], regs.normals_arr.normals[indices[1] * 3 + 1], regs.normals_arr.normals[indices[1] * 3 + 2]),
+ vec3(regs.normals_arr.normals[indices[2] * 3], regs.normals_arr.normals[indices[2] * 3 + 1], regs.normals_arr.normals[indices[2] * 3 + 2])
);
}
vec2[3] get_triangle_uvs(uvec3 indices) {
return vec2[3](
- vec2(regs.draw.uvs_arr.uvs[indices[0] * 2], regs.draw.uvs_arr.uvs[indices[0] * 2 + 1]),
- vec2(regs.draw.uvs_arr.uvs[indices[1] * 2], regs.draw.uvs_arr.uvs[indices[1] * 2 + 1]),
- vec2(regs.draw.uvs_arr.uvs[indices[2] * 2], regs.draw.uvs_arr.uvs[indices[2] * 2 + 1])
+ vec2(regs.uvs_arr.uvs[indices[0] * 2], regs.uvs_arr.uvs[indices[0] * 2 + 1]),
+ vec2(regs.uvs_arr.uvs[indices[1] * 2], regs.uvs_arr.uvs[indices[1] * 2 + 1]),
+ vec2(regs.uvs_arr.uvs[indices[2] * 2], regs.uvs_arr.uvs[indices[2] * 2 + 1])
);
}
@@ -59,7 +59,7 @@ triangle get_triangle(uint triangle_id) {
get_triangle_positions(indices.xyz),
get_triangle_normals(indices.xyz),
get_triangle_uvs(indices.xyz),
- regs.draw.materials_arr.materials[indices.w]
+ regs.materials_arr.materials[indices.w]
);
}
@@ -82,20 +82,20 @@ uint hit_aabbs(ray r) {
int id = 0;
while(id != -1) {
- if (regs.draw.bvh.nodes[id].primitive_id != -1) {
- // triangle tri = bufs.geometry.triangles[regs.draw.bvh.nodes[id].primitive_id];
+ if (regs.bvh.nodes[id].primitive_id != -1) {
+ // triangle tri = bufs.geometry.triangles[regs.bvh.nodes[id].primitive_id];
// vec3 minimum = min(tri.v1.position, min(tri.v2.position, tri.v3.position)).xyz;
// vec3 maximum = max(tri.v1.position, max(tri.v2.position, tri.v3.position)).xyz;
// if (hit_aabb(minimum, maximum, r)) {
// hit_count++;
// }
- id = regs.draw.bvh.nodes[id].next_id;
- } else if (hit_aabb(regs.draw.bvh.nodes[id].min, regs.draw.bvh.nodes[id].max, r)) {
+ id = regs.bvh.nodes[id].next_id;
+ } else if (hit_aabb(regs.bvh.nodes[id].min, regs.bvh.nodes[id].max, r)) {
hit_count++;
id++;
} else {
- id = regs.draw.bvh.nodes[id].next_id;
+ id = regs.bvh.nodes[id].next_id;
}
}
@@ -169,22 +169,22 @@ bool hit_node(ray r, out hit_info info) {
while(id != -1) {
// Leafs
- if (regs.draw.bvh.nodes[id].primitive_id != -1) {
- // if (hit_sphere(bufs.geometry.spheres[regs.draw.bvh.nodes[id].primitive_id], r, temp_info)) {
+ if (regs.bvh.nodes[id].primitive_id != -1) {
+ // if (hit_sphere(bufs.geometry.spheres[regs.bvh.nodes[id].primitive_id], r, temp_info)) {
// info = temp_info;
// r.max_t = temp_info.t;
// hit = true;
// }
- if (hit_triangle(regs.draw.bvh.nodes[id].primitive_id, r, temp_info)) {
+ if (hit_triangle(regs.bvh.nodes[id].primitive_id, r, temp_info)) {
info = temp_info;
r.max_t = temp_info.t;
hit = true;
}
- id = regs.draw.bvh.nodes[id].next_id;
- } else if (hit_aabb(regs.draw.bvh.nodes[id].min, regs.draw.bvh.nodes[id].max, r)) {
+ id = regs.bvh.nodes[id].next_id;
+ } else if (hit_aabb(regs.bvh.nodes[id].min, regs.bvh.nodes[id].max, r)) {
id++;
} else {
- id = regs.draw.bvh.nodes[id].next_id;
+ id = regs.bvh.nodes[id].next_id;
}
}