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.
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
- Viết
.fragtrongshaders/. - Load theo docs (ShaderLib / asset API).
- 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.