Skip to content

Commit 05b64cc

Browse files
committed
Merge to fix conflicts
2 parents 4c7f66c + 755f7c5 commit 05b64cc

File tree

441 files changed

+3936
-629
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

441 files changed

+3936
-629
lines changed

.github/workflows/dev-desktop-builds.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ on:
1919
default: "true"
2020

2121
env:
22-
GODOT_VERSION: 4.3
23-
GODOT_SUB: stable
24-
GODOT_DOWNLOAD_DIR: https://github.com/godotengine/godot-builds/releases/download/4.3-stable
22+
GODOT_VERSION: 4.4
23+
GODOT_SUB: dev6
24+
GODOT_DOWNLOAD_DIR: https://github.com/godotengine/godot-builds/releases/download/4.4-dev6
2525
EXPORT_NAME: material_maker
26-
MM_RELEASE: 1_4a1
26+
MM_RELEASE: 1_4a2
2727

2828
jobs:
2929
export_windows_linux:

CHANGELOG.md

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,72 @@
1+
# Material Maker 1.4a1
2+
3+
## Known problems
4+
5+
- User settings are saved in a different directory (so using 1.4 alphas should not
6+
affect your 1.3 configuration)
7+
- Subwindows are not scaled correctly if the UI scale is not 1
8+
9+
## General
10+
11+
- Added flexible UI layout: panels can be moved anywhere in the window or
12+
undocked (Material authoring and Painting have different layouts)
13+
- Improved theme support (especially made many custom UI components themeable),
14+
added a new Modern theme and improved old themes (contributed by Jowan-Spooner)
15+
- Added basic support for GLTF 3D models
16+
- Dropping a .obj or .glb file into the 3D preview panel will use it as preview model
17+
- In the 3D preview replaced the default cube mesh with a chamfered cube and the
18+
plane with a bent plane (chamfer and curvature can be modified in the mesh
19+
configuration popup)
20+
- Improved the Add Node popup so it's themeable, more performant and has better search
21+
capabilities (contributed by Jowan-Spooner)
22+
- Improved the Library panel's design (contributed by Jowan-Spooner)
23+
- Added an editor for polygon parameters in the 2D preview
24+
- Added a shader error diagnostic tool
25+
- Added easy stylus pressure configuration in painting tool
26+
- Added a Find/Replace tool to code editor
27+
- Added an option to delete rescued unsaved projects at startup
28+
- Added support for hover copy+paste on float, color and gradient editors
29+
30+
## Nodes
31+
32+
- Added a MeshMap node that automatically bakes maps (position, normal, tangent,
33+
curvature, occlusion or thickness) for the current custom mesh.
34+
- Added many new 2D and 3D SDF nodes (contributed by Theaninova and williamchange)
35+
- Added new operations to the Math and Vec3 Math nodes (contributed by williamchange)
36+
- Added a Shard FBM noise node (contributed by williamchange)
37+
- Added a Tex3D Uniform node (contributed by williamchange)
38+
- Added Classic, Generalized and Anisotropic Kuwahara filter nodes (contributed by williamchange)
39+
- Redesigned the Float and Gradient parameter editor widgets (contributed by Jowan-Spooner)
40+
- Improved the image picker UI (contributed by Jowan-Spooner)
41+
- Added a new Splines parameter type (that can be edited in the 2D preview directly)
42+
and a new Splines node
43+
- Added a new Pixels parameter type, that can describe tiny images with 2, 4, 8 or 16 colors,
44+
and can be edited in the 2D preview directly. Added new Pixels and Smooth Pixels nodes
45+
- Added a new Lattice parameter type and a new Distort node
46+
- Added a new Webcam node that can output a Webcam feed (MacOS only)
47+
- Added a density input to the Noise node
48+
- The 2D and 3D SDF Boolean and Transform nodes, the 3D SDF Color node and the
49+
Tex3D Transform, Blend Select and Shape Select nodes are now variadic (contributed by williamchange)
50+
- The Blend node now has Hue, Saturation, Color and Value blend modes (contributed
51+
by williamchange)
52+
- The Spherize node has been improved (contributed by williamchange)
53+
- Updated documentation for many nodes (contributed by williamchange)
54+
55+
## Bug Fixes
56+
57+
- Small fixes in the GLSL parser
58+
- Optimized polygon/polyline parameter
59+
60+
## Miscellaneous
61+
62+
- Material Maker is now based on Godot 4.3. While porting to Godot 4, many features
63+
have been rewritten completely, including shader code generation and shader rendering
64+
- The MacOS export has been modified so Material Maker can be installed
65+
easily (contributed by williamchange)
66+
167
# Material Maker 1.3
268

3-
# General
69+
## General
470

571
- Updated interface to the website to login and upload assets without the need
672
of a web browser
@@ -19,27 +85,27 @@
1985
- Added Cairo tiles node
2086
- Added a Spherize node (contributed by williamchange)
2187

22-
# Bug Fixes
88+
## Bug Fixes
2389

2490
- Fixed an update problem in the Iterate Buffer node
2591
- Fixed a NaN problem in the sdArc node (contributed by myaaaaaaaaa)
2692
- Fixed a problem where the recovery file was not deleted when closing a tab
2793
- Fixed an export problem in the Painting tool
2894
- Fixed a problem with the Fill nodes where areas could leak though corners
2995

30-
# Miscellaneous
96+
## Miscellaneous
3197

3298
- Material Maker is now based on Godot 3.5.2
3399

34100
# Material Maker 1.2p1
35101

36-
# New features
102+
## New features
37103

38104
- Added Unreal Engine 5 export targets that generate a Python script for UE5 to
39105
build automatically the generated material (it's necessary to setup a path for
40106
Python in UE, this is described in the documentation)
41107

42-
# Bug Fixes
108+
## Bug Fixes
43109

44110
- Fixed several small problems in the Export Editor window
45111
- Fixed a problem that caused the 3D preview to update incorrectly
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://dgwcni3ebvc8s

addons/flexible_layout/flexible_layout.gd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,8 @@ class FlexLayout:
472472
if rect.size.x == 0 or rect.size.y == 0:
473473
return
474474
if top:
475-
top.layout(control.get_rect())
475+
rect.size = Vector2i(Vector2(rect.size))
476+
top.layout(rect)
476477
main_control.layout_changed.emit()
477478

478479
func move_panel(panel, reference_panel : FlexNode, destination : int, test_only : bool = false) -> bool:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://crspdrrii0nex
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bhwlc7y7qgb2v
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://ywxnr7grll4s
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://dg1byost6nv7c

addons/flexible_layout/test.gd.uid

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://pwdjqjokbnju

addons/material_maker/engine/dependencies.gd

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,10 @@ func dependency_update(dependency_name : String, value = null, internal : bool =
129129
var b : Buffer = buffers[dependency_name]
130130
match b.status:
131131
Buffer.Invalidated:
132-
print_debug("Buffer %s (updating) should not be invalidated status" % dependency_name)
133-
is_buffer_just_updated = true
132+
#print_debug("Buffer %s (updating) should not be invalidated" % dependency_name)
133+
#is_buffer_just_updated = true
134+
update()
135+
return
134136
Buffer.UpdatingInvalidated:
135137
#print_debug("Buffer %s (updating) reset to invalidated status" % dependency_name)
136138
b.status = Buffer.Invalidated
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://crr3mu66a78bu
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://coeb0q7f1dfo6
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://ddlcbf6dw2a6p
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://5f5raxatrnnl

addons/material_maker/engine/multi_renderer.gd

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ var max_viewport_size : int = 2048
1515

1616
var max_buffer_size = 0
1717

18-
var rendering_device : RenderingDevice
19-
var rendering_device_user = null
20-
2118
var shader_error_handler
2219

2320

@@ -27,19 +24,14 @@ signal free_rendering_device
2724

2825
func _ready() -> void:
2926
shader_error_handler = load("res://addons/material_maker/engine/shader_error_handler.gd").new()
30-
common_shader = "varying float elapsed_time;
31-
32-
void vertex() {
33-
elapsed_time = TIME;
34-
}
35-
"
27+
common_shader = "varying float elapsed_time;\nvoid vertex() {\n\telapsed_time = TIME;\n}\n"
3628
common_shader += preload("res://addons/material_maker/shader_functions.tres").text
3729
for i in total_renderers:
3830
var renderer = preload("res://addons/material_maker/engine/renderer.tscn").instantiate()
3931
add_child(renderer)
4032
free_renderers.append(renderer)
41-
rendering_device = RenderingServer.create_local_rendering_device()
42-
33+
initialize_rendering_thread()
34+
4335
# Global parameters
4436

4537
func get_global_parameters():
@@ -113,6 +105,85 @@ func release(renderer : Object) -> void:
113105
free_renderers.append(renderer)
114106
free_renderer.emit()
115107

108+
109+
# rendering thread
110+
111+
const render_in_separate_thread : bool = true
112+
var rendering_thread : Thread
113+
var rendering_mutex : Mutex
114+
var rendering_semaphore : Semaphore
115+
var rendering_callable : Callable
116+
var rendering_parameters : Array
117+
var rendering_return_value
118+
var rendering_thread_running : bool
119+
var rendering_thread_working : bool = false
120+
var rendering_device : RenderingDevice
121+
var rendering_device_user = null
122+
123+
func thread_loop():
124+
while true:
125+
rendering_semaphore.wait()
126+
rendering_mutex.lock()
127+
var running : bool = rendering_thread_running
128+
if not running:
129+
rendering_mutex.unlock()
130+
break
131+
var rv = rendering_callable.callv(rendering_parameters)
132+
rendering_return_value = rv
133+
rendering_thread_running = false
134+
rendering_mutex.unlock()
135+
136+
func thread_run(c : Callable, p : Array = [], stop_thread = false):
137+
if render_in_separate_thread:
138+
if rendering_thread == null:
139+
return
140+
while rendering_thread_working and is_inside_tree():
141+
await get_tree().process_frame
142+
rendering_thread_working = true
143+
while not rendering_mutex.try_lock() and is_inside_tree():
144+
await get_tree().process_frame
145+
rendering_callable = c
146+
rendering_parameters = p
147+
rendering_thread_running = not stop_thread
148+
rendering_mutex.unlock()
149+
rendering_semaphore.post()
150+
var running : bool = true
151+
var rv
152+
while running:
153+
while not rendering_mutex.try_lock():
154+
if is_inside_tree():
155+
await get_tree().process_frame
156+
running = rendering_thread_running
157+
rv = rendering_return_value
158+
rendering_mutex.unlock()
159+
rendering_thread_working = false
160+
return rv
161+
else:
162+
return await c.callv(p)
163+
164+
func create_rendering_device():
165+
rendering_device = RenderingServer.create_local_rendering_device()
166+
167+
func destroy_rendering_device():
168+
pass
169+
170+
func initialize_rendering_thread():
171+
if render_in_separate_thread:
172+
rendering_thread = Thread.new()
173+
rendering_mutex = Mutex.new()
174+
rendering_semaphore = Semaphore.new()
175+
rendering_thread.start(self.thread_loop, 2)
176+
thread_run(self.create_rendering_device)
177+
else:
178+
create_rendering_device()
179+
180+
func stop_rendering_thread():
181+
if render_in_separate_thread:
182+
await thread_run(destroy_rendering_device, [])
183+
await thread_run(destroy_rendering_device, [], true)
184+
rendering_thread.wait_to_finish()
185+
rendering_thread = null
186+
116187
func request_rendering_device(user) -> RenderingDevice:
117188
while ! renderers_enabled or rendering_device_user != null:
118189
await self.free_rendering_device
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://dqcja48n320s4
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://mcbr328cl01e
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://b7uvyymfdklls
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://brtutoy18rxq5
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://x2lbtdvnuwdt
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://8dg7g6ubsn61
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bcutdsiyw2tuf
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://b2decri0hye1o

addons/material_maker/engine/nodes/gen_graph.gd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@ var transmits_seed : bool = true
1313

1414
var current_mesh : Mesh = null
1515

16+
1617
signal graph_changed()
1718
signal connections_changed(removed_connections, added_connections)
1819
signal hierarchy_changed()
1920

21+
22+
func _ready() -> void:
23+
super._ready()
24+
2025
func emit_hierarchy_changed():
2126
var top = self
2227
while top.get_parent() != null and top.get_parent().get_script() == get_script():
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://fcw2oyxbk8he
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://e6sktgaie00t
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://04c37eowt30v

addons/material_maker/engine/nodes/gen_iterate_buffer.gd

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var iteration_param_name : String
2020
var used_named_parameters : Array = []
2121

2222

23-
func _ready():
23+
func _init():
2424
#texture.flags = Texture2D.FLAG_REPEAT
2525
shader_computes.append(MMShaderCompute.new())
2626
shader_computes.append(MMShaderCompute.new())
@@ -114,17 +114,19 @@ func do_update_shaders() -> void:
114114
for i in 2:
115115
var shader_compute : MMShaderCompute = shader_computes[i]
116116
var buffer_name : String = buffer_names[i]
117+
var output_texture_type : int = 0 if new_is_greyscale else 1
118+
if f32:
119+
output_texture_type |= 2
117120
if i == 1 and get_parameter("autostop"):
118121
var shader_template : String = load("res://addons/material_maker/engine/nodes/iterate_buffer_compute.tres").text
119-
var output_texture_type : int = 0 if (sources[i].output_type == "f") else 1
120-
if f32:
121-
output_texture_type |= 2
122122
var output_textures : Array[Dictionary] = [{name="OUTPUT_TEXTURE", type=output_texture_type}]
123123
var extra_parameters : Array[Dictionary] = [{name="mm_compare", type="sampler2D", value=texture}]
124124
var extra_output_parameters : Array[Dictionary] = [{name="mm_highest_diff", type="int"}]
125125
await shader_compute.compute_shader.set_shader_from_shadercode_ext(shader_template, sources[i], output_textures, extra_parameters, false, extra_output_parameters)
126126
else:
127-
await shader_compute.set_shader_from_shadercode(sources[i], f32)
127+
var shader_template : String = load("res://addons/material_maker/engine/nodes/buffer_compute.tres").text
128+
var output_textures : Array[Dictionary] = [{name="OUTPUT_TEXTURE", type=output_texture_type}]
129+
await shader_compute.compute_shader.set_shader_from_shadercode_ext(shader_template, sources[i], output_textures, [], false, [])
128130
mm_deps.buffer_create_compute_material(buffer_name, shader_compute)
129131
mm_deps.update()
130132
if new_is_greyscale != is_greyscale:
@@ -139,6 +141,7 @@ func set_parameter(n : String, v) -> void:
139141
mm_deps.dependency_update("o%s_it_tex_size" % get_instance_id(), pow(2, v))
140142
super.set_parameter(n, v)
141143
set_current_iteration(0)
144+
mm_deps.buffer_invalidate(buffer_names[0])
142145

143146
func on_dep_update_value(buffer_name, parameter_name, value) -> bool:
144147
if parameter_name != buffer_names[2] and parameter_name != iteration_param_name and (buffer_name != buffer_names[1] or ! value is Texture2D):
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bflrhcmq2h2oc

0 commit comments

Comments
 (0)