| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package karl2d_multitexture_example
- import k2 "../.."
- import "core:mem"
- import "core:log"
- import "core:fmt"
- _ :: fmt
- _ :: mem
- main :: proc() {
- context.logger = log.create_console_logger()
- init()
- run := true
- for run {
- run = step()
- }
- shutdown()
- }
- shd: k2.Shader
- tex1: k2.Texture
- tex2: k2.Texture
- init :: proc() {
- k2.init(1080, 1080, "Karl2D Multitexture Example")
- when k2.RENDER_BACKEND_NAME == "gl" {
- shd = k2.load_shader_from_file("gl_multitexture_vertex_shader.glsl", "gl_multitexture_fragment_shader.glsl")
- } else when k2.RENDER_BACKEND_NAME == "webgl" {
- shd = k2.load_shader_from_bytes(#load("gl_multitexture_vertex_shader.glsl"), #load("gl_multitexture_fragment_shader.glsl"))
- } else {
- shd = k2.load_shader_from_file("multitexture_shader.hlsl", "multitexture_shader.hlsl")
- }
-
- tex1 = k2.load_texture_from_bytes(#load("../minimal/sixten.jpg"))
- tex2 = k2.load_texture_from_bytes(#load("../snake/food.png"))
- shd.texture_bindpoints[shd.texture_lookup["tex2"]] = tex2.handle
- }
- step :: proc() -> bool {
- k2.new_frame()
- k2.process_events()
- k2.set_shader(shd)
- k2.clear(k2.BLUE)
- k2.draw_rect({10, 10, 60, 60}, k2.GREEN)
- k2.draw_rect({20, 20, 40, 40}, k2.BLACK)
- k2.draw_circle({120, 40}, 30, k2.BLACK)
- k2.draw_circle({120, 40}, 20, k2.GREEN)
- k2.draw_text("Hellöpe!", {10, 100}, 64, k2.WHITE)
- k2.draw_texture_ex(tex1, {0, 0, f32(tex1.width), f32(tex1.height)}, {10, 200, 900, 500}, {}, 0)
- k2.present()
- free_all(context.temp_allocator)
- return !k2.shutdown_wanted()
- }
- shutdown :: proc() {
- k2.destroy_texture(tex1)
- k2.destroy_texture(tex2)
- k2.destroy_shader(shd)
- k2.shutdown()
- }
|