diff --git a/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid b/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid new file mode 100644 index 0000000..1074950 --- /dev/null +++ b/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid @@ -0,0 +1 @@ +uid://bv34hd4a2wbit diff --git a/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid b/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid new file mode 100644 index 0000000..e63673e --- /dev/null +++ b/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid @@ -0,0 +1 @@ +uid://bj4dail4toa6d diff --git a/examples/LabelStepPass.gd.uid b/examples/LabelStepPass.gd.uid new file mode 100644 index 0000000..838d418 --- /dev/null +++ b/examples/LabelStepPass.gd.uid @@ -0,0 +1 @@ +uid://q8wumduymhf6 diff --git a/examples/cells/cells.gd.uid b/examples/cells/cells.gd.uid new file mode 100644 index 0000000..5e5fc21 --- /dev/null +++ b/examples/cells/cells.gd.uid @@ -0,0 +1 @@ +uid://ce667yq7yolmp diff --git a/examples/cells/example_cells.tscn b/examples/cells/example_cells.tscn index 6959c31..c6eb547 100644 --- a/examples/cells/example_cells.tscn +++ b/examples/cells/example_cells.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://cutxgtalwsp6q"] -[ext_resource type="Script" path="res://examples/cells/cells.gd" id="1_dw4h8"] +[ext_resource type="Script" uid="uid://ce667yq7yolmp" path="res://examples/cells/cells.gd" id="1_dw4h8"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_oji6h"] [node name="Cells" type="Control" node_paths=PackedStringArray("data")] @@ -31,6 +31,7 @@ grow_vertical = 2 [node name="Display" type="Sprite2D" parent="CenterAnchor"] texture_filter = 1 +position = Vector2(-39, -32) scale = Vector2(4, 4) texture = ExtResource("2_oji6h") diff --git a/examples/example_1.tscn b/examples/example_1.tscn index 7d67949..6aa7e5c 100644 --- a/examples/example_1.tscn +++ b/examples/example_1.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=3 uid="uid://ddr6qtwy1pesd"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] +[ext_resource type="Script" uid="uid://bv34hd4a2wbit" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_s3fct"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_dmk8h"] diff --git a/examples/example_2.tscn b/examples/example_2.tscn index 766e825..5921145 100644 --- a/examples/example_2.tscn +++ b/examples/example_2.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://cotswmubn7uvm"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_j6qu8"] [node name="Example2" type="Node2D"] diff --git a/examples/example_3.tscn b/examples/example_3.tscn index df2b8a6..f33d0a5 100644 --- a/examples/example_3.tscn +++ b/examples/example_3.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://cmucgsppcoo5e"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_eimw3"] -[ext_resource type="Script" path="res://examples/LabelStepPass.gd" id="2_4aq4t"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_eimw3"] +[ext_resource type="Script" uid="uid://q8wumduymhf6" path="res://examples/LabelStepPass.gd" id="2_4aq4t"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_4upxj"] [node name="CompShadStudioEx3" type="Node2D"] diff --git a/examples/example_4.tscn b/examples/example_4.tscn index c777972..f5d35ef 100644 --- a/examples/example_4.tscn +++ b/examples/example_4.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://b2ip5eftk3aij"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] [ext_resource type="Texture2D" uid="uid://2behgeplwycn" path="res://examples/grid_512x512.png" id="2_flqlh"] [node name="CompShadStudioEx4" type="Node2D"] diff --git a/examples/example_5.tscn b/examples/example_5.tscn index 43aa420..871bcc1 100644 --- a/examples/example_5.tscn +++ b/examples/example_5.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://cets11mlsd8hb"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_pm7bb"] diff --git a/examples/example_lenia_test.tscn b/examples/example_lenia_test.tscn index 6c2caef..927b20b 100644 --- a/examples/example_lenia_test.tscn +++ b/examples/example_lenia_test.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://cljj33x767odp"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_wci4f"] -[ext_resource type="Script" path="res://examples/LabelStepPass.gd" id="2_ndkd3"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_wci4f"] +[ext_resource type="Script" uid="uid://q8wumduymhf6" path="res://examples/LabelStepPass.gd" id="2_ndkd3"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="3_orsvs"] [node name="CompShadStudioEx3" type="Node2D"] diff --git a/examples/example_mandelbrot.gd.uid b/examples/example_mandelbrot.gd.uid new file mode 100644 index 0000000..b4d8dd4 --- /dev/null +++ b/examples/example_mandelbrot.gd.uid @@ -0,0 +1 @@ +uid://mj6p8vw40uoo diff --git a/examples/example_mandelbrot.tscn b/examples/example_mandelbrot.tscn index a5e532c..ab6c621 100644 --- a/examples/example_mandelbrot.tscn +++ b/examples/example_mandelbrot.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://d1hhshnvrt86e"] -[ext_resource type="Script" path="res://examples/example_mandelbrot.gd" id="1_5gp20"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_t5cx1"] +[ext_resource type="Script" uid="uid://mj6p8vw40uoo" path="res://examples/example_mandelbrot.gd" id="1_5gp20"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_t5cx1"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_dyrad"] [node name="example_mandelbrot" type="Node2D"] diff --git a/examples/example_psycho_seizure.tscn b/examples/example_psycho_seizure.tscn index f1e07d4..0ec1e82 100644 --- a/examples/example_psycho_seizure.tscn +++ b/examples/example_psycho_seizure.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://cdtqwwdxs783m"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_26wk6"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_26wk6"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_urrfs"] [node name="exeample_psycho_seizure" type="Node2D"] diff --git a/examples/radar/radar.cpp b/examples/radar/radar.cpp new file mode 100644 index 0000000..9dc7089 --- /dev/null +++ b/examples/radar/radar.cpp @@ -0,0 +1,142 @@ +#define M_PI 3.14159265358979323846 + +// Color definitions +#define blue1 vec3(0.74, 0.0, 0.00) +#define blue2 vec3(0.87, 0.98, 1.00) +#define blue3 vec3(1.0, 1.0, 1.0) +#define blue4 vec3(0.953, 0.969, 0.89) +#define red vec3(0.00, 0.00, 1.00) + +// Helper macro +#define SMOOTH(r, R) (1.0 - smoothstep(R - 1.0, R + 1.0, r)) + +void main() { + uint x = gl_GlobalInvocationID.x; + uint y = gl_GlobalInvocationID.y; + uint p = x + y * WSX; + + //Calcule les coordonnées normalisées et la distance depuis le centre de l'écran (r). + vec2 uv = vec2(float(x), float(y)); + vec2 c = vec2(float(WSX) / 2.0, float(WSY) / 2.0); // Center + vec2 d = uv - c; + float r = length(d); + + //Définit un facteur d'échelle pour adapter les éléments à la taille de l'écran et une variable du temps + float scale = min(float(WSX), float(WSY)) / 650.0; + float time = float(step) * 0.01; + + // arriere plan noir + vec3 finalColor = vec3(0.0); + + // Normalized direction (for angles) + vec2 dn = r > 0.0 ? d / r : vec2(0.0); + float angle = atan(dn.y, dn.x); + float theta = 180.0 * angle / M_PI; + + //Dessine trois cercles concentriques de différentes tailles. + finalColor += (SMOOTH(r - 0.5 * scale, 100.0 * scale) - SMOOTH(r + 0.5 * scale, 100.0 * scale)) * blue1; + finalColor += (SMOOTH(r - 0.5 * scale, 165.0 * scale) - SMOOTH(r + 0.5 * scale, 165.0 * scale)) * blue1; + finalColor += (SMOOTH(r - 1.0 * scale, 240.0 * scale) - SMOOTH(r + 1.0 * scale, 240.0 * scale)) * blue4; + + // Dessine un petit point au centre. + finalColor += (SMOOTH(r - 0.5 * scale, 10.0 * scale) - SMOOTH(r + 0.5 * scale, 10.0 * scale)) * blue3; + + // Crée une ligne de balayage qui tourne comme un radar, avec un gradient. + if (r < 240.0 * scale) { + float scanAngle = 90.0 * time * M_PI / 180.0; + vec2 scanDir = vec2(cos(scanAngle), -sin(scanAngle)); + float scanDist = dot(dn, scanDir); + float theta0 = 90.0 * time; + float angDiff = mod(theta + theta0, 360.0); + float gradient = clamp(1.0 - angDiff / 90.0, 0.0, 1.0); + float scanLine = SMOOTH(1.0 - scanDist, 0.03) * 0.75; + finalColor += (scanLine + 0.5 * gradient) * blue3 * smoothstep(240.0 * scale, 220.0 * scale, r); + } + + // Dessine un cercle extérieur avec des segments réguliers. + if (r > 310.0 * scale && r < 316.0 * scale) { + float segmentPattern = smoothstep(2.0, 2.1, abs(mod(theta + 2.0, 45.0) - 2.0)) * + mix(0.5, 1.0, float(abs(mod(theta, 180.0) - 90.0) > 45.0)); + finalColor += segmentPattern * blue1; + } + + // Crée un demi-cercle avec une ouverture qui varie avec le temps. + if (r > 260.0 * scale && r < 264.0 * scale) { + float opening = 0.5 + 0.2 * cos(time); + if (abs(dn.y) > opening) { + finalColor += 0.7 * blue3; + } + } + + + // Dessine quatre triangles qui pulsent avec le temps autour d'un cercle invisible. + float radius = (315.0 + 30.0 * sin(time)) * scale; + // Right triangle + if (d.x - radius >= -8.0 * scale && d.x - radius <= 0.0) { + float t = 1.0 - smoothstep(7.0 * scale + d.x - radius, 9.0 * scale + d.x - radius, abs(d.y)); + finalColor += t * blue2; + } + // Left triangle + if (d.x + radius >= 0.0 && d.x + radius <= 8.0 * scale) { + float t = 1.0 - smoothstep(7.0 * scale - d.x - radius, 9.0 * scale - d.x - radius, abs(d.y)); + finalColor += t * blue2; + } + // Bottom triangle + if (d.y - radius >= -8.0 * scale && d.y - radius <= 0.0) { + float t = 1.0 - smoothstep(7.0 * scale + d.y - radius, 9.0 * scale + d.y - radius, abs(d.x)); + finalColor += t * blue2; + } + // Top triangle + if (d.y + radius >= 0.0 && d.y + radius <= 8.0 * scale) { + float t = 1.0 - smoothstep(7.0 * scale - d.y - radius, 9.0 * scale - d.y - radius, abs(d.x)); + finalColor += t * blue2; + } + + // Dessine deux points mobiles qui se déplacent sur des trajectoires complexes. + if (r < 240.0 * scale) { + // Blip 1 + { + float t = time * 0.1; + vec2 pos = c + 130.0 * scale * vec2( + 1.3 * cos(t) + 1.0 * cos(0.1 * t), + 1.0 * sin(t) + 1.4 * cos(0.1 * t) + ); + float blipDist = length(uv - pos); + finalColor += SMOOTH(blipDist, 3.0 * scale) * vec3(1, 1, 1); + } + // Blip 2 + { + float t = sin(0.1 * time + 7.0) + 0.2 * time; + vec2 pos = c + 50.0 * scale * vec2( + 1.54 * cos(t) + 1.7 * cos(0.1 * t), + 1.37 * sin(t) + 1.8 * cos(0.1 * t) + ); + float blipDist = length(uv - pos); + float R = (8.0 + mod(87.0 * time, 80.0)) * scale; + + float blip = (0.5 - 0.5 * cos(30.0 * time)) * SMOOTH(blipDist, 5.0 * scale) + + SMOOTH(6.0 * scale, blipDist) - SMOOTH(8.0 * scale, blipDist) + + smoothstep(max(8.0 * scale, R - 20.0 * scale), R, blipDist) - SMOOTH(R, blipDist); + + finalColor += blip * red; + } + } + + // Dessine trois cibles fixes avec des halos lumineux. + vec2 targetPositions[3] = vec2[]( + c + vec2(0.3, 0.2) * float(WSX) * 0.5, + c + vec2(-0.4, -0.3) * float(WSX) * 0.5, + c + vec2(0.1, -0.5) * float(WSX) * 0.5 + ); + + for (int i = 0; i < 3; i++) { + float targetDist = length(uv - targetPositions[i]); + finalColor += red * exp(-50.0 * targetDist / scale) * 0.7; + } + + int color = (int(clamp(finalColor.r, 0.0, 1.0) * 255.0) << 16) | + (int(clamp(finalColor.g, 0.0, 1.0) * 255.0) << 8) | + int(clamp(finalColor.b, 0.0, 1.0) * 255.0); + + data_0[p] = 0xFF000000 | color; +} \ No newline at end of file diff --git a/examples/radar/radar.glsl.import b/examples/radar/radar.glsl.import new file mode 100644 index 0000000..78429ff --- /dev/null +++ b/examples/radar/radar.glsl.import @@ -0,0 +1,14 @@ +[remap] + +importer="glsl" +type="RDShaderFile" +uid="uid://c0c2dlutu4gln" +path="res://.godot/imported/test.glsl-ccd8d19c47d7f1edc36578aab1bf31da.res" + +[deps] + +source_file="res://examples/test/test.glsl" +dest_files=["res://.godot/imported/test.glsl-ccd8d19c47d7f1edc36578aab1bf31da.res"] + +[params] + diff --git a/examples/radar/radar.tscn b/examples/radar/radar.tscn new file mode 100644 index 0000000..4bb49ca --- /dev/null +++ b/examples/radar/radar.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=3 format=3 uid="uid://bhsg8ie7m0n18"] + +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="1_tfywn"] +[ext_resource type="Script" uid="uid://cleifuttwn5dw" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="2_3uxvf"] + +[node name="Test" type="Node2D"] + +[node name="Icon" type="Sprite2D" parent="."] +position = Vector2(579, 337.5) +scale = Vector2(9.73438, 5.74219) +texture = ExtResource("1_tfywn") + +[node name="ComputeShaderStudio2D" type="Node" parent="Icon" node_paths=PackedStringArray("data")] +script = ExtResource("2_3uxvf") +WSX = 512 +WSY = 512 +glsl_file = "res://examples/test/test.cpp" +GLSL_code = "" +data = [NodePath("..")] +metadata/_custom_type_script = "uid://cleifuttwn5dw" diff --git a/project.godot b/project.godot index 725be9c..b118d2e 100644 --- a/project.godot +++ b/project.godot @@ -11,8 +11,8 @@ config_version=5 [application] config/name="compute_shader_studio" -run/main_scene="res://examples/example_1.tscn" -config/features=PackedStringArray("4.3", "Forward Plus") +run/main_scene="uid://bhsg8ie7m0n18" +config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://addons/compute_shader_studio/icon.png" [editor_plugins] diff --git a/projet b/projet new file mode 100644 index 0000000..e69de29