Map<String, dynamic> getAttributes() { cachedAttributes ??= fetchAttributeLocations(gl, program); return cachedAttributes!; }