shaders_texture_waves.odin 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Based on https://github.com/raysan5/raylib/blob/master/examples/shaders/shaders_texture_waves.c
  2. package raylib_example_shaders_texture_waves
  3. import k2 "../../.."
  4. import "core:time"
  5. SCREEN_WIDTH :: 800
  6. SCREEN_HEIGHT :: 450
  7. main :: proc() {
  8. k2.init(SCREEN_WIDTH, SCREEN_HEIGHT, "Karl2D: texture waves (raylib [shaders] example - texture waves)")
  9. texture := k2.load_texture_from_file("space.png")
  10. shader := k2.load_shader("", "wave.fs")
  11. seconds_loc := k2.get_shader_location(shader, "seconds")
  12. freq_x_loc := k2.get_shader_location(shader, "freqX")
  13. freq_y_loc := k2.get_shader_location(shader, "freqY")
  14. amp_x_loc := k2.get_shader_location(shader, "ampX")
  15. amp_y_loc := k2.get_shader_location(shader, "ampY")
  16. speed_x_loc := k2.get_shader_location(shader, "speedX")
  17. speed_y_loc := k2.get_shader_location(shader, "speedY")
  18. freq_x := f32(25)
  19. freq_y := f32(25)
  20. amp_x := f32(5)
  21. amp_y := f32(5)
  22. speed_x := f32(8)
  23. speed_y := f32(8)
  24. screen_size := [2]f32 { f32(k2.get_screen_width()), f32(k2.get_screen_height()) }
  25. k2.set_shader_value(shader, k2.get_shader_location(shader, "size"), screen_size)
  26. k2.set_shader_value(shader, freq_x_loc, freq_x)
  27. k2.set_shader_value(shader, freq_y_loc, freq_y)
  28. k2.set_shader_value(shader, amp_x_loc, amp_x)
  29. k2.set_shader_value(shader, amp_y_loc, amp_y)
  30. k2.set_shader_value(shader, speed_x_loc, speed_x)
  31. k2.set_shader_value(shader, speed_y_loc, speed_y)
  32. seconds: f32
  33. last_frame_time := time.now()
  34. for !k2.window_should_close() {
  35. k2.process_events()
  36. now := time.now()
  37. dt := f32(time.duration_seconds(time.diff(last_frame_time, now)))
  38. last_frame_time = now
  39. seconds += dt
  40. k2.set_shader_value(shader, seconds_loc, seconds)
  41. k2.set_shader(shader)
  42. k2.draw_texture(texture, {0, 0})
  43. k2.draw_texture(texture, {f32(texture.width), 0})
  44. k2.set_shader(nil)
  45. k2.present()
  46. }
  47. k2.destroy_shader(shader)
  48. k2.destroy_texture(texture)
  49. k2.shutdown()
  50. }