Merge pull request #289 from Daft-Freak/travis-firmware-size

Travis firmware size reporting
diff --git a/examples/voxel/voxel.cpp b/examples/voxel/voxel.cpp
index 1bdc2f3..5464c73 100644
--- a/examples/voxel/voxel.cpp
+++ b/examples/voxel/voxel.cpp
@@ -17,7 +17,9 @@
 
 uint16_t *tiles[32][32];
 std::vector<uint16_t *> free_tiles;
-uint16_t tile_cache[32 * 32 * 130];
+
+constexpr uint16_t tile_cache_size = 120;
+uint16_t tile_cache[32 * 32 * tile_cache_size];
 
 Vec3 position(64, 64, 100);
 float angle = 0.0f;
@@ -49,7 +51,7 @@
   }
 
   free_tiles.clear();
-  for(uint8_t i = 0; i < 150; i++) {
+  for(uint8_t i = 0; i < tile_cache_size; i++) {
     free_tiles.push_back(&tile_cache[32 * 32 * i]);
   }
 }
@@ -74,11 +76,6 @@
 }
 
 uint16_t get_sample(int16_t x, int16_t y) {
- /* if(x < 0 || y < 0 || x >= 1024 || y >= 1024) {
-    return 1;
-  }*/
-  
-
   // work out the tile coordinates for this sample  
   uint8_t tx = (x >> 5) & 0x1f;
   uint8_t ty = (y >> 5) & 0x1f;
@@ -141,17 +138,13 @@
     float invz = 1.0f / z * 100.0f;
 
     // for each column on the screen...
-    for(uint8_t i = 0; i < screen.bounds.w; i++) {
+    for(uint16_t i = 0; i < screen.bounds.w; i++) {
 
       uint16_t sample = get_sample(sample_point.x, sample_point.y);
       uint8_t colour_index = sample >> 8;
      
-      // determine offset of sample from heightmap and colour map
-      //uint16_t sample_offset = (int8_t(sample_point.x) & 0x7f) + (int8_t(sample_point.y) & 0x7f) * 128;
-      
-      // convert the height map sample into a y coordinate on screen
-      
-      int height = (position.z - (sample & 0xff)) * invz + float(horizon) + sample_lean;
+      // convert the height map sample into a y coordinate on screen      
+      int16_t height = (position.z - (sample & 0xff)) * invz + float(horizon) + sample_lean;
 
       // if the height is smaller (further up the screen) than our current height buffer
       // value then we need to draw a new vertical strip
@@ -191,43 +184,16 @@
   screen.pen = sky_colour;
   screen.clear();
 
- /* uint8_t buf[1024 * 32];
-  uint8_t *p = (uint8_t *)_binary_demo_map_start;
-  uint32_t o = 0;
-  uint32_t v = 0;
-  uint32_t ms_start = now();
-  for(int i = 0; i < 10000; i++) {
-    o += 1324;
-    o %= 1000000;
-    memcpy(buf, p + o, 1024);
-    v += buf[45];
-  }
-  screen.text(std::to_string(v), &minimal_font[0][0], Point(10, 20));*/
   uint32_t ms_start = now();
   draw_world(
     position, // player position
     angle, // player direction
     lean,
-    10.0f + pitch, // horizon position
+    20.0f + pitch, // horizon position
     3.0f,   // near distance
     300.0f  // far distance
   ); 
-uint32_t ms_end = now();  
-
-  
-  
-
-    /*
-  
-
-  sd_message = (char*)buffer;*/
-  
-  uint8_t buffer[16 * 1024];
-  //uint32_t ms_start = now();
-  /*for(int i = 0; i < 10; i++) {
-    read_file(terrain_file, rand() & 0xffff, 16 * 1024, buffer);
-  }*/
-  //uint32_t ms_end = now();  
+  uint32_t ms_end = now();  
 
   for(uint8_t y = 0; y < 32; y++) {
     for(uint8_t x = 0; x < 32; x++) {
@@ -245,17 +211,6 @@
       }
     }
   }
-/*
-  for(uint8_t y = 0; y < 120; y++) {
-    for(uint8_t x = 0; x < 160; x++) {
-      uint16_t sample = get_sample(x * 2 + position.x, y * 2 + position.y);
-      uint8_t height = sample >> 8;
-      uint8_t colour_index = sample & 0xff;       
-      screen.pen(colour_map_palette[height]);
-      //screen.pen(Pen(height, height, height));
-      screen.pixel(Point(x, y));
-    }
-  }*/
 
   // work out the tile coordinates for the player position
   uint8_t tx = (int32_t(position.x) >> 5) & 0x1f;
@@ -267,18 +222,12 @@
   screen.watermark();
   screen.mask = nullptr;
   screen.pen = Pen(255, 255, 255);
-
-  screen.text(std::to_string(free_tiles.size()), minimal_font, Point(10, 20));
-
-/*
   
-  screen.text(std::to_string(int(position.x)) + "," + std::to_string(int(position.y)), &minimal_font[0][0], Point(10, 10));
-*/
-  screen.text(std::to_string(ms_end - ms_start), minimal_font, Point(1, 110));
+  screen.text(std::to_string(ms_end - ms_start), minimal_font, Point(1, 230));
   screen.pen = Pen(255, 0, 0);
   for (int i = 0; i < uint16_t(ms_end - ms_start); i++) {
     screen.pen = Pen(i * 5, 255 - (i * 5), 0);
-    screen.rectangle(Rect(i * 3 + 1, 117, 2, 2));
+    screen.rectangle(Rect(i * 3 + 1, 237, 2, 2));
   }  
 }
 
@@ -302,16 +251,10 @@
     position.z -= 1.0f;
   }
 
-  // clip players z position to ensure they are above the ground
- /* uint16_t sample_offset = (int8_t(position.x) & 0x7f) + (int8_t(position.y) & 0x7f) * 128;
-  if(position.z < (height_map[sample_offset] + 50)) {
-    position.z = height_map[sample_offset] + 50;
-  }*/
-
   // move player location if joystick y axis is forward/backwards
   position.x += sinf(deg2rad(angle)) * joystick.y;
   position.y += cosf(deg2rad(angle)) * joystick.y;
-  pitch = joystick.y * 10.0f;
+  pitch = joystick.y * 20.0f;
 
   position.x = position.x < 0.0f ? 1023.0f : position.x;
   position.y = position.y < 0.0f ? 1023.0f : position.y;
diff --git a/vs/32blit.sln b/vs/32blit.sln
index d65389b..6b508b5 100644
--- a/vs/32blit.sln
+++ b/vs/32blit.sln
@@ -153,6 +153,8 @@
 EndProject

 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{FA5CCE8B-0951-484A-8D0C-AA871780F4A3}"

 EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "voxel", "examples\voxel\voxel.vcxproj", "{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}"

+EndProject

 Global

 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

 		Debug|x64 = Debug|x64

@@ -369,6 +371,14 @@
 		{D76C8D59-9C85-4D8A-8B78-7CAEE5DFC314}.Release|x64.Build.0 = Release|x64

 		{D76C8D59-9C85-4D8A-8B78-7CAEE5DFC314}.Release|x86.ActiveCfg = Release|Win32

 		{D76C8D59-9C85-4D8A-8B78-7CAEE5DFC314}.Release|x86.Build.0 = Release|Win32

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Debug|x64.ActiveCfg = Debug|x64

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Debug|x64.Build.0 = Debug|x64

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Debug|x86.ActiveCfg = Debug|Win32

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Debug|x86.Build.0 = Debug|Win32

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Release|x64.ActiveCfg = Release|x64

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Release|x64.Build.0 = Release|x64

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Release|x86.ActiveCfg = Release|Win32

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}.Release|x86.Build.0 = Release|Win32

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

@@ -398,6 +408,7 @@
 		{2E5A800D-8DD7-43EA-83C3-2E1ED6F547CB} = {E9DBB2E8-C9C5-4F46-9E6D-84D796FF4ABB}

 		{479BBF48-BF4B-42AF-AF55-6D4E0A74C987} = {E9DBB2E8-C9C5-4F46-9E6D-84D796FF4ABB}

 		{D76C8D59-9C85-4D8A-8B78-7CAEE5DFC314} = {FA5CCE8B-0951-484A-8D0C-AA871780F4A3}

+		{2B7506AD-B420-4F2B-B002-6AAAF79D1E01} = {E9DBB2E8-C9C5-4F46-9E6D-84D796FF4ABB}

 	EndGlobalSection

 	GlobalSection(ExtensibilityGlobals) = postSolution

 		SolutionGuid = {A2B87694-5EB1-4C97-9262-7E18C4A3702E}

diff --git a/vs/examples/voxel/voxel.vcxproj b/vs/examples/voxel/voxel.vcxproj
new file mode 100644
index 0000000..8870eac
--- /dev/null
+++ b/vs/examples/voxel/voxel.vcxproj
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <ItemGroup Label="ProjectConfigurations">

+    <ProjectConfiguration Include="Debug|Win32">

+      <Configuration>Debug</Configuration>

+      <Platform>Win32</Platform>

+    </ProjectConfiguration>

+    <ProjectConfiguration Include="Release|Win32">

+      <Configuration>Release</Configuration>

+      <Platform>Win32</Platform>

+    </ProjectConfiguration>

+    <ProjectConfiguration Include="Debug|x64">

+      <Configuration>Debug</Configuration>

+      <Platform>x64</Platform>

+    </ProjectConfiguration>

+    <ProjectConfiguration Include="Release|x64">

+      <Configuration>Release</Configuration>

+      <Platform>x64</Platform>

+    </ProjectConfiguration>

+  </ItemGroup>

+  <PropertyGroup Label="Globals">

+    <VCProjectVersion>16.0</VCProjectVersion>

+    <ProjectGuid>{2B7506AD-B420-4F2B-B002-6AAAF79D1E01}</ProjectGuid>

+    <RootNamespace>voxel</RootNamespace>

+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>

+  </PropertyGroup>

+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

+    <ConfigurationType>Application</ConfigurationType>

+    <UseDebugLibraries>true</UseDebugLibraries>

+    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

+    <ConfigurationType>Application</ConfigurationType>

+    <UseDebugLibraries>false</UseDebugLibraries>

+    <PlatformToolset>v142</PlatformToolset>

+    <WholeProgramOptimization>true</WholeProgramOptimization>

+    <CharacterSet>Unicode</CharacterSet>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

+    <ConfigurationType>Application</ConfigurationType>

+    <UseDebugLibraries>true</UseDebugLibraries>

+    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

+    <ConfigurationType>Application</ConfigurationType>

+    <UseDebugLibraries>false</UseDebugLibraries>

+    <PlatformToolset>v142</PlatformToolset>

+    <WholeProgramOptimization>true</WholeProgramOptimization>

+    <CharacterSet>Unicode</CharacterSet>

+  </PropertyGroup>

+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

+  <ImportGroup Label="ExtensionSettings">

+  </ImportGroup>

+  <ImportGroup Label="Shared">

+  </ImportGroup>

+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

+  </ImportGroup>

+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

+  </ImportGroup>

+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

+  </ImportGroup>

+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

+  </ImportGroup>

+  <PropertyGroup Label="UserMacros" />

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

+    <LinkIncremental>true</LinkIncremental>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

+    <LinkIncremental>true</LinkIncremental>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

+    <LinkIncremental>false</LinkIncremental>

+  </PropertyGroup>

+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

+    <LinkIncremental>false</LinkIncremental>

+  </PropertyGroup>

+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

+    <ClCompile>

+      <WarningLevel>Level3</WarningLevel>

+      <SDLCheck>true</SDLCheck>

+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>

+      <ConformanceMode>true</ConformanceMode>

+      <AdditionalIncludeDirectories>..\..\..\32blit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

+      <LanguageStandard>stdcpp14</LanguageStandard>

+    </ClCompile>

+    <Link>

+      <SubSystem>Console</SubSystem>

+      <GenerateDebugInformation>true</GenerateDebugInformation>

+      <AdditionalDependencies>32blit.lib;32blit-sdl.lib;SDL2.lib;SDL2main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

+      <AdditionalLibraryDirectories>$(OutputPath);$(SolutionDir)sdl\lib\$(PlatformTarget)\</AdditionalLibraryDirectories>

+    </Link>

+  </ItemDefinitionGroup>

+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

+    <ClCompile>

+      <WarningLevel>Level3</WarningLevel>

+      <SDLCheck>true</SDLCheck>

+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>

+      <ConformanceMode>true</ConformanceMode>

+      <AdditionalIncludeDirectories>..\..\..\32blit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

+      <LanguageStandard>stdcpp14</LanguageStandard>

+    </ClCompile>

+    <Link>

+      <SubSystem>Console</SubSystem>

+      <GenerateDebugInformation>true</GenerateDebugInformation>

+      <AdditionalLibraryDirectories>$(OutputPath);$(SolutionDir)sdl\lib\$(PlatformTarget)\</AdditionalLibraryDirectories>

+      <AdditionalDependencies>32blit.lib;32blit-sdl.lib;SDL2.lib;SDL2main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

+    </Link>

+  </ItemDefinitionGroup>

+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

+    <ClCompile>

+      <WarningLevel>Level3</WarningLevel>

+      <FunctionLevelLinking>true</FunctionLevelLinking>

+      <IntrinsicFunctions>true</IntrinsicFunctions>

+      <SDLCheck>true</SDLCheck>

+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>

+      <ConformanceMode>true</ConformanceMode>

+      <AdditionalIncludeDirectories>..\..\..\32blit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

+      <LanguageStandard>stdcpp14</LanguageStandard>

+    </ClCompile>

+    <Link>

+      <SubSystem>Console</SubSystem>

+      <EnableCOMDATFolding>true</EnableCOMDATFolding>

+      <OptimizeReferences>true</OptimizeReferences>

+      <GenerateDebugInformation>true</GenerateDebugInformation>

+      <AdditionalLibraryDirectories>$(OutputPath);$(SolutionDir)sdl\lib\$(PlatformTarget)\</AdditionalLibraryDirectories>

+      <AdditionalDependencies>32blit.lib;32blit-sdl.lib;SDL2.lib;SDL2main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

+    </Link>

+  </ItemDefinitionGroup>

+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

+    <ClCompile>

+      <WarningLevel>Level3</WarningLevel>

+      <FunctionLevelLinking>true</FunctionLevelLinking>

+      <IntrinsicFunctions>true</IntrinsicFunctions>

+      <SDLCheck>true</SDLCheck>

+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>

+      <ConformanceMode>true</ConformanceMode>

+      <AdditionalIncludeDirectories>..\..\..\32blit;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

+      <LanguageStandard>stdcpp14</LanguageStandard>

+    </ClCompile>

+    <Link>

+      <SubSystem>Console</SubSystem>

+      <EnableCOMDATFolding>true</EnableCOMDATFolding>

+      <OptimizeReferences>true</OptimizeReferences>

+      <GenerateDebugInformation>true</GenerateDebugInformation>

+      <AdditionalLibraryDirectories>$(OutputPath);$(SolutionDir)sdl\lib\$(PlatformTarget)\</AdditionalLibraryDirectories>

+      <AdditionalDependencies>32blit.lib;32blit-sdl.lib;SDL2.lib;SDL2main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

+    </Link>

+  </ItemDefinitionGroup>

+  <ItemGroup>

+    <ClInclude Include="..\..\..\examples\voxel\voxel.hpp" />

+  </ItemGroup>

+  <ItemGroup>

+    <ClCompile Include="..\..\..\examples\voxel\voxel.cpp" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\..\32blit-sdl\32blit-sdl.vcxproj">

+      <Project>{85db89b5-dea0-4429-b41e-0caa7db907ba}</Project>

+    </ProjectReference>

+    <ProjectReference Include="..\..\32blit\32blit.vcxproj">

+      <Project>{280015a3-83d7-416f-a181-7cf88bcce12f}</Project>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+  <ImportGroup Label="ExtensionTargets">

+  </ImportGroup>

+</Project>
\ No newline at end of file