multitexture.odin 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package karl2d_multitexture_example
  2. import k2 "../.."
  3. import "core:mem"
  4. import "core:log"
  5. import "core:fmt"
  6. _ :: fmt
  7. _ :: mem
  8. main :: proc() {
  9. context.logger = log.create_console_logger()
  10. init()
  11. run := true
  12. for run {
  13. run = step()
  14. }
  15. shutdown()
  16. }
  17. shd: k2.Shader
  18. tex1: k2.Texture
  19. tex2: k2.Texture
  20. init :: proc() {
  21. k2.init(1080, 1080, "Karl2D Multitexture Example")
  22. when k2.RENDER_BACKEND_NAME == "gl" {
  23. shd = k2.load_shader_from_file("gl_multitexture_vertex_shader.glsl", "gl_multitexture_fragment_shader.glsl")
  24. } else when k2.RENDER_BACKEND_NAME == "webgl" {
  25. shd = k2.load_shader_from_bytes(#load("gl_multitexture_vertex_shader.glsl"), #load("gl_multitexture_fragment_shader.glsl"))
  26. } else {
  27. shd = k2.load_shader_from_file("multitexture_shader.hlsl", "multitexture_shader.hlsl")
  28. }
  29. tex1 = k2.load_texture_from_bytes(#load("../minimal/sixten.jpg"))
  30. tex2 = k2.load_texture_from_bytes(#load("../snake/food.png"))
  31. shd.texture_bindpoints[shd.texture_lookup["tex2"]] = tex2.handle
  32. }
  33. step :: proc() -> bool {
  34. k2.new_frame()
  35. k2.process_events()
  36. k2.set_shader(shd)
  37. k2.clear(k2.BLUE)
  38. k2.draw_rect({10, 10, 60, 60}, k2.GREEN)
  39. k2.draw_rect({20, 20, 40, 40}, k2.BLACK)
  40. k2.draw_circle({120, 40}, 30, k2.BLACK)
  41. k2.draw_circle({120, 40}, 20, k2.GREEN)
  42. k2.draw_text("Hellöpe!", {10, 100}, 64, k2.WHITE)
  43. k2.draw_texture_ex(tex1, {0, 0, f32(tex1.width), f32(tex1.height)}, {10, 200, 900, 500}, {}, 0)
  44. k2.present()
  45. free_all(context.temp_allocator)
  46. return !k2.shutdown_wanted()
  47. }
  48. shutdown :: proc() {
  49. k2.destroy_texture(tex1)
  50. k2.destroy_texture(tex2)
  51. k2.destroy_shader(shd)
  52. k2.shutdown()
  53. }