send full matrix to shader

This commit is contained in:
Isse 2023-05-05 20:13:49 +02:00
parent c4cffff92f
commit f6f332af6a
11 changed files with 14 additions and 95 deletions

View File

@ -40,10 +40,7 @@ layout(location = 2) in vec2 f_vel;
layout(std140, set = 2, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};

View File

@ -42,10 +42,7 @@ layout(location = 2) in vec2 f_vel;
layout(std140, set = 2, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};

View File

@ -26,10 +26,7 @@ layout(location = 1) in uint v_vel;
layout(std140, set = 2, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -54,11 +51,6 @@ layout(location = 2) out vec2 f_vel;
const float EXTRA_NEG_Z = 65536.0/*65536.1*/;
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
vec3 rel_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0x1FFFFu) - EXTRA_NEG_Z);
f_pos = (model_mat * vec4(rel_pos, 1.0)).xyz - focus_off.xyz;

View File

@ -44,10 +44,7 @@ layout(location = 0) in uint v_pos_norm;
// Light projection matrices.
layout (std140, set = 1, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -57,12 +54,6 @@ uniform u_locals {
const float EXTRA_NEG_Z = 32768.0;
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
vec3 f_chunk_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0xFFFFu) - EXTRA_NEG_Z);
vec3 f_pos = (model_mat * vec4(f_chunk_pos, 1.0)).xyz - focus_off.xyz;
// f_pos = v_pos;

View File

@ -33,10 +33,7 @@ layout(location = 1) in uint v_pos_norm;
// Light projection matrices.
layout (std140, set = 1, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -46,12 +43,6 @@ uniform u_locals {
const int EXTRA_NEG_Z = 32768;
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
vec3 f_chunk_pos = vec3(ivec3((uvec3(v_pos_norm) >> uvec3(0, 6, 12)) & uvec3(0x3Fu, 0x3Fu, 0xFFFFu)) - ivec3(0, 0, EXTRA_NEG_Z));
vec3 f_pos = (model_mat * vec4(f_chunk_pos, 1.0)).xyz - focus_off.xyz;
// f_pos = v_pos;

View File

@ -34,10 +34,7 @@ layout(location = 0) in uint v_pos_norm;
// Light projection matrices.
layout (std140, set = 1, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -51,12 +48,6 @@ layout( push_constant ) uniform PointLightMatrix {
};
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
vec3 f_chunk_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0xFFFFu) - EXTRA_NEG_Z);
vec3 f_pos = (model_mat * vec4(f_chunk_pos, 1.0)).xyz - focus_off.xyz;
// f_pos = v_pos;

View File

@ -48,10 +48,7 @@ layout(location = 0) in uint v_pos_norm;
// Light projection matrices.
layout (std140, set = 1, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -61,12 +58,6 @@ uniform u_locals {
const float EXTRA_NEG_Z = 32768.0;
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
vec3 f_chunk_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0xFFFFu) - EXTRA_NEG_Z);
vec3 f_pos = (model_mat * vec4(f_chunk_pos, 1.0)).xyz - focus_off.xyz;

View File

@ -37,10 +37,7 @@ layout(set = 0, binding = 15) restrict readonly buffer sprite_verts {
layout (std140, set = 3, binding = 0)
uniform u_terrain_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -92,12 +89,6 @@ float wind_wave(float off, float scaling, float speed, float strength) {
}
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
// Matrix to transform this sprite instance from model space to chunk space
mat4 inst_mat;
inst_mat[0] = inst_mat0;

View File

@ -52,10 +52,7 @@ uniform sampler s_col_light;
layout (std140, set = 3, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
ivec4 atlas_offs;
float load_time;
};
@ -456,7 +453,7 @@ void main() {
// vec3 surf_color = illuminate(srgb_to_linear(f_col), light, diffuse_light, ambient_light);
vec3 f_chunk_pos = f_pos - (model_mat3.xyz - focus_off.xyz);
vec3 f_chunk_pos = f_pos - (model_mat[3].xyz - focus_off.xyz);
#ifdef EXPERIMENTAL_NONOISE
float noise = 0.0;
#else

View File

@ -30,10 +30,7 @@ layout(location = 1) in uint v_atlas_pos;
layout (std140, set = 3, binding = 0)
uniform u_locals {
vec4 model_mat0;
vec4 model_mat1;
vec4 model_mat2;
vec4 model_mat3;
mat4 model_mat;
// TODO: consider whether these need to be signed
ivec4 atlas_offs;
float load_time;
@ -73,11 +70,6 @@ layout(location = 2) flat out float f_load_time;
const float EXTRA_NEG_Z = 32768.0;
void main() {
mat4 model_mat;
model_mat[0] = model_mat0;
model_mat[1] = model_mat1;
model_mat[2] = model_mat2;
model_mat[3] = model_mat3;
// over it (if this vertex to see if it intersects.
// f_chunk_pos = vec3(ivec3((uvec3(v_pos_norm) >> uvec3(0, 6, 12)) & uvec3(0x3Fu, 0x3Fu, 0xFFFFu)) - ivec3(0, 0, EXTRA_NEG_Z));
vec3 f_chunk_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0xFFFFu) - EXTRA_NEG_Z);

View File

@ -137,10 +137,7 @@ impl VertexTrait for Vertex {
#[derive(Copy, Clone, Debug, Zeroable, Pod)]
// TODO: new function and private fields??
pub struct Locals {
model_mat0: [f32; 4],
model_mat1: [f32; 4],
model_mat2: [f32; 4],
model_mat3: [f32; 4],
model_mat: [f32; 16],
atlas_offs: [i32; 4],
load_time: f32,
_dummy: [f32; 3],
@ -154,13 +151,8 @@ impl Locals {
load_time: f32,
) -> Self {
let mat = Mat4::from(ori).translated_3d(model_offs);
let mat_arr = mat.into_col_arrays();
Self {
model_mat0: mat_arr[0],
model_mat1: mat_arr[1],
model_mat2: mat_arr[2],
model_mat3: mat_arr[3],
model_mat: mat.into_col_array(),
load_time,
atlas_offs: Vec4::new(atlas_offs.x as i32, atlas_offs.y as i32, 0, 0).into_array(),
_dummy: [0.0; 3],
@ -171,10 +163,7 @@ impl Locals {
impl Default for Locals {
fn default() -> Self {
Self {
model_mat0: [1.0, 0.0, 0.0, 0.0],
model_mat1: [0.0, 1.0, 0.0, 0.0],
model_mat2: [0.0, 0.0, 1.0, 0.0],
model_mat3: [0.0, 0.0, 0.0, 1.0],
model_mat: Mat4::identity().into_col_array(),
load_time: 0.0,
atlas_offs: [0; 4],
_dummy: [0.0; 3],