initPlatformState method
Implementation
Future<void> initPlatformState(Size validSize, double dpr) async {
if (_didInit) return;
if (validSize.width <= 0 || validSize.height <= 0) {
debugPrint('Invalid size for initialization: $validSize');
return;
}
debugPrint(
'Initializing with size: ${validSize.width}x${validSize.height}',
);
final camera = GaussianCamera.createDefault(
width: validSize.width,
height: validSize.height,
);
// Initialize spherical coordinates from initial camera position
final pos = camera.position;
_orbitDistance = pos.length;
_theta = math.atan2(pos.x, pos.z);
_phi = math.acos(pos.y / _orbitDistance);
try {
await _renderer.initialize();
_renderer.camera = camera;
final vertexShaderCode = await flutter_services.rootBundle.loadString(
'packages/flutter_gaussian_splatter/shaders/vertex.glsl',
);
final fragmentShaderCode = await flutter_services.rootBundle.loadString(
'packages/flutter_gaussian_splatter/shaders/frag.glsl',
);
await _renderer.setupTexture(
width: validSize.width,
height: validSize.height,
vertexShaderCode: vertexShaderCode,
fragmentShaderCode: fragmentShaderCode,
enableProfiling: widget.enableProfiling,
);
if(widget.backgroundAssetPath != null) {
await _renderer.enableBackgroundFromAsset(widget.backgroundAssetPath!);
}
texture = _renderer.targetTexture;
if (texture == null) {
throw Exception('Failed to create texture: texture is null');
}
textureId = texture!.textureId;
if (textureId < 0) {
throw Exception(
'Failed to create texture: invalid texture ID ($textureId)',
);
}
debugPrint('Successfully created texture with ID: $textureId');
await _loadSplatDataFromAsset(widget.assetPath);
_renderer.startRenderLoop();
if (!mounted) return;
setState(() {});
ticker = createTicker(_updateTexture);
unawaited(ticker.start());
} catch (e) {
debugPrint('Failed to initialize renderer: $e');
rethrow;
}
}