initPlatformState method

Future<void> initPlatformState(
  1. Size validSize,
  2. double dpr
)

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;
  }
}