In this exercise, you'll learn to execute the build command and view the terrain analysis report.
///////////////////////////////////////////////////////////////////////////////
// function
///////////////////////////////////////////////////////////////////////////////
function bool Execute( CommandPresentationModuleInfo commandInfo )
{
auto Str a_oName;
GetName( a_oName );
//////////////////////////////////////////////////
// Initialize source data and messages.
//////////////////////////////////////////////////
auto StrList a_slMessages;
LibAppServiceBuild.GenerateServiceHeader(
a_oName.Value, a_slMessages );
auto FilePath a_oElevationDataPath = new FilePath(
Application.GetApplicationDocumentsPath() );
a_oElevationDataPath.AppendPath( "Library" );
a_oElevationDataPath.AppendPath( "Textures" );
a_oElevationDataPath.AppendPath( "Elevation" );
a_oElevationDataPath.AppendPathWithFile( "USGS_13_n49w122.tif" );
auto FileNode a_oData;
a_oData.Name = a_oElevationDataPath.GetFileName();
a_oData.FilePath = a_oElevationDataPath.GetPath();
//////////////////////////////////////////////////
// Declare and initialize build objects.
//////////////////////////////////////////////////
bool a_bDebug = true;
int a_nDebugMaxChunksX = 4;
int a_nDebugMaxChunksY = 4;
...
Notes that a_bDebug is declared at the bottom of this code sample. At present, a_bDebug is true, a_nDebugMaxChunksX is set to 4, and a_nDebugMaxChunksY is set to 4. This allows us to run the compute workload on a limited set of data if we need to debug, or if we are only interested in a small area in the terrain. The variables a_nDebugMaxChunksX and a_nDebugMaxChunksY are used only when a_bDebug is true. You can use the debug flag in a variety of ways in your own implementations.
For the first run, we'll leave the service in debug mode.
Service execution starts. Note that this should take around 10-20 seconds, depending on your computing hardware.
The application creates a report and launches it in the default web browser on your computer.
This allows you to see the analysis for each cell.
There is a detailed log message, including timings for each major operation.
--- <Executing Service 'Spa.Service.AnalyzeTerrain'> ---
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\Images
Using 'Lens' sub-range for analysis: [0,0] spanning [4,4] chunks.
Using scale factor: 111139
Geotiff Original Width: 10812
Geotiff Original Height: 10812
Geotiff Original Chunks X: 43
Geotiff Original Chunks Y: 43
Geotiff Original Chunks Width: 256
Geotiff Original Chunks Height: 256
Geotiff Elevation Spacing X: 10.2906481407
Geotiff Elevation Spacing Y: 10.2906481407
Dst Range X Start 0
Dst Range Y Start 0
Dst Range Z Count 4
Dst Range W Count 4
Analyzing area of 'Lens' sub-range for analysis. 10537 metres x 10537 metres requested.
Starting analysis at chunk [0,0].
Analysis spans [4x4] chunks.
Building array texture of dimensions 256x256 with 16 slices.
Source data allocation succeeded! Requested: 256x4096 pixels.
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.image
Created Array Texture From GEOTIFF In: 0 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Quantize Elevation\430\avalanche_quantize_elevation_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float format_min': 0.00000000000
Setting shader constant: 'uniform float format_max': 1.00000000000
Setting shader constant: 'uniform int array_slices': 16
Setting up shader buffer...
Validated binding index: 'data' buffer index is: 0
Validated buffer size: 'data' buffer size is 128 bytes.
Successfully created buffer 'data' on device.
Uploading buffer data data to GPU...
Copy data to shader buffer: 1
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
<Program> Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\elevation_map.png
Destroyed shader program at ID: <1>.
Created RGBA Textures In: 1 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Normal Map\430\avalanche_normal_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Setting shader constant: 'uniform int array_slices': 16
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\aspect_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\aspect_map.png
Destroyed shader program at ID: <1>.
Created Aspect Textures In: 3 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Slope Map\430\avalanche_slope_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Setting up shader buffer...
Validated binding index: 'data' buffer index is: 0
Validated buffer size: 'data' buffer size is 128 bytes.
Successfully created buffer 'data' on device.
Uploading buffer data data to GPU...
Copy data to shader buffer: 1
Setting shader constant: 'uniform int array_slices': 16
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\slope_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\slope_map.png
Destroyed shader program at ID: <1>.
Created Slope Textures In: 1 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Openness Map\430\avalanche_openness_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform int radius': 64
Setting shader constant: 'uniform float min_angle': 90.0000000000
Setting shader constant: 'uniform float max_angle': 0.00000000000
Setting shader constant: 'uniform int array_slices': 16
Found constant index for <Texture> named 'src' at constant index 5.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\openness_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\openness_map.png
Destroyed shader program at ID: <1>.
Created Openness Textures In: 1 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Surface Area\430\avalanche_surface_area_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform int array_slices': 16
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Found constant index for <Texture> named 'src_image' at constant index 4.
<Texture> named 'src_image' will use texture unit 0.
Successfully uploaded <Texture> named 'src_image'.
Found constant index for <Texture> named 'dst_image' at constant index 1.
<Texture> named 'dst_image' will use texture unit 1.
Successfully uploaded <Texture> named 'dst_image'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\surface_tiles.image
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\surface_map.png
Destroyed shader program at ID: <1>.
Created Surface Textures In: 1 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_compute_shader.glsl
Successfully bound shader program: 1
Wrote layout declaration 'layout( local_size_x = 256, local_size_y = 1, local_size_z = 1 ) in;' to: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_local_group_decl.glsl
Setting shader uniforms...
Setting shader constant: 'uniform int array_slices': 16
Found constant index for <Texture> named 'input_image' at constant index 1.
<Texture> named 'input_image' will use texture unit 0.
Successfully uploaded <Texture> named 'input_image'.
Found constant index for <Texture> named 'output_image' at constant index 2.
<Texture> named 'output_image' will use texture unit 1.
Successfully uploaded <Texture> named 'output_image'.
First Pass Execution status: 1
Found constant index for <Texture> named 'input_image' at constant index 1.
<Texture> named 'input_image' will use texture unit 0.
Successfully uploaded <Texture> named 'input_image'.
Found constant index for <Texture> named 'output_image' at constant index 2.
<Texture> named 'output_image' will use texture unit 1.
Successfully uploaded <Texture> named 'output_image'.
Second Pass Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\sum_tiles.image
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\sum_map.png
Destroyed shader program at ID: <1>.
Created Sum Textures In: 0 seconds.
Generated report at: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\report.htm
Processed elevation data for: USGS_13_n49w122.tif
Service execution comleted: Spa.Service.AnalyzeTerrain
///////////////////////////////////////////////////////////////////////////////
// function
///////////////////////////////////////////////////////////////////////////////
function bool Execute( CommandPresentationModuleInfo commandInfo )
{
auto Str a_oName;
GetName( a_oName );
//////////////////////////////////////////////////
// Initialize source data and messages.
//////////////////////////////////////////////////
auto StrList a_slMessages;
LibAppServiceBuild.GenerateServiceHeader(
a_oName.Value, a_slMessages );
auto FilePath a_oElevationDataPath = new FilePath(
Application.GetApplicationDocumentsPath() );
a_oElevationDataPath.AppendPath( "Library" );
a_oElevationDataPath.AppendPath( "Textures" );
a_oElevationDataPath.AppendPath( "Elevation" );
a_oElevationDataPath.AppendPathWithFile( "USGS_13_n49w122.tif" );
auto FileNode a_oData;
a_oData.Name = a_oElevationDataPath.GetFileName();
a_oData.FilePath = a_oElevationDataPath.GetPath();
//////////////////////////////////////////////////
// Declare and initialize build objects.
//////////////////////////////////////////////////
bool a_bDebug = true;
int a_nDebugMaxChunksX = 4;
int a_nDebugMaxChunksY = 4;
...
bool a_bDebug = true;
bool a_bDebug = false;
Service execution starts. Note that this could take 15-30 minutes to complete, depending on your computing hardware. RAM use could peak at around 10GB, and GPU memory use could peak at around 2GB. The build could take longer if you have less than the recommended CPU or GPU memory.
After service execution completes, the application creates a report and launches it in the default web browser on your computer. The full report uses very large images (approximately 400MB), so you might have to wait while the web browser loads content from disk.
This allows you to see the analysis for each cell.
There is a detailed log message, including timings for each major operation.
--- <Executing Service 'Spa.Service.AnalyzeTerrain'> ---
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis
Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\Images
Using 'Lens' sub-range for analysis: [0,0] spanning [43,43] chunks.
Using scale factor: 111139
Geotiff Original Width: 10812
Geotiff Original Height: 10812
Geotiff Original Chunks X: 43
Geotiff Original Chunks Y: 43
Geotiff Original Chunks Width: 256
Geotiff Original Chunks Height: 256
Geotiff Elevation Spacing X: 10.2906481407
Geotiff Elevation Spacing Y: 10.2906481407
Dst Range X Start 0
Dst Range Y Start 0
Dst Range Z Count 43
Dst Range W Count 43
Analyzing area of 'Lens' sub-range for analysis. 113279 metres x 113279 metres requested.
Starting analysis at chunk [0,0].
Analysis spans [43x43] chunks.
Building array texture of dimensions 256x256 with 1849 slices.
Source data allocation succeeded! Requested: 256x473344 pixels.
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.image
Created Array Texture From GEOTIFF In: 19 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Quantize Elevation\430\avalanche_quantize_elevation_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float format_min': 0.00000000000
Setting shader constant: 'uniform float format_max': 1.00000000000
Setting shader constant: 'uniform int array_slices': 1849
Setting up shader buffer...
Validated binding index: 'data' buffer index is: 0
Validated buffer size: 'data' buffer size is 14792 bytes.
Successfully created buffer 'data' on device.
Uploading buffer data data to GPU...
Copy data to shader buffer: 1
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
<Program> Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\elevation_map.png
Destroyed shader program at ID: <1>.
Created RGBA Textures In: 117 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Normal Map\430\avalanche_normal_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Setting shader constant: 'uniform int array_slices': 1849
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\aspect_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\aspect_map.png
Destroyed shader program at ID: <1>.
Created Aspect Textures In: 346 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Slope Map\430\avalanche_slope_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Setting up shader buffer...
Validated binding index: 'data' buffer index is: 0
Validated buffer size: 'data' buffer size is 14792 bytes.
Successfully created buffer 'data' on device.
Uploading buffer data data to GPU...
Copy data to shader buffer: 1
Setting shader constant: 'uniform int array_slices': 1849
Found constant index for <Texture> named 'src' at constant index 4.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\slope_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\slope_map.png
Destroyed shader program at ID: <1>.
Created Slope Textures In: 194 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Openness Map\430\avalanche_openness_map_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform int radius': 64
Setting shader constant: 'uniform float min_angle': 90.0000000000
Setting shader constant: 'uniform float max_angle': 0.00000000000
Setting shader constant: 'uniform int array_slices': 500
Found constant index for <Texture> named 'src' at constant index 5.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Setting shader uniforms...
Setting shader constant: 'uniform int radius': 64
Setting shader constant: 'uniform float min_angle': 90.0000000000
Setting shader constant: 'uniform float max_angle': 0.00000000000
Setting shader constant: 'uniform int array_slices': 500
Found constant index for <Texture> named 'src' at constant index 5.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Setting shader uniforms...
Setting shader constant: 'uniform int radius': 64
Setting shader constant: 'uniform float min_angle': 90.0000000000
Setting shader constant: 'uniform float max_angle': 0.00000000000
Setting shader constant: 'uniform int array_slices': 500
Found constant index for <Texture> named 'src' at constant index 5.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Setting shader uniforms...
Setting shader constant: 'uniform int radius': 64
Setting shader constant: 'uniform float min_angle': 90.0000000000
Setting shader constant: 'uniform float max_angle': 0.00000000000
Setting shader constant: 'uniform int array_slices': 349
Found constant index for <Texture> named 'src' at constant index 5.
<Texture> named 'src' will use texture unit 0.
Successfully uploaded <Texture> named 'src'.
Found constant index for <Texture> named 'dst' at constant index 1.
<Texture> named 'dst' will use texture unit 1.
Successfully uploaded <Texture> named 'dst'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\openness_tiles.png
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\openness_map.png
Destroyed shader program at ID: <1>.
Created Openness Textures In: 187 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Surface Area\430\avalanche_surface_area_compute_shader.glsl
Successfully bound shader program: 1
Setting shader uniforms...
Setting shader constant: 'uniform int array_slices': 1849
Setting shader constant: 'uniform float region_size_x': 10.0000000000
Setting shader constant: 'uniform float region_size_y': 10.0000000000
Found constant index for <Texture> named 'src_image' at constant index 4.
<Texture> named 'src_image' will use texture unit 0.
Successfully uploaded <Texture> named 'src_image'.
Found constant index for <Texture> named 'dst_image' at constant index 1.
<Texture> named 'dst_image' will use texture unit 1.
Successfully uploaded <Texture> named 'dst_image'.
Compute Shader Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\surface_tiles.image
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\surface_map.png
Destroyed shader program at ID: <1>.
Created Surface Textures In: 158 seconds.
Start <Program> setup.
Setting shader source and binding shader program to rendering device...
Found shader source: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_compute_shader.glsl
Successfully bound shader program: 1
Wrote layout declaration 'layout( local_size_x = 256, local_size_y = 1, local_size_z = 1 ) in;' to: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_local_group_decl.glsl
Setting shader uniforms...
Setting shader constant: 'uniform int array_slices': 1849
Found constant index for <Texture> named 'input_image' at constant index 1.
<Texture> named 'input_image' will use texture unit 0.
Successfully uploaded <Texture> named 'input_image'.
Found constant index for <Texture> named 'output_image' at constant index 2.
<Texture> named 'output_image' will use texture unit 1.
Successfully uploaded <Texture> named 'output_image'.
First Pass Execution status: 1
Found constant index for <Texture> named 'input_image' at constant index 1.
<Texture> named 'input_image' will use texture unit 0.
Successfully uploaded <Texture> named 'input_image'.
Found constant index for <Texture> named 'output_image' at constant index 2.
<Texture> named 'output_image' will use texture unit 1.
Successfully uploaded <Texture> named 'output_image'.
Second Pass Execution status: 1
Reading texture back from GPU...
Readback operation status: 1
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\sum_tiles.image
Successfully created overhead map!
Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\sum_map.png
Destroyed shader program at ID: <1>.
Created Sum Textures In: 91 seconds.
Generated report at: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\report.htm
Processed elevation data for: USGS_13_n49w122.tif
Service execution comleted: Spa.Service.AnalyzeTerrain