mirror of
https://github.com/doukutsu-rs/doukutsu-rs
synced 2025-03-22 09:59:25 +00:00
recolor the water
This commit is contained in:
parent
035b2c2848
commit
ad4fc4b481
|
@ -11,16 +11,18 @@ layout (std140) uniform Globals {
|
|||
|
||||
layout (std140) uniform WaterShaderParams {
|
||||
vec2 u_Resolution;
|
||||
vec2 u_FramePos;
|
||||
float u_Tick;
|
||||
};
|
||||
|
||||
void main() {
|
||||
vec2 wave = v_Uv;
|
||||
wave.x += sin(v_Uv.x * 40.0 + u_Tick / 20.0) * (sin(u_Tick / 10.0) * 0.01);
|
||||
wave.y -= cos(v_Uv.y * 20.0 + u_Tick / 5.0) * (sin(u_Tick / 20.0) * 0.01);
|
||||
wave.x += sin((-u_FramePos.y / u_Resolution.y + v_Uv.x * 16.0) + u_Tick / 20.0) * 2.0 / u_Resolution.x;
|
||||
wave.y -= cos((-u_FramePos.x / u_Resolution.x + v_Uv.y * 16.0) + u_Tick / 5.0) * 2.0 / u_Resolution.y;
|
||||
float off = 0.4 / u_Resolution.y;
|
||||
vec4 color = texture(t_Texture, wave);
|
||||
color.r = texture(t_Texture, wave + off).r;
|
||||
color.b = texture(t_Texture, wave - off).b;
|
||||
Target0 = vec4(0.7, 0.8, 1.2, 1.0) * color * v_Color;
|
||||
|
||||
Target0 = (vec4(0.4, 0.6, 0.8, 1.0) * 0.3) + (color * v_Color * 0.7);
|
||||
}
|
||||
|
|
|
@ -649,8 +649,11 @@ impl GameScene {
|
|||
}
|
||||
|
||||
fn draw_water(&self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult {
|
||||
let (frame_x, frame_y) = self.frame.xy_interpolated(state.frame_time, state.scale);
|
||||
|
||||
{
|
||||
state.shaders.water_shader_params.resolution = [state.canvas_size.0, state.canvas_size.1];
|
||||
state.shaders.water_shader_params.frame_pos = [frame_x, frame_y];
|
||||
state.shaders.water_shader_params.t = self.tick as f32;
|
||||
let _lock = graphics::use_shader(ctx, &state.shaders.water_shader);
|
||||
state.shaders.water_shader.send(ctx, state.shaders.water_shader_params)?;
|
||||
|
@ -666,8 +669,6 @@ impl GameScene {
|
|||
// cheap, clones a reference underneath
|
||||
let mut tmp_batch = SpriteBatch::new(state.tmp_canvas.image().clone());
|
||||
|
||||
let (frame_x, frame_y) = self.frame.xy_interpolated(state.frame_time, state.scale);
|
||||
|
||||
let tile_start_x = clamp(self.frame.x / 0x200 / 16, 0, self.stage.map.width as isize) as usize;
|
||||
let tile_start_y = clamp(self.frame.y / 0x200 / 16, 0, self.stage.map.height as isize) as usize;
|
||||
let tile_end_x = clamp((self.frame.x / 0x200 + 8 + state.canvas_size.0 as isize) / 16 + 1, 0, self.stage.map.width as isize) as usize;
|
||||
|
|
|
@ -5,6 +5,7 @@ use ggez::{Context, GameResult};
|
|||
gfx_defines! {
|
||||
constant WaterShaderParams {
|
||||
resolution: [f32; 2] = "u_Resolution",
|
||||
frame_pos: [f32; 2] = "u_FramePos",
|
||||
t: f32 = "u_Tick",
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +20,7 @@ impl Shaders {
|
|||
let water_shader_params = WaterShaderParams {
|
||||
t: 0.0,
|
||||
resolution: [0.0, 0.0],
|
||||
frame_pos: [0.0, 0.0],
|
||||
};
|
||||
|
||||
Ok(Shaders {
|
||||
|
|
Loading…
Reference in a new issue