From 3ff1d663a2b517a41062de8e4902f5a6a6875c12 Mon Sep 17 00:00:00 2001 From: Alberto Torres Date: Thu, 29 Aug 2024 00:07:09 +0200 Subject: [PATCH] Prevent cycles with ARC by adding `{.cursor.}` to all "back" references. TODO: Use destructors to set all cursors of children objects to `nil`. --- src/types.nim | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/types.nim b/src/types.nim index d0b9deb..d6e19d0 100644 --- a/src/types.nim +++ b/src/types.nim @@ -98,7 +98,7 @@ type GameObject* = ref object of RootObj # TODO: remove otype otype*: ObjectType ## private - engine*: MyouEngine ## private + engine* {.cursor.}: MyouEngine ## private debug*: bool ## private position*: Vec3 rotation*: Quat @@ -110,12 +110,12 @@ type object_color*: Vec4 # alpha*: float matrix_parent_inverse*: Mat4 - scene*: Scene + scene* {.cursor.}: Scene source_scene_name*: string # data_dir*: string # dupli_group*: unknown visible*: bool - parent*: GameObject + parent* {.cursor.}: GameObject children*: seq[GameObject] auto_update_matrix*: bool world_matrix*: Mat4 @@ -158,7 +158,8 @@ type # most fields should be private MeshData* = ref object - engine*: MyouEngine + engine* {.cursor.}: MyouEngine + # TODO: seq of {.cursor.}s? users*: seq[GameObject] ## private hash*: string varrays*: seq[ArrRef[float32]] @@ -287,8 +288,8 @@ type # shadows ShadowManager* = ref object of RootObj - engine*: MyouEngine - light*: Light + engine* {.cursor.}: MyouEngine + light* {.cursor.}: Light framebuffer*: Framebuffer texture*: Texture sampler_type*: string @@ -330,7 +331,7 @@ type padding3: float32 Scene* = ref object - engine*: MyouEngine + engine* {.cursor.}: MyouEngine name*: string enabled*: bool children*: seq[GameObject] @@ -406,7 +407,7 @@ type viewport_size*, viewport_size_inv*: Vec2 RenderManager* = ref object - engine*: MyouEngine + engine* {.cursor.}: MyouEngine initialized*: bool # temporary_framebuffers*: Table[int, ByteFramebuffer] render_tick*: int @@ -492,7 +493,7 @@ type # ubo.nim UBO* = ref object - renderer*: RenderManager + renderer* {.cursor.}: RenderManager name*: string size32*: int byte_storage*: ArrRef[byte] @@ -529,7 +530,7 @@ type EsPrecisionHigh Material* = ref object - engine*: MyouEngine + engine* {.cursor.}: MyouEngine name*: string textures*: OrderedTable[string, Texture] ubos*: seq[UBO] @@ -560,7 +561,7 @@ type # TODO: choose better names Shader* = ref object - engine*: MyouEngine # do we need this? + engine* {.cursor.}: MyouEngine # do we need this? id*: int program*: GLuint material*: Material # do we need this? @@ -639,7 +640,7 @@ type tile_size*: Vec2 Texture* = ref object of RootObj - engine*: MyouEngine + engine* {.cursor.}: MyouEngine name*: string storage*: TextureStorage ## private loaded*: bool @@ -660,7 +661,7 @@ type DepthTexture Framebuffer* = ref object of RootObj - engine*: MyouEngine + engine* {.cursor.}: MyouEngine width*, height*: int format*: TextureFormat depth_type*: FramebufferDepthType @@ -752,7 +753,7 @@ type # loader_base.nim Loader* = ref object of RootObj - engine*: MyouEngine + engine* {.cursor.}: MyouEngine shader_library*: string shader_textures*: Table[string, Texture] # on_destroy*: OnDestroy @@ -777,7 +778,7 @@ type Body* = ref object Screen* = ref object of RootObj - engine*: MyouEngine + engine* {.cursor.}: MyouEngine width*, height*: int32 orientation*: int8 viewports*: seq[Viewport]