Closed RonYanDaik closed 1 year ago
well first thank you for saying how to do that - I did not know how to generate previews
Second do I understand correctly that GetInterface is dummy class only used to gain access to editor_interface ? (I didn't work with EditorScript yet)
Also gei.free() did not work and I added new var to MeshLibDefiner - preview_resolution with minimal 32 and max of 1024, step 16
gei.free()
Oh yes, since it is RefCounted
you can do just gei = null
.
Also probably better to not create it each loop iteration.
func get_meshlib()->MeshLibrary:
var meshlib = MeshLibrary.new()
var gei := GetInterface.new()
var ei = gei.get_editor_interface()
for i in items.size():
var item :MeshLibItem = items[i]
meshlib.create_item(i)
meshlib.set_item_mesh(i,item.mesh)
meshlib.set_item_mesh_transform(i,item.transform)
meshlib.set_item_name(i,item.object_name)
var prv := ei.make_mesh_previews([item.mesh],32)
meshlib.set_item_preview(i,prv[0])
if item.auto_generate_collision and item.mesh!=null:
meshlib.set_item_shapes(i,[item.mesh.create_trimesh_shape()])
else:
meshlib.set_item_shapes(i,[item.collision])
gei=null
return meshlib
and I added new var to MeshLibDefiner - preview_resolution with minimal 32 and max of 1024, step 16
FYI This is how engine does it.
Vector<Ref<Texture2D>> textures = EditorInterface::get_singleton()->make_mesh_previews(meshes, &transforms, EDITOR_GET("editors/grid_map/preview_size"));
It takes settings from engine.
EditorInterface
also can be accessed through EditorPlugin.get_editor_interface()
. and since it is plugin probably better to take advantage of it. But i'm not sure how to access it.
ok - gona update that
also I hope you don't mind my marking/comment
also godot should free gei var after function ends by itself if I am not wrong...
closing this issue for now as preview now works...
Use this code to generate mesh previews for Mesh Lib. Inside MeshLibDefiner.