setup method

  1. @override
Future<void> setup({
  1. required int width,
  2. required int height,
  3. bool enableProfiling = false,
})
override

Creates render targets and shaders for a physical-pixel viewport.

Implementation

@override
Future<void> setup({
  required int width,
  required int height,
  bool enableProfiling = false,
}) async {
  final library = gpu.ShaderLibrary.fromAsset(
    'packages/flutter_gaussian_splatter/build/shaderbundles/'
    'flutter_gaussian_splatter.shaderbundle',
  );
  if (library == null) {
    throw StateError('Failed to load flutter_gpu shader bundle.');
  }

  _vertexShader = library['SplatVertex']!;
  _fragmentShader = library['SplatFragment']!;
  _pipeline = gpu.gpuContext.createRenderPipeline(
    _vertexShader,
    _fragmentShader,
  );
  _frameInfoSlot = _vertexShader.getUniformSlot('FrameInfo');
  _batchInfoSlot = _vertexShader.getUniformSlot('BatchInfo');
  _atlasSlot = _vertexShader.getUniformSlot('u_texture');
  _orderSlot = _vertexShader.getUniformSlot('u_order_texture');
  _quatSlot = _vertexShader.getUniformSlot('u_quat_texture');
  _colorSlot = _vertexShader.getUniformSlot('u_color_texture');
  _shSlot = _vertexShader.getUniformSlot('u_sh_texture');
  _resolvedSlot = _vertexShader.getUniformSlot('u_resolved_texture');
  _frameUniforms = gpu.gpuContext.createHostBuffer();
  _quadVertexBuffer =
      gpu.gpuContext.createDeviceBufferWithCopy(_buildQuadVertexData());
  _skyVertexShader = library['SkyVertex']!;
  _skyFragmentShader = library['SkyFragment']!;
  _skyPipeline = gpu.gpuContext.createRenderPipeline(
    _skyVertexShader,
    _skyFragmentShader,
  );
  _skyInfoSlot = _skyFragmentShader.getUniformSlot('SkyInfo');
  _skyBgSlot = _skyFragmentShader.getUniformSlot('u_bg');
  _skyVertexBuffer =
      gpu.gpuContext.createDeviceBufferWithCopy(_buildSkyVertexData());

  // SH resolve pass reuses the fullscreen-triangle SkyVertex shader.
  _shResolveFragmentShader = library['ShResolveFragment']!;
  _shResolvePipeline = gpu.gpuContext.createRenderPipeline(
    _skyVertexShader,
    _shResolveFragmentShader,
  );
  _shResolveInfoSlot =
      _shResolveFragmentShader.getUniformSlot('ShResolveInfo');
  _shResolveShSlot = _shResolveFragmentShader.getUniformSlot('u_sh_texture');
  _shResolveColorSlot =
      _shResolveFragmentShader.getUniformSlot('u_color_texture');

  _cacheUniformLayouts();
  _target = _createTarget(width, height);
}