Explorar o código

Update multitexture example

Karl Zylinski hai 1 mes
pai
achega
050efc848e

+ 5 - 0
.sublime/karl2d.sublime-project

@@ -56,6 +56,11 @@
 					"shell_cmd": "odin run . -vet -strict-style -keep-executable -debug -define:KARL2D_RENDER_BACKEND=gl",
 					"working_dir": "$project_path/../examples/multitexture"
 				},
+				{
+					"name": "multitexture (webgl)",
+					"shell_cmd": "odin run build_web_example -- multitexture",
+					"working_dir": "$project_path/../examples"
+				},
 				{
 					"name": "snake",
 					"shell_cmd": "odin run . -vet -strict-style -keep-executable -debug",

+ 2 - 1
examples/multitexture/gl_multitexture_fragment_shader.glsl

@@ -1,4 +1,5 @@
-#version 330
+#version 300 es
+precision highp float;
 in vec2 frag_texcoord;
 in vec4 frag_color;
 out vec4 final_color;

+ 2 - 1
examples/multitexture/gl_multitexture_vertex_shader.glsl

@@ -1,4 +1,5 @@
-#version 330
+#version 300 es
+precision highp float;
 layout(location = 0) in vec3 position;
 layout(location = 1) in vec2 texcoord;
 layout(location = 2) in vec4 color;

+ 38 - 33
examples/multitexture/multitexture.odin

@@ -10,53 +10,58 @@ _ :: mem
 
 main :: proc() {
 	context.logger = log.create_console_logger()
+	init()
+	run := true
 
-	when ODIN_DEBUG {
-		track: mem.Tracking_Allocator
-		mem.tracking_allocator_init(&track, context.allocator)
-		context.allocator = mem.tracking_allocator(&track)
-
-		defer {
-			if len(track.allocation_map) > 0 {
-				for _, entry in track.allocation_map {
-					fmt.eprintf("%v leaked: %v bytes\n", entry.location, entry.size)
-				}
-			}
-			mem.tracking_allocator_destroy(&track)
-		}
+	for run {
+		run = step()
 	}
 
+	shutdown()
+}
+
+shd: k2.Shader
+tex1: k2.Texture
+tex2: k2.Texture
+
+init :: proc() {
 	k2.init(1080, 1080, "Karl2D Multitexture Example")
-	k2.set_window_position(300, 100)
-	when k2.CUSTOM_RENDER_BACKEND_STR == "gl" {
-		shd := k2.load_shader_from_file("gl_multitexture_vertex_shader.glsl", "gl_multitexture_fragment_shader.glsl")
+
+	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")	
+		shd = k2.load_shader_from_file("multitexture_shader.hlsl", "multitexture_shader.hlsl")	
 	}
 	
-	tex1 := k2.load_texture_from_file("../minimal/sixten.jpg")
-	tex2 := k2.load_texture_from_file("../snake/food.png")
+	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
+}
 
-	for !k2.shutdown_wanted() {
-		k2.process_events()
-		k2.set_shader(shd)
-		k2.clear(k2.BLUE)
+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.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)
-	}
+	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()
-}
+}

+ 3 - 3
karl2d.odin

@@ -95,7 +95,7 @@ init :: proc(window_width: int, window_height: int, window_title: string,
 
 	// The default shader will arrive in a different format depending on backend. GLSL for GL,
 	// HLSL for d3d etc.
-	s.default_shader = load_shader_from_memory(rb.default_shader_vertex_source(), rb.default_shader_fragment_source())
+	s.default_shader = load_shader_from_bytes(rb.default_shader_vertex_source(), rb.default_shader_fragment_source())
 	s.batch_shader = s.default_shader
 
 	// FontStash enables us to bake fonts from TTF files on-the-fly.
@@ -1056,10 +1056,10 @@ load_shader_from_file :: proc(
 		}
 	}
 
-	return load_shader_from_memory(vertex_source, fragment_source, layout_formats)
+	return load_shader_from_bytes(vertex_source, fragment_source, layout_formats)
 }
 
-load_shader_from_memory :: proc(
+load_shader_from_bytes :: proc(
 	vertex_shader_bytes: []byte,
 	fragment_shader_bytes: []byte,
 	layout_formats: []Pixel_Format = {},