mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
send full matrix to shader
This commit is contained in:
parent
c4cffff92f
commit
f6f332af6a
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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],
|
||||
|
Loading…
Reference in New Issue
Block a user