protected override void OnUpdate() { Entities.ForEach((Image image) => { var texture = image.sprite != null ? image.sprite.texture : Texture2D.whiteTexture; var material = image.material != null ? image.material : Canvas.GetDefaultCanvasMaterial(); var entity = GetPrimaryEntity(image); var rectSize = image.rectTransform.Int2Size(); DstEntityManager.AddComponentData(entity, new LinkedTextureEntity { Value = GetPrimaryEntity(texture) }); DstEntityManager.AddComponentData(entity, new LinkedMaterialEntity { Value = GetPrimaryEntity(material) }); DstEntityManager.AddComponentData(entity, new AppliedColor { Value = image.color }); var spriteTexture = image.sprite; var spriteRes = spriteTexture != null ? new int2(spriteTexture.texture.width, spriteTexture.texture.height) : rectSize; DstEntityManager.AddComponentData(entity, new DefaultSpriteResolution { Value = spriteRes }); var spriteData = SpriteData.FromSprite(image.sprite); DstEntityManager.AddComponentData(entity, spriteData); // TODO: Does not handle image slicing DstEntityManager.AddBuffer <LocalVertexData>(entity).ResizeUninitialized(4); DstEntityManager.AddBuffer <LocalTriangleIndexElement>(entity).ResizeUninitialized(6); // Mark that the image has to be built. DstEntityManager.AddComponent <BuildUIElementTag>(entity); var type = image.type; switch (type) { case Image.Type.Simple: break; case Image.Type.Filled: SetFill(image, entity); break; default: throw new System.NotSupportedException($"Only Simple/Filled Image types are supported so far for {image.name}"); } // If the image is inactive, then we want to make sure the image gets offsetted. if (!image.gameObject.activeInHierarchy || !image.enabled) { DstEntityManager.AddComponent <UpdateVertexColorTag>(entity); } }); }
protected override void OnUpdate() { Entities.ForEach((Image image) => { TextureBin.TryLoadTextureBin("TextureBin", out TextureBin textureBin); var texture = image.sprite != null ? image.sprite.texture : Texture2D.whiteTexture; var imageIndex = textureBin.Add(texture); var entity = GetPrimaryEntity(image); var material = image.material != null ? image.material : Canvas.GetDefaultCanvasMaterial(); DstEntityManager.AddComponentObject(entity, material); // TODO: Internally this would need a look up table... // DstEntityManager.AddSharedComponentData(entity, new MaterialID { Value = material.GetInstanceID() }); var rectSize = image.rectTransform.Int2Size(); DstEntityManager.AddComponentData(entity, new TextureKey { Value = imageIndex }); DstEntityManager.AddComponentData(entity, new AppliedColor { Value = image.color }); DstEntityManager.AddComponentData(entity, new Dimensions { Value = rectSize }); var spriteTexture = image.sprite; var spriteRes = spriteTexture != null ? new int2(spriteTexture.texture.width, spriteTexture.texture.height) : rectSize; DstEntityManager.AddComponentData(entity, new DefaultSpriteResolution { Value = spriteRes }); var spriteData = SpriteData.FromSprite(image.sprite); DstEntityManager.AddComponentData(entity, spriteData); // TODO: Does not handle image slicing DstEntityManager.AddBuffer <MeshVertexData>(entity).ResizeUninitialized(4); DstEntityManager.AddBuffer <TriangleIndexElement>(entity).ResizeUninitialized(6); }); }