private UnityTextureAdditionalActionResult GetTextureInfo()

in debugger/debugger-worker/src/Evaluation/UnityTextureAdditionalPropertiesProvider.cs [136:213]


        private UnityTextureAdditionalActionResult GetTextureInfo(
            IEnumerable<IFieldValueReference<Value>> heightReferences,
            IValueFetchOptions valueFetchOptions, Lifetime lifetime)
        {
            var width = -1;
            var height = -1;
            List<int>? pixels = null;
            var originalWidth = -1;
            var originalHeight = -1;
            string? graphicsTextureFormat = null;
            string? textureName = null;
            var hasAlphaChannel = false;

            var hasError = false;
            foreach (var valueReference in heightReferences)
            {
                if (lifetime.IsNotAlive)
                    return new UnityTextureAdditionalActionResult(null, null, true);

                switch (valueReference.DefaultName)
                {
                    case nameof(UnityTextureInfo.Height):
                        height = (int)(valueReference.AsPrimitiveSafe(valueFetchOptions)?.GetPrimitive() ?? height);
                        break;
                    case nameof(UnityTextureInfo.Width):
                        width = (int)(valueReference.AsPrimitiveSafe(valueFetchOptions)?.GetPrimitive() ?? width);
                        break;
                    case nameof(UnityTextureInfo.OriginalHeight):
                        originalHeight = (int)(valueReference.AsPrimitiveSafe(valueFetchOptions)?.GetPrimitive() ??
                                               originalHeight);
                        break;
                    case nameof(UnityTextureInfo.OriginalWidth):
                        originalWidth = (int)(valueReference.AsPrimitiveSafe(valueFetchOptions)?.GetPrimitive() ??
                                              originalWidth);
                        break;
                    case nameof(UnityTextureInfo.HasAlphaChannel):
                        hasAlphaChannel = (bool)(valueReference.AsPrimitiveSafe(valueFetchOptions)?.GetPrimitive() ??
                                                 hasAlphaChannel);
                        break;
                    case nameof(UnityTextureInfo.Pixels):
                        var arrayValueRole = valueReference.AsArray(valueFetchOptions);
                        var length = arrayValueRole.Dimensions[0];

                        var values = (valueReference.GetValue(valueFetchOptions) as ArrayMirror)?.GetValues(0, length);
                        if (values == null)
                        {
                            hasError = true;
                            break;
                        }

                        pixels = new List<int>(length);
                        for (int i = 0; i < length; i++)
                        {
                            pixels.Add((int)((PrimitiveValue)values[i]).Value);
                        }

                        break;
                    case nameof(UnityTextureInfo.TextureName):
                        textureName = valueReference.AsStringSafe(valueFetchOptions)?.GetString();
                        break;
                    case nameof(UnityTextureInfo.GraphicsTextureFormat):
                        graphicsTextureFormat = valueReference.AsStringSafe(valueFetchOptions)?.GetString();
                        break;
                }
            }


            if (hasError
                || width < 0 || height < 0 //value validation
                || pixels == null
                || originalHeight < 0 || originalWidth < 0
                || graphicsTextureFormat == null || textureName == null)
                return Error(Strings.UnityTextureDubuggingCannotParseTextureInfo);

            return new UnityTextureAdditionalActionResult(null, new UnityTextureInfo(width, height, pixels,
                originalWidth, originalHeight, graphicsTextureFormat,
                textureName, hasAlphaChannel), false);
        }