)]}'
{
  "commit": "3b49eb44295023848d7c2ec1a680dc4202462b5d",
  "tree": "a8ea7eaef94d3e2163953aef209226f47dbd33cb",
  "parents": [
    "38a22ff5231159cc0941dddb5f2f51f1730333f7"
  ],
  "author": {
    "name": "walley892",
    "email": "evanwall@buffalo.edu",
    "time": "Fri Jan 16 16:47:54 2026 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Jan 17 00:47:54 2026 +0000"
  },
  "message": "Add support for fetching array uniforms by name (#180647)\n\nAdds support for fetching objects representing array Uniforms of type\nfloat, vec2, vec3, and vec4. Happy new year!\n\nBefore this change, setting an array of uniforms was verbose.\n```glsl\nuniform vec3[2] uColors;\n```\n\n```dart\nshader.setFloat(0, 1.0);\nshader.setFloat(1, 0.0);\nshader.setFloat(2, 1.0);\nshader.setFloat(3, 0.0);\nshader.setFloat(4, 1.0);\nshader.setFloat(5, 0.0);\n```\n\nAfter this change, we have:\n\n```glsl\nuniform vec3[2] uColors;\n```\n\n```dart\nfinal colors \u003d shader.getUniformVec3Array(\"uColors\");\ncolors[0].set(1.0, 0.0, 1.0);\ncolors[1].set(0.0, 1.0, 0.0);\n```\n\n- Adds a class UniformArray to represent uniform arrays in Dart.\n- Adds a bunch of methods that construct these arrays for various\ndatatypes\n- Adds tests\n- Also removes some of the awkwardness in the _getUniformFloatIndex\nfunction by replacing that function entirely\n\n## Pre-launch Checklist\n\n- [x ] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [ x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [ x] I read and followed the [Flutter Style Guide], including\n[Features we expect every widget to implement].\n- [ x] I signed the [CLA].\n- [ x] I listed at least one issue that this PR fixes in the description\nabove.\n- [ x] I updated/added relevant documentation (doc comments with `///`).\n- [ x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [ x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [ x] All existing and new tests are passing.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "68b67c132f6b33a5c4acd6ce8e66a760faa4b6b3",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/float_array_uniform.frag"
    },
    {
      "type": "modify",
      "old_id": "5774c385ba84f756e18497d169c3cf760e3cf8bd",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms.frag",
      "new_id": "dfb903c6083258d4429a664b1a4979e51d71a5a8",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms.frag"
    },
    {
      "type": "modify",
      "old_id": "448fc01ccc96c7a015661a0bfbf19b5af429f2e6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms_inserted.frag",
      "new_id": "4475c94b44393f1e08a6becb3ec5d0319ec63f53",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms_inserted.frag"
    },
    {
      "type": "modify",
      "old_id": "0744dbfaecaabbd5ece7ce408216f3ae08688b85",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms_reordered.frag",
      "new_id": "987a5667801a60ca5c5f68d7f1edc3cb55156473",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/uniforms_reordered.frag"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e926d481f95f85acb21e008c9d9a069c2d75b49c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/vec2_array_uniform.frag"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "23acabaf5f6ffe9bc39de6a2b75d3ee74c029a47",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/vec3_array_uniform.frag"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f8e98d457576775a34499a7f4f5dc2715e628244",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/shaders/general_shaders/vec4_array_uniform.frag"
    },
    {
      "type": "modify",
      "old_id": "d25b09d2518d9b5c093e8f29a05b19b0234c6339",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting.dart",
      "new_id": "171de57805304f650534f5b5dfc92b4d7bf8ebd1",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting.dart"
    },
    {
      "type": "modify",
      "old_id": "88ff3ae391edcd21ca9af2e190b44e2e7d075c38",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/painting.dart",
      "new_id": "67260526671e46a88ef19d277fcb83da1e7f50b9",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/painting.dart"
    },
    {
      "type": "modify",
      "old_id": "ec4cbd33695d74ca91df48a728c20a10a55c57db",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/painting.dart",
      "new_id": "f93f996b3cbffe828ea32eec8afaf72fb9682f46",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/painting.dart"
    },
    {
      "type": "modify",
      "old_id": "0c73efc01e687ea8bfd92e1c98f05c3ba96606fa",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart",
      "new_id": "1efb091a956a961436776218e6d1381577562749",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart"
    },
    {
      "type": "modify",
      "old_id": "ce3d1f8e9e742b1ebdacea7a40ef9f545cc29497",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/test/ui/fragment_shader_test.dart",
      "new_id": "094773004c0097c70a72e12bb0b484f36fc7dff3",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/ui/fragment_shader_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e0d7d6c72b525b2a726e744852028e50f4e784e3",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/testing/dart/fragment_shader_test.dart",
      "new_id": "da690aeab03a1c614c2e12b4baf8ff50bd25904c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/testing/dart/fragment_shader_test.dart"
    }
  ]
}
