rendererNullShaders top-level property
The renderer's shaders' uniform blocks as reflection reports them, for a
NullGpuDevice standing in for a GPU: NullGpuDevice(shaders: rendererNullShaders) can create a Renderer3D, which then runs its
whole CPU side (culling, sorting, batching, uniform packing) and draws
nothing. A GPU test checks these against the real reflection.
Implementation
final Map<String, Map<String, NullUniformBlock>> rendererNullShaders = {
'LitVertex': {'Frame': _frame},
'LitSkinnedVertex': {'Frame': _frame},
'LitSkinnedUniformVertex': {'Frame': _frame, 'Skin': _skin},
'LitFragment': {
'Frame': _frame,
'Lights': const NullUniformBlock('Lights', 528, {
'count': 0,
'position_range': 16,
'color': 144,
'direction': 272,
'cone': 400,
}),
'Material': const NullUniformBlock('Material', 112, {
'base_color': 0,
'emissive': 16,
'params': 32,
'flags': 48,
'uv_transform': 64,
'uv_rotation': 80,
'layers': 96,
}),
},
'ShadowVertex': {'Shadow': _shadow},
'ShadowSkinnedVertex': {'Shadow': _shadow},
'ShadowSkinnedUniformVertex': {'Shadow': _shadow, 'Skin': _skin},
'ShadowFragment': const {},
'FullscreenVertex': const {},
'SkyFragment': {
'Sky': const NullUniformBlock('Sky', 192, {
'inverse_view_projection': 0,
'camera_position': 64,
'zenith': 80,
'horizon': 96,
'ground': 112,
'options': 128,
'fog': 144,
'skybox': 160,
}),
},
'TonemapFragment': {
'Tonemap': const NullUniformBlock('Tonemap', 16, {'options': 0}),
},
'BloomDownFragment': {
'BloomDown': const NullUniformBlock('BloomDown', 32, {
'texel': 0,
'options': 16,
}),
},
'BloomUpFragment': {
'BloomUp': const NullUniformBlock('BloomUp', 32, {
'texel': 0,
'options': 16,
}),
},
'FxaaFragment': {
'Fxaa': const NullUniformBlock('Fxaa', 16, {'texel': 0}),
},
'WireVertex': {
'Overlay': const NullUniformBlock('Overlay', 128, {
'view_projection': 0,
'color': 64,
'options': 80,
}),
},
'ColorFragment': const {},
};