mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Compressed vertex data even more
This commit is contained in:
parent
8d04b9297e
commit
c3cd3b9a69
@ -26,7 +26,7 @@ void main() {
|
||||
|
||||
float static_light = glob_ambience + min(sun_light, f_light);
|
||||
|
||||
vec3 light = static_light;
|
||||
vec3 light = vec3(static_light);
|
||||
|
||||
tgt_color = vec4(f_col * light, 1.0);
|
||||
}
|
||||
|
@ -2,9 +2,8 @@
|
||||
|
||||
#include <globals.glsl>
|
||||
|
||||
in uint v_pos;
|
||||
in uint v_col_norm;
|
||||
in uint v_light;
|
||||
in uint v_pos_norm;
|
||||
in uint v_col_light;
|
||||
|
||||
layout (std140)
|
||||
uniform u_locals {
|
||||
@ -18,24 +17,28 @@ out float f_light;
|
||||
|
||||
void main() {
|
||||
f_pos = vec3(
|
||||
float((v_pos >> 0) & 0x00FFu),
|
||||
float((v_pos >> 8) & 0x00FFu),
|
||||
float((v_pos >> 16) & 0xFFFFu)
|
||||
float((v_pos_norm >> 0) & 0x00FFu),
|
||||
float((v_pos_norm >> 8) & 0x00FFu),
|
||||
float((v_pos_norm >> 16) & 0x1FFFu)
|
||||
) + model_offs;
|
||||
|
||||
f_norm = vec3(
|
||||
float((v_col_norm >> 0) & 0x3u),
|
||||
float((v_col_norm >> 2) & 0x3u),
|
||||
float((v_col_norm >> 4) & 0x3u)
|
||||
) - 1.0;
|
||||
|
||||
f_col = vec3(
|
||||
float((v_col_norm >> 8) & 0xFFu),
|
||||
float((v_col_norm >> 16) & 0xFFu),
|
||||
float((v_col_norm >> 24) & 0xFFu)
|
||||
float((v_col_light >> 8) & 0xFFu),
|
||||
float((v_col_light >> 16) & 0xFFu),
|
||||
float((v_col_light >> 24) & 0xFFu)
|
||||
) / 255.0;
|
||||
|
||||
f_light = float(v_light) / 4096.0;
|
||||
uint norm_axis = (v_pos_norm >> 30) & 0x3u;
|
||||
float norm_dir = float((v_pos_norm >> 29) & 0x1u) * 2.0 - 1.0;
|
||||
if (norm_axis == 0u) {
|
||||
f_norm = vec3(1.0, 0.0, 0.0) * norm_dir;
|
||||
} else if (norm_axis == 1u) {
|
||||
f_norm = vec3(0.0, 1.0, 0.0) * norm_dir;
|
||||
} else {
|
||||
f_norm = vec3(0.0, 0.0, 1.0) * norm_dir;
|
||||
}
|
||||
|
||||
f_light = float(v_col_light & 0xFFu) / 255.0;
|
||||
|
||||
gl_Position =
|
||||
proj_mat *
|
||||
|
@ -17,9 +17,8 @@ use vek::*;
|
||||
|
||||
gfx_defines! {
|
||||
vertex Vertex {
|
||||
pos: u32 = "v_pos",
|
||||
col_norm: u32 = "v_col_norm",
|
||||
light: u16 = "v_light",
|
||||
pos_norm: u32 = "v_pos_norm",
|
||||
col_light: u32 = "v_col_light",
|
||||
}
|
||||
|
||||
constant Locals {
|
||||
@ -39,19 +38,25 @@ gfx_defines! {
|
||||
|
||||
impl Vertex {
|
||||
pub fn new(pos: Vec3<f32>, norm: Vec3<f32>, col: Rgb<f32>, light: f32) -> Self {
|
||||
let (norm_axis, norm_dir) = norm
|
||||
.as_slice()
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.find(|(i, e)| **e != 0.0)
|
||||
.unwrap_or((0, &1.0));
|
||||
let norm_bits = (norm_axis << 1) | if *norm_dir > 0.0 { 1 } else { 0 };
|
||||
|
||||
Self {
|
||||
pos: 0
|
||||
pos_norm: 0
|
||||
| ((pos.x as u32) & 0x00FF) << 0
|
||||
| ((pos.y as u32) & 0x00FF) << 8
|
||||
| ((pos.z as u32) & 0xFFFF) << 16,
|
||||
col_norm: 0
|
||||
| ((pos.z as u32) & 0x1FFF) << 16
|
||||
| ((norm_bits as u32) & 0x7) << 29,
|
||||
col_light: 0
|
||||
| ((col.r.mul(255.0) as u32) & 0xFF) << 8
|
||||
| ((col.g.mul(255.0) as u32) & 0xFF) << 16
|
||||
| ((col.b.mul(255.0) as u32) & 0xFF) << 24
|
||||
| ((norm.x.add(1.0) as u32) & 0x3) << 0
|
||||
| ((norm.y.add(1.0) as u32) & 0x3) << 2
|
||||
| ((norm.z.add(1.0) as u32) & 0x3) << 4,
|
||||
light: light.mul(4096.0) as u16,
|
||||
| ((light.mul(255.0) as u32) & 0xFF) << 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -182,8 +182,8 @@ impl<'a> Sampler<'a> {
|
||||
.mul(0.5);
|
||||
|
||||
// Colours
|
||||
let cold_grass = Rgb::new(0.05, 0.5, 0.3);
|
||||
let warm_grass = Rgb::new(0.4, 1.0, 0.05);
|
||||
let cold_grass = Rgb::new(0.1, 0.6, 0.3);
|
||||
let warm_grass = Rgb::new(0.25, 0.8, 0.05);
|
||||
let cold_stone = Rgb::new(0.55, 0.7, 0.75);
|
||||
let warm_stone = Rgb::new(0.65, 0.65, 0.35);
|
||||
let beach_sand = Rgb::new(0.93, 0.84, 0.33);
|
||||
|
Loading…
Reference in New Issue
Block a user