🧬 Deep Dive · Advanced

Fragment shader trong Flutter: uniform theo tên và texture đồng bộ

Custom shader hết “ngách” khi Impeller nắm stack. API gần đây gỡ các nốt đau tồi tệ nhất.

Sơ đồ: Fragment Shader API

Bind uniform theo tên

void setUp(ui.FragmentShader shader) {
  shader.getUniformFloat('intensity').set(0.85);
}

Không còn đếm slot float thủ công — bớt bug off-by-one trên GPU.

Texture đồng bộ trong cùng frame

final image = picture.toImageSync(
  128,
  128,
  targetFormat: ui.TargetPixelFormat.rFloat32,
);
shader.setImageSampler(0, image);

decodeImageFromPixelsSync / toImageSync bỏ một frame lag khi tạo texture sampler. Format high-bit (tới 128-bit float) mở khóa LUT và SDF nghiêm túc.

Workflow

  1. Viết .frag trong shaders/.
  2. Load theo docs (ShaderLib / asset API).
  3. Preview cách ly; rồi mới integrate sau feature flag.

Cạm bẫy

  • Khác biệt tọa độ Skia vs Impeller vẫn cắn shader port.
  • LUT lớn cần ngân sách memory — phải đo.
#Flutter#Shaders#Impeller#Graphics