Implement playable Mac client and rendering validation
This commit is contained in:
@@ -0,0 +1 @@
|
||||
.godot/
|
||||
@@ -0,0 +1,31 @@
|
||||
# Particle shader lifetime reproducer
|
||||
|
||||
Independent Godot project: no game assets, autoloads, GDExtension, network,
|
||||
EffectPlayer, or particles emitter. Eight short-lived ParticleProcessMaterials
|
||||
cycle through three emission shapes. Weak references must all be dead before
|
||||
exit; a RenderingServer synchronization also runs before quitting.
|
||||
|
||||
Export this project with the installed macOS template using `--export-release`
|
||||
and `--export-debug` into separate directories under the repository's `build/`.
|
||||
Run each exported executable and preserve both stdout and stderr until process
|
||||
exit. A run is clean only if `ISOLATED_PARTICLE_EXIT alive=0` is present and no
|
||||
shader/RID error follows. The success marker alone is not a clean-exit verdict.
|
||||
|
||||
2026-09-10, Godot 4.7.1 official, Apple M4/Metal:
|
||||
|
||||
- Release: zero surviving materials, three ParticlesShaderRD/Shader RID leaks.
|
||||
- Debug: zero surviving materials, no shader/RID leak.
|
||||
|
||||
Logs: `build/rendering/particle-isolated-release.log` and
|
||||
`build/rendering/particle-isolated-debug.log`. Path overrides (`--main-pack`,
|
||||
external `--script`) are not supported by the installed release template;
|
||||
export a standalone app instead. This project contains no copyrighted artwork
|
||||
and may be used as a minimal upstream reproduction if separately authorized.
|
||||
|
||||
2026-09-11: an unmodified same-revision arm64 release build using
|
||||
`debug_symbols=yes optimize=speed lto=none vulkan=no` exits cleanly in this
|
||||
project and in two complete game package checks. Rebuild it with
|
||||
`bash script/build_macos_release_engine.sh arm64` from the repository root.
|
||||
This is a verified alternative build path, not proof of a specific compiler
|
||||
bug or a source fix to the installed official template. Intel and Vulkan are
|
||||
outside this result.
|
||||
@@ -0,0 +1,9 @@
|
||||
[preset.0]
|
||||
name="macOS"
|
||||
platform="macOS"
|
||||
runnable=true
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
[preset.0.options]
|
||||
application/bundle_identifier="org.metin2.particleprobe"
|
||||
@@ -0,0 +1,17 @@
|
||||
extends Node
|
||||
var refs: Array[WeakRef] = []
|
||||
func _ready() -> void: call_deferred("run")
|
||||
func run() -> void:
|
||||
for i in 8: create_material(i)
|
||||
for i in 10: await get_tree().process_frame
|
||||
RenderingServer.force_sync()
|
||||
var alive := 0
|
||||
for reference in refs:
|
||||
if reference.get_ref() != null: alive += 1
|
||||
print("ISOLATED_PARTICLE_EXIT alive=", alive)
|
||||
get_tree().quit(1 if alive else 0)
|
||||
func create_material(index: int) -> void:
|
||||
var material := ParticleProcessMaterial.new()
|
||||
material.emission_shape = index % 3
|
||||
material.get_rid()
|
||||
refs.append(weakref(material))
|
||||
@@ -0,0 +1 @@
|
||||
uid://b3vjaypwq6yx6
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[ext_resource type="Script" path="res://main.gd" id="1"]
|
||||
[node name="Probe" type="Node"]
|
||||
script = ExtResource("1")
|
||||
@@ -0,0 +1,9 @@
|
||||
config_version=5
|
||||
[application]
|
||||
config/name="Particle lifetime isolation"
|
||||
run/main_scene="res://main.tscn"
|
||||
[display]
|
||||
window/size/viewport_width=320
|
||||
window/size/viewport_height=240
|
||||
[rendering]
|
||||
textures/vram_compression/import_etc2_astc=true
|
||||
Reference in New Issue
Block a user