// Based on https://github.com/raysan5/raylib/blob/master/examples/shaders/shaders_texture_waves.c package raylib_example_shaders_texture_waves import k2 "../../.." import "core:time" import "core:log" SCREEN_WIDTH :: 800 SCREEN_HEIGHT :: 450 main :: proc() { context.logger = log.create_console_logger() k2.init(SCREEN_WIDTH, SCREEN_HEIGHT, "Karl2D: texture waves (raylib [shaders] example - texture waves)") texture := k2.load_texture_from_file("space.png") WAVE_SHADER_DATA :: #load("wave.hlsl") shader := k2.load_shader(string(WAVE_SHADER_DATA)) seconds_loc := k2.get_shader_constant_location(shader, "seconds") freq_x_loc := k2.get_shader_constant_location(shader, "freqX") freq_y_loc := k2.get_shader_constant_location(shader, "freqY") amp_x_loc := k2.get_shader_constant_location(shader, "ampX") amp_y_loc := k2.get_shader_constant_location(shader, "ampY") speed_x_loc := k2.get_shader_constant_location(shader, "speedX") speed_y_loc := k2.get_shader_constant_location(shader, "speedY") freq_x := f32(25) freq_y := f32(25) amp_x := f32(5) amp_y := f32(5) speed_x := f32(8) speed_y := f32(8) screen_size := [2]f32 { f32(k2.get_screen_width()), f32(k2.get_screen_height()) } k2.set_shader_constant(shader, k2.get_shader_constant_location(shader, "size"), screen_size) k2.set_shader_constant(shader, freq_x_loc, freq_x) k2.set_shader_constant(shader, freq_y_loc, freq_y) k2.set_shader_constant(shader, amp_x_loc, amp_x) k2.set_shader_constant(shader, amp_y_loc, amp_y) k2.set_shader_constant(shader, speed_x_loc, speed_x) k2.set_shader_constant(shader, speed_y_loc, speed_y) seconds: f32 last_frame_time := time.now() for !k2.window_should_close() { k2.process_events() now := time.now() dt := f32(time.duration_seconds(time.diff(last_frame_time, now))) last_frame_time = now seconds += dt k2.set_shader_constant_f32(shader, seconds_loc, seconds) k2.set_shader(shader) k2.draw_texture(texture, {0, 0}) k2.draw_texture(texture, {f32(texture.width), 0}) k2.set_shader(k2.SHADER_NONE) k2.present() } k2.destroy_shader(shader) k2.destroy_texture(texture) k2.shutdown() }