diff --git a/assets/editor/gizmo/center_handle b/assets/editor/gizmo/center_handle
new file mode 100644
index 000000000..080033891
--- /dev/null
+++ b/assets/editor/gizmo/center_handle
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/center_handle_tri_0 b/assets/editor/gizmo/center_handle_tri_0
new file mode 100644
index 000000000..fd87c8004
--- /dev/null
+++ b/assets/editor/gizmo/center_handle_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/center_handle_vtx_0 b/assets/editor/gizmo/center_handle_vtx_0
new file mode 100644
index 000000000..311c7b760
--- /dev/null
+++ b/assets/editor/gizmo/center_handle_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/center_handle_vtx_cull b/assets/editor/gizmo/center_handle_vtx_cull
new file mode 100644
index 000000000..35d61ecf3
--- /dev/null
+++ b/assets/editor/gizmo/center_handle_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_center_handle_f3dlite_material b/assets/editor/gizmo/mat_center_handle_f3dlite_material
new file mode 100644
index 000000000..33b00834b
--- /dev/null
+++ b/assets/editor/gizmo/mat_center_handle_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_center_handle_f3dlite_material b/assets/editor/gizmo/mat_revert_center_handle_f3dlite_material
new file mode 100644
index 000000000..9baded2ce
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_center_handle_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_rot_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_revert_rot_handle_blue_f3dlite_material
new file mode 100644
index 000000000..9baded2ce
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_rot_handle_blue_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material b/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material
new file mode 100644
index 000000000..9baded2ce
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material_002 b/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material_002
new file mode 100644
index 000000000..27cba20ee
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_rot_handle_green_f3dlite_material_002
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_rot_handle_red_f3dlite_material b/assets/editor/gizmo/mat_revert_rot_handle_red_f3dlite_material
new file mode 100644
index 000000000..9baded2ce
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_rot_handle_red_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_rotate_handle_red_f3dlite_material b/assets/editor/gizmo/mat_revert_rotate_handle_red_f3dlite_material
new file mode 100644
index 000000000..14334454e
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_rotate_handle_red_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material
new file mode 100644
index 000000000..32d31d43f
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material_001 b/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material_001
new file mode 100644
index 000000000..45749efdc
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_scale_handle_blue_f3dlite_material_001
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_scale_handle_green_f3dlite_material_001 b/assets/editor/gizmo/mat_revert_scale_handle_green_f3dlite_material_001
new file mode 100644
index 000000000..32d31d43f
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_scale_handle_green_f3dlite_material_001
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_scale_handle_red_f3dlite_material_001 b/assets/editor/gizmo/mat_revert_scale_handle_red_f3dlite_material_001
new file mode 100644
index 000000000..32d31d43f
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_scale_handle_red_f3dlite_material_001
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_translate_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_revert_translate_handle_blue_f3dlite_material
new file mode 100644
index 000000000..379b23dda
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_translate_handle_blue_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_translate_handle_green_f3dlite_material b/assets/editor/gizmo/mat_revert_translate_handle_green_f3dlite_material
new file mode 100644
index 000000000..379b23dda
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_translate_handle_green_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_revert_translate_handle_red_f3dlite_material b/assets/editor/gizmo/mat_revert_translate_handle_red_f3dlite_material
new file mode 100644
index 000000000..379b23dda
--- /dev/null
+++ b/assets/editor/gizmo/mat_revert_translate_handle_red_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_rot_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_rot_handle_blue_f3dlite_material
new file mode 100644
index 000000000..9caab9574
--- /dev/null
+++ b/assets/editor/gizmo/mat_rot_handle_blue_f3dlite_material
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material b/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material
new file mode 100644
index 000000000..56ec374bb
--- /dev/null
+++ b/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material_002 b/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material_002
new file mode 100644
index 000000000..132776ff4
--- /dev/null
+++ b/assets/editor/gizmo/mat_rot_handle_green_f3dlite_material_002
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_rot_handle_red_f3dlite_material b/assets/editor/gizmo/mat_rot_handle_red_f3dlite_material
new file mode 100644
index 000000000..82d41f424
--- /dev/null
+++ b/assets/editor/gizmo/mat_rot_handle_red_f3dlite_material
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_rotate_handle_red_f3dlite_material b/assets/editor/gizmo/mat_rotate_handle_red_f3dlite_material
new file mode 100644
index 000000000..b89e12bf5
--- /dev/null
+++ b/assets/editor/gizmo/mat_rotate_handle_red_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material
new file mode 100644
index 000000000..66f56e8b4
--- /dev/null
+++ b/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material_001 b/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material_001
new file mode 100644
index 000000000..ba44337c6
--- /dev/null
+++ b/assets/editor/gizmo/mat_scale_handle_blue_f3dlite_material_001
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_scale_handle_green_f3dlite_material_001 b/assets/editor/gizmo/mat_scale_handle_green_f3dlite_material_001
new file mode 100644
index 000000000..537cb662c
--- /dev/null
+++ b/assets/editor/gizmo/mat_scale_handle_green_f3dlite_material_001
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_scale_handle_red_f3dlite_material_001 b/assets/editor/gizmo/mat_scale_handle_red_f3dlite_material_001
new file mode 100644
index 000000000..4612ed823
--- /dev/null
+++ b/assets/editor/gizmo/mat_scale_handle_red_f3dlite_material_001
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_translate_handle_blue_f3dlite_material b/assets/editor/gizmo/mat_translate_handle_blue_f3dlite_material
new file mode 100644
index 000000000..57823e021
--- /dev/null
+++ b/assets/editor/gizmo/mat_translate_handle_blue_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_translate_handle_green_f3dlite_material b/assets/editor/gizmo/mat_translate_handle_green_f3dlite_material
new file mode 100644
index 000000000..c1f582413
--- /dev/null
+++ b/assets/editor/gizmo/mat_translate_handle_green_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/mat_translate_handle_red_f3dlite_material b/assets/editor/gizmo/mat_translate_handle_red_f3dlite_material
new file mode 100644
index 000000000..01cdfa34b
--- /dev/null
+++ b/assets/editor/gizmo/mat_translate_handle_red_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/model.xml b/assets/editor/gizmo/model.xml
new file mode 100644
index 000000000..f0b5d64c2
--- /dev/null
+++ b/assets/editor/gizmo/model.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_blue b/assets/editor/gizmo/rot_handle_blue
new file mode 100644
index 000000000..19ab2af77
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_blue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_blue_tri_0 b/assets/editor/gizmo/rot_handle_blue_tri_0
new file mode 100644
index 000000000..ba9053f7d
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_blue_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_blue_vtx_0 b/assets/editor/gizmo/rot_handle_blue_vtx_0
new file mode 100644
index 000000000..c0865a3af
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_blue_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_blue_vtx_cull b/assets/editor/gizmo/rot_handle_blue_vtx_cull
new file mode 100644
index 000000000..7f8d154aa
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_blue_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_green b/assets/editor/gizmo/rot_handle_green
new file mode 100644
index 000000000..0c1f892e2
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_green
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_green_tri_0 b/assets/editor/gizmo/rot_handle_green_tri_0
new file mode 100644
index 000000000..cb6385350
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_green_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_green_vtx_0 b/assets/editor/gizmo/rot_handle_green_vtx_0
new file mode 100644
index 000000000..b89eede8e
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_green_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_green_vtx_cull b/assets/editor/gizmo/rot_handle_green_vtx_cull
new file mode 100644
index 000000000..f0b5d64c2
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_green_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_red b/assets/editor/gizmo/rot_handle_red
new file mode 100644
index 000000000..d07533eae
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_red
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_red_tri_0 b/assets/editor/gizmo/rot_handle_red_tri_0
new file mode 100644
index 000000000..007a08b47
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_red_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_red_vtx_0 b/assets/editor/gizmo/rot_handle_red_vtx_0
new file mode 100644
index 000000000..67db4777a
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_red_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rot_handle_red_vtx_cull b/assets/editor/gizmo/rot_handle_red_vtx_cull
new file mode 100644
index 000000000..b69eebd18
--- /dev/null
+++ b/assets/editor/gizmo/rot_handle_red_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rotate_handle_red b/assets/editor/gizmo/rotate_handle_red
new file mode 100644
index 000000000..88513071e
--- /dev/null
+++ b/assets/editor/gizmo/rotate_handle_red
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rotate_handle_red_tri_0 b/assets/editor/gizmo/rotate_handle_red_tri_0
new file mode 100644
index 000000000..27943e53d
--- /dev/null
+++ b/assets/editor/gizmo/rotate_handle_red_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rotate_handle_red_vtx_0 b/assets/editor/gizmo/rotate_handle_red_vtx_0
new file mode 100644
index 000000000..f8f03faec
--- /dev/null
+++ b/assets/editor/gizmo/rotate_handle_red_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/rotate_handle_red_vtx_cull b/assets/editor/gizmo/rotate_handle_red_vtx_cull
new file mode 100644
index 000000000..9d1c921ea
--- /dev/null
+++ b/assets/editor/gizmo/rotate_handle_red_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_blue b/assets/editor/gizmo/scale_handle_blue
new file mode 100644
index 000000000..747b4a306
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_blue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_blue_tri_0 b/assets/editor/gizmo/scale_handle_blue_tri_0
new file mode 100644
index 000000000..ca82d42f3
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_blue_tri_0
@@ -0,0 +1,616 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_blue_vtx_0 b/assets/editor/gizmo/scale_handle_blue_vtx_0
new file mode 100644
index 000000000..ec613fef4
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_blue_vtx_0
@@ -0,0 +1,2188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_blue_vtx_cull b/assets/editor/gizmo/scale_handle_blue_vtx_cull
new file mode 100644
index 000000000..46f8bcf67
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_blue_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_green b/assets/editor/gizmo/scale_handle_green
new file mode 100644
index 000000000..98debcbd3
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_green
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_green_tri_0 b/assets/editor/gizmo/scale_handle_green_tri_0
new file mode 100644
index 000000000..73d23cb0e
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_green_tri_0
@@ -0,0 +1,616 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_green_vtx_0 b/assets/editor/gizmo/scale_handle_green_vtx_0
new file mode 100644
index 000000000..ec613fef4
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_green_vtx_0
@@ -0,0 +1,2188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_green_vtx_cull b/assets/editor/gizmo/scale_handle_green_vtx_cull
new file mode 100644
index 000000000..46f8bcf67
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_green_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_red b/assets/editor/gizmo/scale_handle_red
new file mode 100644
index 000000000..0a580a47c
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_red
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_red_tri_0 b/assets/editor/gizmo/scale_handle_red_tri_0
new file mode 100644
index 000000000..24dc05a57
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_red_tri_0
@@ -0,0 +1,616 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_red_vtx_0 b/assets/editor/gizmo/scale_handle_red_vtx_0
new file mode 100644
index 000000000..ec613fef4
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_red_vtx_0
@@ -0,0 +1,2188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/scale_handle_red_vtx_cull b/assets/editor/gizmo/scale_handle_red_vtx_cull
new file mode 100644
index 000000000..46f8bcf67
--- /dev/null
+++ b/assets/editor/gizmo/scale_handle_red_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_blue b/assets/editor/gizmo/translate_handle_blue
new file mode 100644
index 000000000..88c829f14
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_blue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_blue_tri_0 b/assets/editor/gizmo/translate_handle_blue_tri_0
new file mode 100644
index 000000000..2839b8aa5
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_blue_tri_0
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_blue_vtx_0 b/assets/editor/gizmo/translate_handle_blue_vtx_0
new file mode 100644
index 000000000..4c6e5e6cc
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_blue_vtx_0
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_blue_vtx_cull b/assets/editor/gizmo/translate_handle_blue_vtx_cull
new file mode 100644
index 000000000..b8261c735
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_blue_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_green b/assets/editor/gizmo/translate_handle_green
new file mode 100644
index 000000000..3b5108be0
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_green
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_green_tri_0 b/assets/editor/gizmo/translate_handle_green_tri_0
new file mode 100644
index 000000000..9d59067db
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_green_tri_0
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_green_vtx_0 b/assets/editor/gizmo/translate_handle_green_vtx_0
new file mode 100644
index 000000000..4c6e5e6cc
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_green_vtx_0
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_green_vtx_cull b/assets/editor/gizmo/translate_handle_green_vtx_cull
new file mode 100644
index 000000000..b8261c735
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_green_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_red b/assets/editor/gizmo/translate_handle_red
new file mode 100644
index 000000000..bb3617b50
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_red
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_red_tri_0 b/assets/editor/gizmo/translate_handle_red_tri_0
new file mode 100644
index 000000000..b00c5bdac
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_red_tri_0
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_red_vtx_0 b/assets/editor/gizmo/translate_handle_red_vtx_0
new file mode 100644
index 000000000..4c6e5e6cc
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_red_vtx_0
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/gizmo/translate_handle_red_vtx_cull b/assets/editor/gizmo/translate_handle_red_vtx_cull
new file mode 100644
index 000000000..b8261c735
--- /dev/null
+++ b/assets/editor/gizmo/translate_handle_red_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_001 b/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_001
new file mode 100644
index 000000000..3777d1ffd
--- /dev/null
+++ b/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_001
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_002 b/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_002
new file mode 100644
index 000000000..c66f943e4
--- /dev/null
+++ b/assets/editor/light/mat_revert_sun_arrow_f3dlite_material_002
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/light/mat_sun_arrow_f3dlite_material_001 b/assets/editor/light/mat_sun_arrow_f3dlite_material_001
new file mode 100644
index 000000000..34b4eb120
--- /dev/null
+++ b/assets/editor/light/mat_sun_arrow_f3dlite_material_001
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/mat_sun_arrow_f3dlite_material_002 b/assets/editor/light/mat_sun_arrow_f3dlite_material_002
new file mode 100644
index 000000000..17888e0f7
--- /dev/null
+++ b/assets/editor/light/mat_sun_arrow_f3dlite_material_002
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/model.xml b/assets/editor/light/model.xml
new file mode 100644
index 000000000..6d2552b13
--- /dev/null
+++ b/assets/editor/light/model.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/sun_arrow b/assets/editor/light/sun_arrow
new file mode 100644
index 000000000..f8c6f4464
--- /dev/null
+++ b/assets/editor/light/sun_arrow
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/sun_arrow_tri_0 b/assets/editor/light/sun_arrow_tri_0
new file mode 100644
index 000000000..0ae24023f
--- /dev/null
+++ b/assets/editor/light/sun_arrow_tri_0
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/sun_arrow_vtx_0 b/assets/editor/light/sun_arrow_vtx_0
new file mode 100644
index 000000000..be560a299
--- /dev/null
+++ b/assets/editor/light/sun_arrow_vtx_0
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/light/sun_arrow_vtx_cull b/assets/editor/light/sun_arrow_vtx_cull
new file mode 100644
index 000000000..6d2552b13
--- /dev/null
+++ b/assets/editor/light/sun_arrow_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/water/mat_revert_water_plane_f3dlite_material b/assets/editor/water/mat_revert_water_plane_f3dlite_material
new file mode 100644
index 000000000..1ef36f4d6
--- /dev/null
+++ b/assets/editor/water/mat_revert_water_plane_f3dlite_material
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/editor/water/mat_water_plane_f3dlite_material b/assets/editor/water/mat_water_plane_f3dlite_material
new file mode 100644
index 000000000..f7b6a3573
--- /dev/null
+++ b/assets/editor/water/mat_water_plane_f3dlite_material
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/water/model.xml b/assets/editor/water/model.xml
new file mode 100644
index 000000000..2360521cf
--- /dev/null
+++ b/assets/editor/water/model.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/water/water_plane b/assets/editor/water/water_plane
new file mode 100644
index 000000000..9e9c96469
--- /dev/null
+++ b/assets/editor/water/water_plane
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/editor/water/water_plane_tri_0 b/assets/editor/water/water_plane_tri_0
new file mode 100644
index 000000000..58d340d48
--- /dev/null
+++ b/assets/editor/water/water_plane_tri_0
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/editor/water/water_plane_vtx_0 b/assets/editor/water/water_plane_vtx_0
new file mode 100644
index 000000000..c5d07be32
--- /dev/null
+++ b/assets/editor/water/water_plane_vtx_0
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/editor/water/water_plane_vtx_cull b/assets/editor/water/water_plane_vtx_cull
new file mode 100644
index 000000000..2360521cf
--- /dev/null
+++ b/assets/editor/water/water_plane_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/gizmo_center_button b/assets/gizmo/gizmo_center_button
new file mode 100644
index 000000000..4ca243c28
--- /dev/null
+++ b/assets/gizmo/gizmo_center_button
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/gizmo_center_button_tri_0 b/assets/gizmo/gizmo_center_button_tri_0
new file mode 100644
index 000000000..f7a3b43b8
--- /dev/null
+++ b/assets/gizmo/gizmo_center_button_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/gizmo_center_button_vtx_0 b/assets/gizmo/gizmo_center_button_vtx_0
new file mode 100644
index 000000000..0b8d6dd8e
--- /dev/null
+++ b/assets/gizmo/gizmo_center_button_vtx_0
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/gizmo_center_button_vtx_cull b/assets/gizmo/gizmo_center_button_vtx_cull
new file mode 100644
index 000000000..d5f18ef74
--- /dev/null
+++ b/assets/gizmo/gizmo_center_button_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/mat_gizmo_center_button_gizmo_center_button b/assets/gizmo/mat_gizmo_center_button_gizmo_center_button
new file mode 100644
index 000000000..1ea35f31f
--- /dev/null
+++ b/assets/gizmo/mat_gizmo_center_button_gizmo_center_button
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/mat_scale_handle_f3dlite_material b/assets/gizmo/mat_scale_handle_f3dlite_material
new file mode 100644
index 000000000..47b261432
--- /dev/null
+++ b/assets/gizmo/mat_scale_handle_f3dlite_material
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/model.xml b/assets/gizmo/model.xml
new file mode 100644
index 000000000..d5f18ef74
--- /dev/null
+++ b/assets/gizmo/model.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/scale_handle b/assets/gizmo/scale_handle
new file mode 100644
index 000000000..744fa12eb
--- /dev/null
+++ b/assets/gizmo/scale_handle
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/scale_handle_tri_0 b/assets/gizmo/scale_handle_tri_0
new file mode 100644
index 000000000..5e455d62f
--- /dev/null
+++ b/assets/gizmo/scale_handle_tri_0
@@ -0,0 +1,616 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/scale_handle_vtx_0 b/assets/gizmo/scale_handle_vtx_0
new file mode 100644
index 000000000..4feb40577
--- /dev/null
+++ b/assets/gizmo/scale_handle_vtx_0
@@ -0,0 +1,2188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/gizmo/scale_handle_vtx_cull b/assets/gizmo/scale_handle_vtx_cull
new file mode 100644
index 000000000..bb573d8df
--- /dev/null
+++ b/assets/gizmo/scale_handle_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/gradientbottom.rgba16 b/assets/hmintro/gradientbottom.rgba16
new file mode 100644
index 000000000..b2c6f1480
Binary files /dev/null and b/assets/hmintro/gradientbottom.rgba16 differ
diff --git a/assets/hmintro/lusgrade.rgba16 b/assets/hmintro/lusgrade.rgba16
new file mode 100644
index 000000000..246fcf90c
Binary files /dev/null and b/assets/hmintro/lusgrade.rgba16 differ
diff --git a/assets/hmintro/mat_poweredbylus_lus b/assets/hmintro/mat_poweredbylus_lus
new file mode 100644
index 000000000..287b97013
--- /dev/null
+++ b/assets/hmintro/mat_poweredbylus_lus
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/mat_poweredbylus_power b/assets/hmintro/mat_poweredbylus_power
new file mode 100644
index 000000000..eb3fca30b
--- /dev/null
+++ b/assets/hmintro/mat_poweredbylus_power
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/mat_revert_poweredbylus_lus b/assets/hmintro/mat_revert_poweredbylus_lus
new file mode 100644
index 000000000..1ef36f4d6
--- /dev/null
+++ b/assets/hmintro/mat_revert_poweredbylus_lus
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/hmintro/mat_revert_poweredbylus_power b/assets/hmintro/mat_revert_poweredbylus_power
new file mode 100644
index 000000000..14334454e
--- /dev/null
+++ b/assets/hmintro/mat_revert_poweredbylus_power
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus b/assets/hmintro/poweredbylus
new file mode 100644
index 000000000..3147c24de
--- /dev/null
+++ b/assets/hmintro/poweredbylus
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus_tri_0 b/assets/hmintro/poweredbylus_tri_0
new file mode 100644
index 000000000..b7b344620
--- /dev/null
+++ b/assets/hmintro/poweredbylus_tri_0
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus_tri_1 b/assets/hmintro/poweredbylus_tri_1
new file mode 100644
index 000000000..d10e73029
--- /dev/null
+++ b/assets/hmintro/poweredbylus_tri_1
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus_vtx_0 b/assets/hmintro/poweredbylus_vtx_0
new file mode 100644
index 000000000..c700fb5a3
--- /dev/null
+++ b/assets/hmintro/poweredbylus_vtx_0
@@ -0,0 +1,689 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus_vtx_1 b/assets/hmintro/poweredbylus_vtx_1
new file mode 100644
index 000000000..346425109
--- /dev/null
+++ b/assets/hmintro/poweredbylus_vtx_1
@@ -0,0 +1,751 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/hmintro/poweredbylus_vtx_cull b/assets/hmintro/poweredbylus_vtx_cull
new file mode 100644
index 000000000..acbd4e9f6
--- /dev/null
+++ b/assets/hmintro/poweredbylus_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shaders/directx/default.shader.hlsl b/assets/shaders/directx/default.shader.hlsl
new file mode 100644
index 000000000..f36c2daed
--- /dev/null
+++ b/assets/shaders/directx/default.shader.hlsl
@@ -0,0 +1,332 @@
+@prism(type='hlsl', name='Fast3D HLSL Shader', version='1.0.0', description='Ported shader to prism', author='Emill & Prism Team')
+
+@if(o_root_signature)
+ @if(o_textures[0])
+ #define RS "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | DENY_VERTEX_SHADER_ROOT_ACCESS), CBV(b0, visibility = SHADER_VISIBILITY_PIXEL), DescriptorTable(SRV(t0), visibility = SHADER_VISIBILITY_PIXEL), DescriptorTable(Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL)"
+ @end
+ @if(o_textures[1])
+ #define RS "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | DENY_VERTEX_SHADER_ROOT_ACCESS), CBV(b0, visibility = SHADER_VISIBILITY_PIXEL), DescriptorTable(SRV(t1), visibility = SHADER_VISIBILITY_PIXEL), DescriptorTable(Sampler(s1), visibility = SHADER_VISIBILITY_PIXEL)"
+ @end
+@end
+
+struct PSInput {
+ float4 position : SV_POSITION;
+@for(i in 0..2)
+ @if(o_textures[i])
+ float2 uv@{i} : TEXCOORD@{i};
+ @{update_floats(2)}
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ float texClampS@{i} : TEXCLAMPS@{i};
+ @else
+ float texClampT@{i} : TEXCLAMPT@{i};
+ @end
+ @{update_floats(1)}
+ @end
+ @end
+ @end
+@end
+
+@if(o_fog)
+float4 fog : FOG;
+@{update_floats(4)}
+@end
+@if(o_grayscale)
+float4 grayscale : GRAYSCALE;
+@{update_floats(4)}
+@end
+
+@for(i in 0..o_inputs)
+ @if(o_alpha)
+ float4 input@{i + 1} : INPUT@{i};
+ @{update_floats(4)}
+ @else
+ float3 input@{i + 1} : INPUT@{i};
+ @{update_floats(3)}
+ @end
+@end
+};
+
+@if(o_textures[0])
+ Texture2D g_texture0 : register(t0);
+ SamplerState g_sampler0 : register(s0);
+@end
+@if(o_textures[1])
+ Texture2D g_texture1 : register(t1);
+ SamplerState g_sampler1 : register(s1);
+@end
+
+@if(o_masks[0]) Texture2D g_textureMask0 : register(t2);
+@if(o_masks[1]) Texture2D g_textureMask1 : register(t3);
+
+@if(o_blend[0]) Texture2D g_textureBlend0 : register(t4);
+@if(o_blend[1]) Texture2D g_textureBlend1 : register(t5);
+
+cbuffer PerFrameCB : register(b0) {
+ uint noise_frame;
+ float noise_scale;
+}
+
+float random(in float3 value) {
+ float random = dot(value, float3(12.9898, 78.233, 37.719));
+ return frac(sin(random) * 143758.5453);
+}
+
+// 3 point texture filtering
+// Original author: ArthurCarvalho
+// Based on GLSL implementation by twinaphex, mupen64plus-libretro project.
+
+@if(o_three_point_filtering && o_textures[0] || o_textures[1])
+cbuffer PerDrawCB : register(b1) {
+ struct {
+ uint width;
+ uint height;
+ bool linear_filtering;
+ } textures[2];
+}
+
+#define TEX_OFFSET(tex, tSampler, texCoord, off, texSize) tex.Sample(tSampler, texCoord - off / texSize)
+
+float4 tex2D3PointFilter(in Texture2D tex, in SamplerState tSampler, in float2 texCoord, in float2 texSize) {
+ float2 offset = frac(texCoord * texSize - float2(0.5, 0.5));
+ offset -= step(1.0, offset.x + offset.y);
+ float4 c0 = TEX_OFFSET(tex, tSampler, texCoord, offset, texSize);
+ float4 c1 = TEX_OFFSET(tex, tSampler, texCoord, float2(offset.x - sign(offset.x), offset.y), texSize);
+ float4 c2 = TEX_OFFSET(tex, tSampler, texCoord, float2(offset.x, offset.y - sign(offset.y)), texSize);
+ return c0 + abs(offset.x)*(c1-c0) + abs(offset.y)*(c2-c0);
+}
+@end
+
+PSInput VSMain(
+ float4 position : POSITION
+@for(i in 0..2)
+ @if(o_textures[i])
+ , float2 uv@{i} : TEXCOORD@{i}
+ @end
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ , float texClampS@{i} : TEXCLAMPS@{i}
+ @else
+ , float texClampT@{i} : TEXCLAMPT@{i}
+ @end
+ @end
+ @end
+@end
+@if(o_fog)
+ , float4 fog : FOG
+@end
+@if(o_grayscale)
+ , float4 grayscale : GRAYSCALE
+@end
+@for(i in 0..o_inputs)
+ @if(o_alpha)
+ , float4 input@{i + 1} : INPUT@{i}
+ @else
+ , float3 input@{i + 1} : INPUT@{i}
+ @end
+@end
+) {
+ PSInput result;
+ result.position = position;
+ @for(i in 0..2)
+ @if(o_textures[i])
+ result.uv@{i} = uv@{i};
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ result.texClampS@{i} = texClampS@{i};
+ @else
+ result.texClampT@{i} = texClampT@{i};
+ @end
+ @end
+ @end
+ @end
+ @end
+
+ @if(o_fog)
+ result.fog = fog;
+ @end
+
+ @if(o_grayscale)
+ result.grayscale = grayscale;
+ @end
+
+ @for(i in 0..o_inputs)
+ @if(o_alpha)
+ result.input@{i + 1} = input@{i + 1};
+ @else
+ result.input@{i + 1} = float4(input@{i + 1}, 1.0);
+ @end
+ @end
+
+ return result;
+}
+
+@if(o_root_signature)
+ [RootSignature(RS)]
+@end
+
+@if(srgb_mode)
+ float4 fromLinear(float4 linearRGB){
+ bool3 cutoff = linearRGB.rgb < float3(0.0031308, 0.0031308, 0.0031308);
+ float3 higher = 1.055 * pow(linearRGB.rgb, float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) - float3(0.055, 0.055, 0.055);
+ float3 lower = linearRGB.rgb * float3(12.92, 12.92, 12.92);
+ return float4(lerp(higher, lower, cutoff), linearRGB.a);
+ }
+@end
+
+#define MOD(x, y) ((x) - (y) * floor((x)/(y)))
+#define WRAP(x, low, high) MOD((x)-(low), (high)-(low)) + (low)
+
+float4 PSMain(PSInput input, float4 screenSpace : SV_Position) : SV_TARGET {
+ @for(i in 0..2)
+ @if(o_textures[i])
+ float2 tc@{i} = input.uv@{i};
+ @{s = o_clamp[i][0]}
+ @{t = o_clamp[i][1]}
+ @if(s && t)
+ int2 texSize@{i};
+ g_texture@{i}.GetDimensions(texSize@{i}.x, texSize@{i}.y);
+ @if(s && t)
+ tc@{i} = clamp(tc@{i}, 0.5 / texSize@{i}, float2(input.texClampS@{i}, input.texClampT@{i}));
+ @elseif(s)
+ tc@{i} = float2(clamp(tc@{i}.x, 0.5 / texSize@{i}.x, input.texClampS@{i}), tc@{i}.y);
+ @else
+ tc@{i} = float2(tc@{i}.x, clamp(tc@{i}.y, 0.5 / texSize@{i}.y, input.texClampT@{i}));
+ @end
+ @end
+
+ @if(o_three_point_filtering)
+ float4 texVal@{i};
+ if (textures[@{i}].linear_filtering) {
+ @if(o_masks[i])
+ texVal@{i} = tex2D3PointFilter(g_texture@{i}, g_sampler@{i}, tc@{i}, float2(textures[@{i}].width, textures[@{i}].height));
+ float2 maskSize@{i};
+ g_textureMask@{i}.GetDimensions(maskSize@{i}.x, maskSize@{i}.y);
+ float4 maskVal@{i} = tex2D3PointFilter(g_textureMask@{i}, g_sampler@{i}, tc@{i}, maskSize@{i});
+ @if(o_blend[i])
+ float4 blendVal@{i} = tex2D3PointFilter(g_textureBlend@{i}, g_sampler@{i}, tc@{i}, float2(textures[@{i}].width, textures[@{i}].height));
+ @else
+ float4 blendVal@{i} = float4(0, 0, 0, 0);
+ @end
+
+ texVal@{i} = lerp(texVal@{i}, blendVal@{i}, maskVal@{i}.a);
+ @else
+ texVal@{i} = tex2D3PointFilter(g_texture@{i}, g_sampler@{i}, tc@{i}, float2(textures[@{i}].width, textures[@{i}].height));
+ @end
+ } else {
+ texVal@{i} = g_texture@{i}.Sample(g_sampler@{i}, tc@{i});
+ @if(o_masks[i])
+ @if(o_blend[i])
+ float4 blendVal@{i} = g_textureBlend@{i}.Sample(g_sampler@{i}, tc@{i});
+ @else
+ float4 blendVal@{i} = float4(0, 0, 0, 0);
+ @end
+ texval@{i} = lerp(texVal@{i}, blendVal@{i}, g_textureMask@{i}.Sample(g_sampler@{i}, tc@{i}).a);
+ @end
+ }
+ @else
+ float4 texVal@{i} = g_texture@{i}.Sample(g_sampler@{i}, tc@{i});
+ @if(o_masks[i])
+ @if(o_blend[i])
+ float4 blendVal@{i} = g_textureBlend@{i}.Sample(g_sampler@{i}, tc@{i});
+ @else
+ float4 blendVal@{i} = float4(0, 0, 0, 0);
+ @end
+ texVal@{i} = lerp(texVal@{i}, blendVal@{i}, g_textureMask@{i}.Sample(g_sampler@{i}, tc@{i}).a);
+ @end
+ @end
+ @end
+ @end
+
+ @if(o_alpha)
+ float4 texel;
+ @else
+ float3 texel;
+ @end
+
+ @if(o_2cyc)
+ @{f_range = 2}
+ @else
+ @{f_range = 1}
+ @end
+
+ @for(c in 0..f_range)
+ @if(c == 1)
+ @if(o_alpha)
+ @if(o_c[c][1][2] == SHADER_COMBINED)
+ texel.a = WRAP(texel.a, -1.01, 1.01);
+ @else
+ texel.a = WRAP(texel.a, -0.51, 1.51);
+ @end
+ @end
+
+ @if(o_c[c][0][2] == SHADER_COMBINED)
+ texel.rgb = WRAP(texel.rgb, -1.01, 1.01);
+ @else
+ texel.rgb = WRAP(texel.rgb, -0.51, 1.51);
+ @end
+ @end
+
+ @if(!o_color_alpha_same[c] && o_alpha)
+ texel = float4(@{
+ append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], false, false, true, c == 0)
+ }, @{append_formula(o_c[c], o_do_single[c][1],
+ o_do_multiply[c][1], o_do_mix[c][1], true, true, true, c == 0)
+ });
+ @else
+ texel = @{append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], o_alpha, false,
+ o_alpha, c == 0)};
+ @end
+ @end
+
+ @if(o_texture_edge && o_alpha)
+ if (texel.a > 0.19) texel.a = 1.0; else discard;
+ @end
+
+ texel = WRAP(texel, -0.51, 1.51);
+ texel = clamp(texel, 0.0, 1.0);
+ // TODO discard if alpha is 0?
+ @if(o_fog)
+ @if(o_alpha)
+ texel = float4(lerp(texel.rgb, input.fog.rgb, input.fog.a), texel.a);
+ @else
+ texel = lerp(texel, input.fog.rgb, input.fog.a);
+ @end
+ @end
+
+ @if(o_grayscale)
+ float intensity = (texel.r + texel.g + texel.b) / 3.0;
+ float3 new_texel = input.grayscale.rgb * intensity;
+ texel.rgb = lerp(texel.rgb, new_texel, input.grayscale.a);
+ @end
+
+ @if(o_alpha && o_noise)
+ float2 coords = screenSpace.xy * noise_scale;
+ texel.a *= round(saturate(random(float3(floor(coords), noise_frame)) + texel.a - 0.5));
+ @end
+
+ @if(o_alpha)
+ @if(o_alpha_threshold)
+ if (texel.a < 8.0 / 256.0) discard;
+ @end
+ @if(o_invisible)
+ texel.a = 0.0;
+ @end
+ @if(srgb_mode)
+ return fromLinear(texel);
+ @else
+ return texel;
+ @end
+ @else
+ @if(srgb_mode)
+ return fromLinear(float4(texel, 1.0));
+ @else
+ return float4(texel, 1.0);
+ @end
+ @end
+}
\ No newline at end of file
diff --git a/assets/shaders/metal/default.shader.metal b/assets/shaders/metal/default.shader.metal
new file mode 100644
index 000000000..63d89fd39
--- /dev/null
+++ b/assets/shaders/metal/default.shader.metal
@@ -0,0 +1,295 @@
+@prism(type='metal', name='Fast3D Metal Shader', version='1.0.0', description='Ported shader to prism', author='Emill & Prism Team')
+
+#include
+using namespace metal;
+
+// BEGIN VERTEX SHADER
+struct FrameUniforms {
+ int frameCount;
+ float noiseScale;
+};
+
+struct Vertex {
+ float4 position [[attribute(@{get_vertex_index()})]];
+ @{update_floats(4)}
+ @for(i in 0..2)
+ @if(o_textures[i])
+ float2 texCoord@{i} [[attribute(@{get_vertex_index()})]];
+ @{update_floats(2)}
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ float texClampS@{i} [[attribute(@{get_vertex_index()})]];
+ @else
+ float texClampT@{i} [[attribute(@{get_vertex_index()})]];
+ @end
+ @{update_floats(1)}
+ @end
+ @end
+ @end
+ @end
+ @if(o_fog)
+ float4 fog [[attribute(@{get_vertex_index()})]];
+ @{update_floats(4)}
+ @end
+ @if(o_grayscale)
+ float4 grayscale [[attribute(@{get_vertex_index()})]];
+ @{update_floats(4)}
+ @end
+ @for(i in 0..o_inputs)
+ @if(o_alpha)
+ float4 input@{i + 1} [[attribute(@{get_vertex_index()})]];
+ @{update_floats(4)}
+ @else
+ float3 input@{i + 1} [[attribute(@{get_vertex_index()})]];
+ @{update_floats(3)}
+ @end
+ @end
+};
+
+struct ProjectedVertex {
+ @for(i in 0..2)
+ @if(o_textures[i])
+ float2 texCoord@{i};
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ float texClampS@{i};
+ @else
+ float texClampT@{i};
+ @end
+ @end
+ @end
+ @end
+ @end
+ @if(o_fog)
+ float4 fog;
+ @end
+ @if(o_grayscale)
+ float4 grayscale;
+ @end
+ @for(i in 0..o_inputs)
+ @if(o_alpha)
+ float4 input@{i + 1};
+ @else
+ float3 input@{i + 1};
+ @end
+ @end
+ float4 position [[position]];
+};
+
+vertex ProjectedVertex vertexShader(Vertex in [[stage_in]]) {
+ ProjectedVertex out;
+ @for(i in 0..2)
+ @if(o_textures[i])
+ out.texCoord@{i} = in.texCoord@{i};
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ out.texClampS@{i} = in.texClampS@{i};
+ @else
+ out.texClampT@{i} = in.texClampT@{i};
+ @end
+ @end
+ @end
+ @end
+ @end
+ @if(o_fog)
+ out.fog = in.fog;
+ @end
+ @if(o_grayscale)
+ out.grayscale = in.grayscale;
+ @end
+ @for(i in 0..o_inputs)
+ out.input@{i + 1} = in.input@{i + 1};
+ @end
+ out.position = in.position;
+ return out;
+}
+// END - BEGIN FRAGMENT SHADER
+
+float mod(float x, float y) {
+ return float(x - y * floor(x / y));
+}
+
+float3 mod(float3 a, float3 b) {
+ return float3(a.x - b.x * floor(a.x / b.x), a.y - b.y * floor(a.y / b.y), a.z - b.z * floor(a.z / b.z));
+}
+
+float4 mod(float4 a, float4 b) {
+ return float4(a.x - b.x * floor(a.x / b.x), a.y - b.y * floor(a.y / b.y), a.z - b.z * floor(a.z / b.z), a.w - b.w * floor(a.w / b.w));
+}
+
+#define WRAP(x, low, high) mod((x)-(low), (high)-(low)) + (low)
+#define TEX_OFFSET(tex, texSmplr, texCoord, off, texSize) tex.sample(texSmplr, texCoord - off / texSize)
+
+@if(o_three_point_filtering)
+ float4 filter3point(thread const texture2d tex, thread const sampler texSmplr, thread const float2& texCoord, thread const float2& texSize) {
+ float2 offset = fract((texCoord * texSize) - float2(0.5));
+ offset -= float2(step(1.0, offset.x + offset.y));
+ float4 c0 = TEX_OFFSET(tex, texSmplr, texCoord, offset, texSize);
+ float4 c1 = TEX_OFFSET(tex, texSmplr, texCoord, float2(offset.x - sign(offset.x), offset.y), texSize);
+ float4 c2 = TEX_OFFSET(tex, texSmplr, texCoord, float2(offset.x, offset.y - sign(offset.y)), texSize);
+ return c0 + abs(offset.x) * (c1 - c0) + abs(offset.y) * (c2 - c0);
+ }
+
+ float4 hookTexture2D(thread const texture2d tex, thread const sampler texSmplr, thread const float2& uv, thread const float2& texSize) {
+ return filter3point(tex, texSmplr, uv, texSize);
+ }
+@else
+ float4 hookTexture2D(thread const texture2d tex, thread const sampler texSmplr, thread const float2& uv, thread const float2& texSize) {
+ return tex.sample(texSmplr, uv);
+ }
+@end
+
+float random(float3 value) {
+ float random = dot(sin(value), float3(12.9898, 78.233, 37.719));
+ return fract(sin(random) * 143758.5453);
+}
+
+float4 fromLinear(float4 linearRGB) {
+ float3 threshold = float3(0.0031308);
+ float3 gamma = float3(1.0 / 2.4);
+ float3 scale = float3(12.92);
+ float3 offset = float3(1.055);
+ float3 subtract = float3(0.055);
+ float3 higher = offset * fast::pow(linearRGB.xyz, gamma) - subtract;
+ float3 lower = linearRGB.xyz * scale;
+ return float4(select(higher, lower, linearRGB.xyz < threshold), linearRGB.w);
+}
+
+fragment float4 fragmentShader(ProjectedVertex in [[stage_in]], constant FrameUniforms &frameUniforms [[buffer(0)]]
+@if(o_textures[0])
+ , texture2d uTex0 [[texture(0)]], sampler uTex0Smplr [[sampler(0)]]
+@end
+@if(o_textures[1])
+ , texture2d uTex1 [[texture(1)]], sampler uTex1Smplr [[sampler(1)]]
+@end
+@if(o_masks[0])
+ , texture2d uTexMask0 [[texture(2)]]
+@end
+@if(o_masks[1])
+ , texture2d uTexMask1 [[texture(3)]]
+@end
+@if(o_blend[0])
+ , texture2d uTexBlend0 [[texture(4)]]
+@end
+@if(o_blend[1])
+ , texture2d uTexBlend1 [[texture(5)]]
+@end
+) {
+ @for(i in 0..2)
+ @if(o_textures[i])
+ @{s = o_clamp[i][0]}
+ @{t = o_clamp[i][1]}
+ float2 texSize@{i} = float2(uTex@{i}.get_width(), uTex@{i}.get_height());
+ @if(!s && !t)
+ float2 vTexCoordAdj@{i} = in.texCoord@{i};
+ @else
+ @if(s && t)
+ float2 vTexCoordAdj@{i} = fast::clamp(in.texCoord@{i}, float2(0.5) / texSize@{i}, float2(in.texClampS@{i}, in.texClampT@{i}));
+ @elseif(s)
+ float2 vTexCoordAdj@{i} = float2(fast::clamp(in.texCoord@{i}.x, 0.5 / texSize@{i}.x, in.texClampS@{i}), in.texCoord@{i}.y);
+ @else
+ float2 vTexCoordAdj@{i} = float2(in.texCoord@{i}.x, fast::clamp(in.texCoord@{i}.y, 0.5 / texSize@{i}.y, in.texClampT@{i}));
+ @end
+ @end
+
+ float4 texVal@{i} = hookTexture2D(uTex@{i}, uTex@{i}Smplr, vTexCoordAdj@{i}, texSize@{i});
+
+ @if(o_masks[i])
+ float2 maskSize@{i} = float2(uTexMask@{i}.get_width(), uTexMask@{i}.get_height());
+ float4 maskVal@{i} = hookTexture2D(uTexMask@{i}, uTex@{i}Smplr, vTexCoordAdj@{i}, maskSize@{i});
+ @if(o_blend[i])
+ float4 blendVal@{i} = hookTexture2D(uTexBlend@{i}, uTex@{i}Smplr, vTexCoordAdj@{i}, texSize@{i});
+ @else
+ float4 blendVal@{i} = float4(0, 0, 0, 0);
+ @end
+
+ texVal@{i} = mix(texVal@{i}, blendVal@{i}, maskVal@{i}.w);
+ @end
+ @end
+ @end
+
+ @if(o_alpha)
+ float4 texel;
+ @else
+ float3 texel;
+ @end
+
+ @if(o_2cyc)
+ @{f_range = 2}
+ @else
+ @{f_range = 1}
+ @end
+
+ @for(c in 0..f_range)
+ @if(c == 1)
+ @if(o_alpha)
+ @if(o_c[c][1][2] == SHADER_COMBINED)
+ texel.w = WRAP(texel.w, -1.01, 1.01);
+ @else
+ texel.w = WRAP(texel.w, -0.51, 1.51);
+ @end
+ @end
+
+ @if(o_c[c][0][2] == SHADER_COMBINED)
+ texel.xyz = WRAP(texel.xyz, -1.01, 1.01);
+ @else
+ texel.xyz = WRAP(texel.xyz, -0.51, 1.51);
+ @end
+ @end
+
+ @if(!o_color_alpha_same[c] && o_alpha)
+ texel = float4(@{
+ append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], false, false, true, c == 0)
+ }, @{append_formula(o_c[c], o_do_single[c][1],
+ o_do_multiply[c][1], o_do_mix[c][1], true, true, true, c == 0)
+ });
+ @else
+ texel = @{append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], o_alpha, false,
+ o_alpha, c == 0)};
+ @end
+ @end
+
+ @if(o_texture_edge && o_alpha)
+ if (texel.w > 0.19) texel.w = 1.0; else discard_fragment();
+ @end
+
+ texel = WRAP(texel, -0.51, 1.51);
+ texel = clamp(texel, 0.0, 1.0);
+ // TODO discard if alpha is 0?
+
+ @if(o_fog)
+ @if(o_alpha)
+ texel = float4(mix(texel.xyz, in.fog.xyz, in.fog.w), texel.w);
+ @else
+ texel = mix(texel, in.fog.xyz, in.fog.w);
+ @end
+ @end
+
+ @if(o_grayscale)
+ float intensity = (texel.x + texel.y + texel.z) / 3.0;
+ float3 new_texel = in.grayscale.xyz * intensity;
+ texel.xyz = mix(texel.xyz, new_texel, in.grayscale.w);
+ @end
+
+ @if(o_alpha && o_noise)
+ float2 coords = screenSpace.xy * noise_scale;
+ texel.w *= round(saturate(random(float3(floor(coords), noise_frame)) + texel.w - 0.5));
+ @end
+
+ @if(o_alpha)
+ @if(o_alpha_threshold)
+ if (texel.w < 8.0 / 256.0) discard_fragment();
+ @end
+ @if(o_invisible)
+ texel.w = 0.0;
+ @end
+ return fromLinear(texel);
+ @else
+ return fromLinear(float4(texel, 1.0));
+ @end
+}
\ No newline at end of file
diff --git a/assets/shaders/opengl/default.shader.fs b/assets/shaders/opengl/default.shader.fs
new file mode 100644
index 000000000..b15e1598c
--- /dev/null
+++ b/assets/shaders/opengl/default.shader.fs
@@ -0,0 +1,210 @@
+@prism(type='fragment', name='Fast3D Fragment Shader', version='1.0.0', description='Ported shader to prism', author='Emill & Prism Team')
+
+@{GLSL_VERSION}
+
+@if(core_opengl || opengles)
+out vec4 vOutColor;
+@end
+
+@for(i in 0..2)
+ @if(o_textures[i])
+ @{attr} vec2 vTexCoord@{i};
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ @{attr} float vTexClampS@{i};
+ @else
+ @{attr} float vTexClampT@{i};
+ @end
+ @end
+ @end
+ @end
+@end
+
+@if(o_fog) @{attr} vec4 vFog;
+@if(o_grayscale) @{attr} vec4 vGrayscaleColor;
+
+@for(i in 0..o_inputs)
+ @if(o_alpha)
+ @{attr} vec4 vInput@{i + 1};
+ @else
+ @{attr} vec3 vInput@{i + 1};
+ @end
+@end
+
+@if(o_textures[0]) uniform sampler2D uTex0;
+@if(o_textures[1]) uniform sampler2D uTex1;
+
+@if(o_masks[0]) uniform sampler2D uTexMask0;
+@if(o_masks[1]) uniform sampler2D uTexMask1;
+
+@if(o_blend[0]) uniform sampler2D uTexBlend0;
+@if(o_blend[1]) uniform sampler2D uTexBlend1;
+
+uniform int frame_count;
+uniform float noise_scale;
+
+#define TEX_OFFSET(off) @{texture}(tex, texCoord - off / texSize)
+#define WRAP(x, low, high) mod((x)-(low), (high)-(low)) + (low)
+
+float random(in vec3 value) {
+ float random = dot(sin(value), vec3(12.9898, 78.233, 37.719));
+ return fract(sin(random) * 143758.5453);
+}
+
+vec4 fromLinear(vec4 linearRGB){
+ bvec3 cutoff = lessThan(linearRGB.rgb, vec3(0.0031308));
+ vec3 higher = vec3(1.055)*pow(linearRGB.rgb, vec3(1.0/2.4)) - vec3(0.055);
+ vec3 lower = linearRGB.rgb * vec3(12.92);
+ return vec4(mix(higher, lower, cutoff), linearRGB.a);
+}
+
+@if(o_current_filter == FILTER_THREE_POINT)
+vec4 filter3point(in sampler2D tex, in vec2 texCoord, in vec2 texSize) {
+ vec2 offset = fract(texCoord*texSize - vec2(0.5));
+ offset -= step(1.0, offset.x + offset.y);
+ vec4 c0 = TEX_OFFSET(offset);
+ vec4 c1 = TEX_OFFSET(vec2(offset.x - sign(offset.x), offset.y));
+ vec4 c2 = TEX_OFFSET(vec2(offset.x, offset.y - sign(offset.y)));
+ return c0 + abs(offset.x)*(c1-c0) + abs(offset.y)*(c2-c0);
+}
+
+vec4 hookTexture2D(in sampler2D tex, in vec2 uv, in vec2 texSize) {
+ return filter3point(tex, uv, texSize);
+}
+@else
+vec4 hookTexture2D(in sampler2D tex, in vec2 uv, in vec2 texSize) {
+ return @{texture}(tex, uv);
+}
+@end
+
+void main() {
+ @for(i in 0..2)
+ @if(o_textures[i])
+ @{s = o_clamp[i][0]}
+ @{t = o_clamp[i][1]}
+
+ @if(opengles)
+ vec2 texSize@{i} = vec2(textureSize(uTex@{i}, 0));
+ @else
+ vec2 texSize@{i} = textureSize(uTex@{i}, 0);
+ @end
+
+ @if(!s && !t)
+ vec2 vTexCoordAdj@{i} = vTexCoord@{i};
+ @else
+ @if(s && t)
+ vec2 vTexCoordAdj@{i} = clamp(vTexCoord@{i}, 0.5 / texSize@{i}, vec2(vTexClampS@{i}, vTexClampT@{i}));
+ @elseif(s)
+ vec2 vTexCoordAdj@{i} = vec2(clamp(vTexCoord@{i}.s, 0.5 / texSize@{i}.s, vTexClampS@{i}), vTexCoord@{i}.t);
+ @else
+ vec2 vTexCoordAdj@{i} = vec2(vTexCoord@{i}.s, clamp(vTexCoord@{i}.t, 0.5 / texSize@{i}.t, vTexClampT@{i}));
+ @end
+ @end
+
+ vec4 texVal@{i} = hookTexture2D(uTex@{i}, vTexCoordAdj@{i}, texSize@{i});
+
+ @if(o_masks[i])
+ @if(opengles)
+ vec2 maskSize@{i} = vec2(textureSize(uTexMask@{i}, 0));
+ @else
+ vec2 maskSize@{i} = textureSize(uTexMask@{i}, 0);
+ @end
+
+ vec4 maskVal@{i} = hookTexture2D(uTexMask@{i}, vTexCoordAdj@{i}, maskSize@{i});
+
+ @if(o_blend[i])
+ vec4 blendVal@{i} = hookTexture2D(uTexBlend@{i}, vTexCoordAdj@{i}, texSize@{i});
+ @else
+ vec4 blendVal@{i} = vec4(0, 0, 0, 0);
+ @end
+
+ texVal@{i} = mix(texVal@{i}, blendVal@{i}, maskVal@{i}.a);
+ @end
+ @end
+ @end
+
+ @if(o_alpha)
+ vec4 texel;
+ @else
+ vec3 texel;
+ @end
+
+ @if(o_2cyc)
+ @{f_range = 2}
+ @else
+ @{f_range = 1}
+ @end
+
+ @for(c in 0..f_range)
+ @if(c == 1)
+ @if(o_alpha)
+ @if(o_c[c][1][2] == SHADER_COMBINED)
+ texel.a = WRAP(texel.a, -1.01, 1.01);
+ @else
+ texel.a = WRAP(texel.a, -0.51, 1.51);
+ @end
+ @end
+
+ @if(o_c[c][0][2] == SHADER_COMBINED)
+ texel.rgb = WRAP(texel.rgb, -1.01, 1.01);
+ @else
+ texel.rgb = WRAP(texel.rgb, -0.51, 1.51);
+ @end
+ @end
+
+ @if(!o_color_alpha_same[c] && o_alpha)
+ texel = vec4(@{
+ append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], false, false, true, c == 0)
+ }, @{append_formula(o_c[c], o_do_single[c][1],
+ o_do_multiply[c][1], o_do_mix[c][1], true, true, true, c == 0)
+ });
+ @else
+ texel = @{append_formula(o_c[c], o_do_single[c][0],
+ o_do_multiply[c][0], o_do_mix[c][0], o_alpha, false,
+ o_alpha, c == 0)};
+ @end
+ @end
+
+ texel = WRAP(texel, -0.51, 1.51);
+ texel = clamp(texel, 0.0, 1.0);
+ // TODO discard if alpha is 0?
+ @if(o_fog)
+ @if(o_alpha)
+ texel = vec4(mix(texel.rgb, vFog.rgb, vFog.a), texel.a);
+ @else
+ texel = mix(texel, vFog.rgb, vFog.a);
+ @end
+ @end
+
+ @if(o_texture_edge && o_alpha)
+ if (texel.a > 0.19) texel.a = 1.0; else discard;
+ @end
+
+ @if(o_alpha && o_noise)
+ texel.a *= floor(clamp(random(vec3(floor(gl_FragCoord.xy * noise_scale), float(frame_count))) + texel.a, 0.0, 1.0));
+ @end
+
+ @if(o_grayscale)
+ float intensity = (texel.r + texel.g + texel.b) / 3.0;
+ vec3 new_texel = vGrayscaleColor.rgb * intensity;
+ texel.rgb = mix(texel.rgb, new_texel, vGrayscaleColor.a);
+ @end
+
+ @if(o_alpha)
+ @if(o_alpha_threshold)
+ if (texel.a < 8.0 / 256.0) discard;
+ @end
+ @if(o_invisible)
+ texel.a = 0.0;
+ @end
+ @{vOutColor} = texel;
+ @else
+ @{vOutColor} = vec4(texel, 1.0);
+ @end
+
+ @if(srgb_mode)
+ @{vOutColor} = fromLinear(@{vOutColor});
+ @end
+}
\ No newline at end of file
diff --git a/assets/shaders/opengl/default.shader.vs b/assets/shaders/opengl/default.shader.vs
new file mode 100644
index 000000000..cf0f62765
--- /dev/null
+++ b/assets/shaders/opengl/default.shader.vs
@@ -0,0 +1,79 @@
+@prism(type='fragment', name='Fast3D Fragment Shader', version='1.0.0', description='Ported shader to prism', author='Emill & Prism Team')
+
+@{GLSL_VERSION}
+
+@{attr} vec4 aVtxPos;
+
+@for(i in 0..2)
+ @if(o_textures[i])
+ @{attr} vec2 aTexCoord@{i};
+ @{out} vec2 vTexCoord@{i};
+ @{update_floats(2)}
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ @{attr} float aTexClampS@{i};
+ @{out} float vTexClampS@{i};
+ @else
+ @{attr} float aTexClampT@{i};
+ @{out} float vTexClampT@{i};
+ @end
+ @{update_floats(1)}
+ @end
+ @end
+ @end
+@end
+
+@if(o_fog)
+ @{attr} vec4 aFog;
+ @{out} vec4 vFog;
+ @{update_floats(4)}
+@end
+
+@if(o_grayscale)
+ @{attr} vec4 aGrayscaleColor;
+ @{out} vec4 vGrayscaleColor;
+ @{update_floats(4)}
+@end
+
+@for(i in 0..o_inputs)
+ @if(o_alpha)
+ @{attr} vec4 aInput@{i + 1};
+ @{out} vec4 vInput@{i + 1};
+ @{update_floats(4)}
+ @else
+ @{attr} vec3 aInput@{i + 1};
+ @{out} vec3 vInput@{i + 1};
+ @{update_floats(3)}
+ @end
+@end
+
+void main() {
+ @for(i in 0..2)
+ @if(o_textures[i])
+ vTexCoord@{i} = aTexCoord@{i};
+ @for(j in 0..2)
+ @if(o_clamp[i][j])
+ @if(j == 0)
+ vTexClampS@{i} = aTexClampS@{i};
+ @else
+ vTexClampT@{i} = aTexClampT@{i};
+ @end
+ @end
+ @end
+ @end
+ @end
+ @if(o_fog)
+ vFog = aFog;
+ @end
+ @if(o_grayscale)
+ vGrayscaleColor = aGrayscaleColor;
+ @end
+ @for(i in 0..o_inputs)
+ vInput@{i + 1} = aInput@{i + 1};
+ @end
+ gl_Position = aVtxPos;
+ @if(opengles)
+ gl_Position.z *= 0.3f;
+ @end
+}
\ No newline at end of file
diff --git a/libultraship b/libultraship
index 3e46fe77a..7e40f9de1 160000
--- a/libultraship
+++ b/libultraship
@@ -1 +1 @@
-Subproject commit 3e46fe77a4581a84f9c0edfab9c3a69a5320fe01
+Subproject commit 7e40f9de1b1ca5fda9a129676c235bbf0cec4582