Преглед изворни кода

Premultiplied alpha support in GL backend

Karl Zylinski пре 3 месеци
родитељ
комит
108ee9a1af
2 измењених фајлова са 10 додато и 2 уклоњено
  1. 5 0
      .sublime/karl2d.sublime-project
  2. 5 2
      render_backend_gl.odin

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

@@ -41,6 +41,11 @@
 					"shell_cmd": "odin run . -vet -strict-style -keep-executable -debug -define:KARL2D_RENDER_BACKEND=d3d11",
 					"working_dir": "$project_path/../examples/premultiplied_alpha"
 				},
+				{
+					"name": "premultiplied_alpha (gl)",
+					"shell_cmd": "odin run . -vet -strict-style -keep-executable -debug -define:KARL2D_RENDER_BACKEND=gl",
+					"working_dir": "$project_path/../examples/premultiplied_alpha"
+				},
 				{
 					"name": "raylib_ports/2d_camera",
 					"shell_cmd": "odin run . -vet -strict-style -keep-executable -debug",

+ 5 - 2
render_backend_gl.odin

@@ -130,8 +130,6 @@ gl_init :: proc(state: rawptr, window_handle: Window_Handle, swapchain_width, sw
 	gl.BufferData(gl.ARRAY_BUFFER, VERTEX_BUFFER_MAX, nil, gl.DYNAMIC_DRAW)
 
 	gl.Enable(gl.BLEND)
-	gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
-
 }
 
 gl_shutdown :: proc() {
@@ -164,6 +162,11 @@ gl_draw :: proc(
 		return
 	}
 
+	switch blend_mode {
+	case .Alpha: gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
+	case .Premultiplied_Alpha: gl.BlendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)
+	}
+
 	gl.EnableVertexAttribArray(0)
 	gl.EnableVertexAttribArray(1)
 	gl.EnableVertexAttribArray(2)